播放
0
点赞
0
收藏
0
评论

阿里云oss创建用户用来生成预签名 URL 读取图片

字号:TT

编者按

阿里云oss创建用户用来生成预签名 URL 读取图片 阿里云oss图片防盗链,用户创建,权限策略添加,php生成url签名并设置有效期。

完整流程:新建 RAM 用户,专门用于 caisiyou 这个 Bucket(支持上传 + 生成预签名 URL 读取图片)

访问控制 RAM 控制台地址:https://ram.console.aliyun.com/

第 1 步:新建 RAM 用户

左侧菜单:身份管理 → 用户

右上角点 创建用户

填写:

登录名称:oss_caisiyou(随便起名,英文下划线,推荐这个)

显示名称:oss_caisiyou

✅ 访问方式:勾选【OpenAPI 调用访问】(最重要!不要勾选控制台密码登录)

其他不用填,点确定

创建成功页面,立刻复制保存 AccessKeyId 和 AccessKeySecret

⚠️ 只弹出这一次!关闭页面后 Secret 就看不到了,丢了只能重新创建 AK

第 2 步:新建自定义权限策略(只授权 caisiyou bucket)

左侧菜单:权限管理 → 权限策略

右上角 创建权限策略

策略名称:policy_caisiyou_oss

描述:caisiyou bucket oss读写,含GetObject生成签名url

选择【脚本编辑】,把下面 JSON 全部粘贴进去

{
   "Version": "1",
   "Statement": [
       {
           "Effect": "Allow",
           "Action": [
               "oss:PutObject",
               "oss:InitiateMultipartUpload",
               "oss:UploadPart",
               "oss:CompleteMultipartUpload",
               "oss:ListParts",
               "oss:AbortMultipartUpload",
               "oss:GetObject"
           ],
           "Resource": [
               "acs:oss:*:*:caisiyou",
               "acs:oss:*:*:caisiyou/*"
           ]
       }
   ]

点击【确定】保存策略

权限说明:

oss:GetObject:生成预签名 URL 预览 / 下载文件必备

其余 action:分片上传、普通 Put 上传(你项目直传用)

资源限定死 caisiyou,不会访问到别的 Bucket,最小权限,安全

第 3 步:把策略授权给刚才新建的 RAM 用户

回到【身份管理 → 用户】,找到用户 oss_caisiyou,点添加权限

权限类型:自定义策略

在搜索框搜索 policy_caisiyou_oss,勾选这条策略

点确定授权

第 4 步:等待生效 + PHP 替换 AK

⏱️ RAM 策略1~3 分钟异步生效,保存权限后不要立刻测试,等一会。

修改你的 OssHelper 原生代码,填入新 AK

<?php
class OssHelper
{
   private static $accessKeyId     = "LTAI5t7oGLAn9R2222222";
   private static $accessKeySecret = "vpyGCSVjerznYqSFx22222222";
   private static $endpoint        = "caisiyou.oss-cn-beijing.aliyuncs.com"; // 自定义域名 / oss-cn-xxx.aliyuncs.com
   private static $bucket          = "caisiyou";

   /**
    * 原生PHP 生成OSS GET预签名URL(无SDK)
    * @param string $object OSS文件路径,例:upload/1.jpg
    * @param int $expire 有效期秒数,最大32400
    * @return string|null
    */
   public static function getSignedUrl(string $object, int $expire = 1800): ?string
   {
       $accessKeyId     = self::$accessKeyId;
       $accessKeySecret = self::$accessKeySecret;
       $endpoint        = self::$endpoint;
       $bucket          = self::$bucket;

       $expire = min($expire, 32400);
       $expireTime = time() + $expire;

       // 对object进行url编码(注意OSS编码规则:/ 不要编码)
       $objectRaw = $object;
       $object = rawurlencode($object);
       $object = str_replace('%2F', '/', $object);

       // 构造签名串(OSS标准CanonicalString)
       $stringToSign = "GET\n\n\n{$expireTime}\n/{$bucket}/{$objectRaw}";

       // HMAC-SHA1签名,base64编码
       $signature = base64_encode(hash_hmac('sha1', $stringToSign, $accessKeySecret, true));
       $signature = rawurlencode($signature);

       // 拼接URL
       $url = "https://{$endpoint}/{$object}";
       $url .= "?OSSAccessKeyId={$accessKeyId}";
       $url .= "&Expires={$expireTime}";
       $url .= "&Signature={$signature}";

       return $url;
   }
}

// 使用示例
echo $imgsrc = OssHelper::getSignedUrl("2c66ec0fa1f65498fbf0b8bf23858a13.jpeg", 600);
?>
<img src='<?php echo $imgsrc;?>'>

生成图片的url类似https://caisiyou.oss-cn-beijing.aliyuncs.com/2c66ec0fa1f65498fbf0b8bf23858a13.jpeg?OSSAccessKeyId=123&Expires=1792462310&Signature=abc

完毕

×

举报内容

请选择举报原因,我们会尽快处理。恶意举报可能影响您的账号信誉。
×

发送私信

请输入要发送的消息内容,文明发言。
全部评论()
超出500字
[害羞] [委屈] [礼物] [惊讶] [咖啡] [疑问] [喷火] [赞] [吐] [鄙视] [开心] [奸笑] [踩] [强] [金钱] [坏笑] [汗] [睡觉] [摇滚] [灯泡] [怒喷] [脸红] [墨镜] [咬牙] [玫瑰] [大笑] [斜眼] [花痴] [无语] [听音乐] [流汗] [惊恐] [大哭] [钱袋] [爱心笑] [音乐] [冷漠] [胜利] [彩虹] [微笑] [侧目] [张嘴惊] [吐舌]
Lv.2 二级用户
41
文章
6
评论
0
粉丝