JetibenRong

JetibenRong

我想有那么一段时光,可以在面朝大海的房车里煮上一杯咖啡,看看曾写过的代码

阿里云OSS限定一个appid智能访问某一个bucket

本文发布于:2026-04-23
下面是我在做feiou.com网站遇到的问了千问:
 
要实现让一个阿里云账号(通常指RAM用户)只能访问特定的一个Bucket,核心方法是利用RAM(访问控制)的自定义权限策略。这遵循了安全最佳实践中的“最小权限原则”,即只授予完成工作所必需的最低权限。
不建议直接使用系统预设的策略(如 AliyunOSSFullAccess),因为它会授予操作账号下所有OSS资源的权限,存在安全风险。
以下是实现这一目标的详细步骤:

🔑 第一步:创建RAM用户

首先,你需要为这个应用或服务创建一个独立的RAM用户,而不是使用主账号。
  1. 登录阿里云 RAM访问控制 控制台。
  2. 在左侧导航栏,选择 身份管理 > 用户
  3. 点击 创建用户
  4. 填写登录名称和显示名称(例如 app-bucket-user)。
  5. 在“访问方式”中,勾选 使用永久AccessKey访问(如果需要通过API/SDK访问)。
  6. 创建成功后,系统会弹出AccessKey ID和AccessKey Secret,请务必立即妥善保存,它们只会显示一次。

🎯 第二步:创建自定义权限策略

这是最关键的一步,通过自定义策略精确限定该用户只能操作指定的Bucket。
  1. 在RAM控制台左侧导航栏,选择 权限管理 > 权限策略
  2. 点击 创建权限策略
  3. 选择 脚本配置 标签页。
  4. 在策略内容框中,删除默认内容,并粘贴以下JSON策略。请务必将 your-target-bucket-name 替换为你希望授权的Bucket名称。
{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "oss:ListBuckets"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "oss:GetObject",
        "oss:PutObject",
        "oss:DeleteObject",
        "oss:ListObjects"
      ],
      "Resource": [
        "acs:oss:*:*:your-target-bucket-name",
        "acs:oss:*:*:your-target-bucket-name/*"
      ]
    }
  ]
}

 

策略解读:
  • oss:ListBuckets: 允许用户列出所有Bucket。这通常是必要的,因为许多OSS客户端工具在执行操作前会先调用此接口。
  • oss:GetObjectoss:PutObjectoss:DeleteObjectoss:ListObjects: 这些是核心的读写操作权限。你可以根据实际需求增减,例如,如果只需要只读权限,就移除 PutObject 和 DeleteObject
  • Resource: 这里精确指定了权限生效的资源。acs:oss:*:*:your-target-bucket-name 指Bucket本身,acs:oss:*:*:your-target-bucket-name/* 指Bucket内的所有文件。
  1. 配置完成后,点击 确定
  2. 为策略设置一个名称(如 Custom-OSS-OneBucket-Access)和描述,然后点击 确定 保存。

🔗 第三步:为RAM用户授权

最后,将创建好的自定义策略授予第一步中创建的RAM用户。
  1. 回到 用户 列表页面。
  2. 找到你创建的RAM用户(如 app-bucket-user)。
  3. 在用户列表的右侧,点击 添加权限
  4. 在授权页面,选择 自定义策略 标签。
  5. 在列表中找到并勾选你刚才创建的策略(如 Custom-OSS-OneBucket-Access)。
  6. 点击 确定 完成授权。
完成以上步骤后,这个RAM用户所使用的AccessKey ID和Secret就只能在代码或工具中访问你所指定的那个Bucket了,对其他Bucket的任何操作都会被拒绝。
JetibenRong

JetibenRong

我想有那么一段时光,可以在面朝大海的房车里煮上一杯咖啡,看看曾写过的代码

联络

标签

链接