基于 CAM 管理子账号权限

最近更新时间: 2026-06-30 15:06:00

本文将介绍如何通过访问管理 CAM 策略使子账户可以查看和使用容器镜像服务 TCR 企业版相关资源,包括具体的操作步骤以及常用的策略配置示例。

注意

如您在容器镜像服务控制台中使用部分功能时需要外部权限,例如私有网络、操作审计、云标签等,请参见 支持 CAM 的产品 中对应产品的访问管理指南文档。

访问管理(CAM)简介

访问管理是云平台提供的一套 Web 服务,它主要用于帮助用户安全管理云平台账户下的资源的访问权限。通过 CAM,您可以创建、管理和销毁用户(组),并通过身份管理和策略管理控制哪些人可以使用哪些云资源。
当您使用 CAM 的时候,可以将策略与一个用户或一组用户关联起来,策略能够授权或者拒绝用户使用指定资源完成指定任务。更多关于 CAM 策略的基本信息,请参见 策略语法
若您不需要对子账户进行 TCR 相关资源的访问管理,您可以跳过此章节,不会影响您对文档中其余部分的理解和使用。

TCR 基于 CAM 的资源级访问控制

资源级权限指的是能够指定允许用户对哪些资源具有执行操作的能力。容器镜像服务(TCR)支持基于 CAM 的资源级访问控制,控制颗粒度可至仓库级,即用户可通过配置 CAM 策略实现授权子账号仅能够操作指定镜像仓库或 Helm Chart 仓库资源。
TCR 在 CAM 中可授权的资源类型:

资源类型 授权策略中的资源描述方法
企业版实例相关 qcs::tcr:$region:$account:instance/*
企业版仓库相关 qcs::tcr:$region:$account:repository/*
个人版仓库相关 qcs::tcr:$region:$account:repo/*
  • $region:描述地域信息,例如 ap-guangzhou 代表广州地域,若值为空则表示所有地域。具体地域列表及缩写请参见 地域和可用区
  • $account:描述资源拥有者的主账号信息,表示为 uin/${uin},例如 uin/12345678,若值为空则表示创建策略的 CAM 用户所属的主账号。
    关于授权策略中的资源描述方式,详情请参见 资源描述方式

操作步骤

本文以“授权子账号只读某个镜像仓库”为例,介绍如何完成创建策略操作。

  • 实例 ID:tcr-xxxxxxxx
  • 命名空间:team-01
  • 镜像仓库:repo-demo
    通过策略生成器创建
  1. 登录访问管理控制台。

  2. 左侧导航栏中,单击策略管理,进入策略管理页面。

  3. 单击左上角的新建自定义策略

  4. 在弹出的选择创建方式窗口中,单击按策略生成器创建,进入编辑策略页面。

  5. 在“可视化策略生成器”中选择服务的页面,补充以下信息,并编辑授权声明。

    • 效果(Effect):选择允许或拒绝,这里我们选择允许
    • 服务(Service):选择要授权的产品,这里我们选择容器镜像服务 (tcr)
    • 操作(Action):选择需要授权的操作,这里我们选择读操作
    • 资源(Resource):选择全部资源或您要授权的特定资源,这里我们选择特定资源,并添加以下资源六段式来限制访问。
      • repository:选择仓库所属地域,并填写该仓库的资源路径,例如 tcr-xxxxxxxx/team-01/repo-demo/*。您可在 镜像仓库 中获取资源路径。
      • repo:此处置空。
      • instance:选择仓库所属地域,并填写该仓库所属实例的实例 ID,例如 tcr-xxxxxxxx。您可在实例列表 中获取实例 ID。
    • 条件:此处置空。
  6. 单击下一步,进入关联用户/用户组页面。

  7. 在关联用户/用户组页面,补充策略名称和描述信息,可同时关联用户、用户组或角色快速授权。

  8. 单击完成,完成按策略生成器创建自定义策略的操作。
    通过策略与法创建

  9. 登录 访问管理控制台。

  10. 左侧导航栏中,单击策略管理,进入策略管理页面。

  11. 单击左上角的新建自定义策略

  12. 在弹出的选择创建方式窗口中,单击按策略语法创建,进入选择策略模板页面。

  13. 在选择模板类型中,选择空白模板

  14. 单击下一步:编辑策略,进入编辑策略页面。

  15. 编辑策略页面,补充策略名称和描述信息,添加以下策略内容。

     {
         "version": "2.0",
         "statement": [{
                 "action": [
                     "tcr:DescribeRepositories",
                     "tcr:PullRepository",
                     "tcr:DescribeNamespaces"
                 ],
                 "resource": [
                     "qcs::tcr:::repository/tcr-xxxxxxxx/team-01/repo-demo/*"
                 ],
                 "effect": "allow"
             },
             {
                 "action": [
                     "tcr:DescribeInstance*"				
                 ],
                 "resource": [
                     "qcs::tcr:::instance/tcr-xxxxxxxx"
                 ],
                 "effect": "allow"
             }
         ]
     }
    
  16. 单击完成,完成按策略语法创建自定义策略的操作。

常用策略配置

若需要自定义编辑策略 JSON,请参见企业版接入 CAM 的 API 列表 以及 策略语法

预设策略配置

  • QcloudTCRFullAccess:容器镜像服务(TCR)全读写权限。
    子账号绑定该策略后,将具有 TCR 全部资源的全部操作权限,包含企业版及个人版。

      {
          "version": "2.0",
          "statement": [{
              "action": [
                  "tcr:*"
              ],
              "resource": "*",
              "effect": "allow"
          }]
      }
    
  • QcloudTCRReadOnlyAccess:TCR 只读权限。
    子账号绑定该策略后,将具有容器镜像服务全部资源的只读权限,包含企业版及个人版。

      {
          "version": "2.0",
          "statement": [{
              "action": [
                  "tcr:Describe*",
                  "tcr:PullRepository*"
              ],
              "resource": "*",
              "effect": "allow"
          }]
      }
    

典型场景策略配置

注意

以下场景策略均只面向企业版使用场景。

  • 授予子账号 TCR 企业版内全部资源的全读写操作权限。

      {
          "version": "2.0",
          "statement": [{
              "action": [
                  "tcr:*"
              ],
              "resource": [
                  "qcs::tcr:::instance/*",
                  "qcs::tcr:::repository/*"
              ],
              "effect": "allow"
          }]
      }
    
  • 授予子账号 TCR 企业版内全部资源的只读操作权限。

      {
          "version": "2.0",
          "statement": [{
              "action": [
                  "tcr:Describe*",
                  "tcr:PullRepository*"
              ],
              "resource": [
                  "qcs::tcr:::instance/*",
                  "qcs::tcr:::repository/*"
              ],
              "effect": "allow"
          }]
      }
    
  • 授权子账号管理指定实例。例如 dev-guangzhou,其实例 ID 为 tcr-xxxxxxxx。

      {
          "version": "2.0",
          "statement": [{
              "action": [
                  "tcr:*"
              ],
              "resource": [
                  "qcs::tcr:::instance/tcr-xxxxxxxx",
                  "qcs::tcr:::repository/tcr-xxxxxxxx/*"
              ],
              "effect": "allow"
          }]
      }
    
  • 授权子账号管理指定实例内的指定命名空间。例如实例 tcr-xxxxxxxx 下 team-01。

      {
          "version": "2.0",
          "statement": [{
                  "action": [
                      "tcr:*"
                  ],
                  "resource": [
                      "qcs::tcr:::repository/tcr-xxxxxxxx/team-01",
                      "qcs::tcr:::repository/tcr-xxxxxxxx/team-01/*"
                  ],
                  "effect": "allow"
              },
              {
                  "action": [
                      "tcr:DescribeInstance*"
                  ],
                  "resource": [
                      "qcs::tcr:::instance/tcr-xxxxxxxx"
                  ],
                  "effect": "allow"
              }
          ]
      }
    
  • 授权子账号只读某个镜像仓库,仅能拉取该仓库内镜像,无法删除仓库、修改仓库属性及推送镜像。例如实例 tcr-xxxxxxxx 下 team-01 命名空间内的 repo-demo。

      {
          "version": "2.0",
          "statement": [{
                  "action": [
                      "tcr:Describe*",
                      "tcr:PullRepository"
                  ],
                  "resource": [
                      "qcs::tcr:::instance/tcr-xxxxxxxx",
                      "qcs::tcr:::repository/tcr-xxxxxxxx/team-01",
                      "qcs::tcr:::repository/tcr-xxxxxxxx/team-01/repo-demo",
                      "qcs::tcr:::repository/tcr-xxxxxxxx/team-01/repo-demo/*"
                  ],
                  "effect": "allow"
              }
          ]
      }