You need to enable JavaScript to run this app.
导航
鉴权
最近更新时间:2024.01.08 20:03:25首次发布时间:2022.03.31 23:31:56

本文主要描述为 IAM 用户授权操作镜像仓库 CR 的资源和鉴权策略。

资源描述

通过 IAM 进行授权时,资源描述方式如下表所示:

资源类型授权策略中的资源描述
repositorytrn:cr:$regionid:$accountid:repository/$instance/$namespace/$repository

参数说明如下表所示:

参数名称说明
$regionid地域 ID,可用*匹配所有地域(Region)。
$accountid火山引擎账号 ID,可用*代替 Account。
$instance镜像仓库标准版实例名称。
$namespace命名空间名称。
$$repositoryOCI 制品仓库名称。

鉴权规则

IAM 用户访问镜像仓库服务 API 时,镜像仓库服务会向 IAM 进行权限检查。每个 API 会根据涉及到的资源以及 API 的语义来确定需要检查哪些资源的权限。每个 API 的鉴权规则如下表所示:

API鉴权 Action鉴权 Resource
创建镜像仓库实例cr:CreateRegistrytrn:cr:*:*:instance/$instance
删除镜像仓库实例cr:DeleteRegistrytrn:cr:*:*:instance/$instance
启动镜像仓库实例cr:StartRegistrytrn:cr:*:*:instance/$instance
查询镜像仓库实例cr:ListRegistries*
更新镜像仓库公网入口cr:UpdatePublicEndpointtrn:cr:*:*:instance/$instance
获取镜像仓库公网入口信息cr:GetPublicEndpointtrn:cr:*:*:instance/$instance
更新 VPC 访问入口cr:UpdateVpcEndpointtrn:cr:*:*:instance/$instance
获取 VPC 访问入口cr:GetVpcEndpointtrn:cr:*:*:instance/$instance
查询镜像仓库域名cr:ListDomainstrn:cr:*:*:instance/$instance
创建命名空间cr:CreateNamespacetrn:cr:*:*:repository/$instance/$namespace
删除命名空间cr:DeleteNamespacetrn:cr:*:*:repository/$instance/$namespace
查询命名空间cr:ListNamespaces*
创建 OCI 制品仓库cr:CreateRepositorytrn:cr:*:*:repository/$instance/$namespace/$repository
删除 OCI 制品仓库cr:DeleteRepositorytrn:cr:*:*:repository/$instance/$namespace/$repository
推送镜像cr:PushRepositorytrn:cr:*:*:repository/$instance/$namespace/$repository
拉取镜像cr:PullRepositorytrn:cr:*:*:repository/$instance/$namespace/$repository
查询 OCI 制品仓库cr:ListRepositories*
查询 OCI 制品版本cr:ListTagstrn:cr:*:*:repository/$instance/$namespace/$repository
更新镜像仓库用户信息cr:SetUsertrn:cr:*:*:instance/$instance
获取镜像仓库用户信息cr:GetUsertrn:cr:*:*:instance/$instance
获取登录镜像仓库的临时访问密钥cr:GetAuthorizationTokentrn:cr:*:*:instance/$instance

鉴权示例

以下为镜像仓库的各场景中鉴权规则的用法。

场景一:推送镜像

授予 IAM 用户某个标准版实例下命名空间(例如:标准版实例 instance-a,命名空间 library)的推送镜像的权限。IAM 用户登录镜像仓库后可以推送该命名空间下所有镜像实例,可以通过 OpenAPI 查到该命名空间的信息以及该命名空间下所有镜像实例的相关信息。

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "cr:List*",
        "cr:Get*",
        "cr:Pull*",
        "cr:Push*"
      ],
      "Resource": [
        "trn:cr:*:*:instance/instance-a", 
        "trn:cr:*:*:repository/instance-a/library", 
        "trn:cr:*:*:repository/instance-a/library/*"
      ]
    }
  ]
}

场景二:拉取镜像

授予 IAM 用户某个标准版实例下命名空间(例如:标准版实例 instance-a,命名空间 library)的读权限。IAM 用户登录镜像仓库后可以拉取该命名空间下所有镜像实例,可以通过 OpenAPI 查到该命名空间的信息以及该命名空间下所有镜像实例的相关信息。

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "cr:List*",
        "cr:Get*",
        "cr:Pull*"
      ],
      "Resource": [
        "trn:cr:*:*:instance/instance-a", 
        "trn:cr:*:*:repository/instance-a/library", 
        "trn:cr:*:*:repository/instance-a/library/*"
      ]
    }
  ]
}

场景三:命令空间维度全量权限

授予 IAM 用户某个标准版实例下命名空间(例如:标准版实例 instance-a,命名空间 library)的所有使用权限 。

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "cr:*"
      ],
      "Resource": [
        "trn:cr:*:*:instance/instance-a", 
        "trn:cr:*:*:repository/instance-a/library", 
        "trn:cr:*:*:repository/instance-a/library/*"
      ]
    }
  ]
}

场景四:OCI 制品仓库维度全量权限

授权 IAM 用户某个 OCI 制品仓库(例如:标准版实例 instance-a,命名空间 library,OCI 制品仓库 nginx)的所有使用权限。

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "cr:List*",
        "cr:Get*"
      ],
      "Resource": [
        "trn:cr:*:*:instance/instance-a", 
        "trn:cr:*:*:repository/instance-a/library"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "cr:*"
      ],
      "Resource": [
        "trn:cr:*:*:instance/instance-a", 
        "trn:cr:*:*:repository/instance-a/library/nginx"
      ]
    }
  ]
}