本文主要描述为 IAM 用户授权操作镜像仓库 CR 的资源和鉴权策略。
通过 IAM 进行授权时,资源描述方式如下表所示:
资源类型 | 授权策略中的资源描述 |
---|---|
repository | trn:cr:$regionid:$accountid:repository/$instance/$namespace/$repository |
参数说明如下表所示:
参数名称 | 说明 |
---|---|
$regionid | 地域 ID,可用* 匹配所有地域(Region)。 |
$accountid | 火山引擎账号 ID,可用* 代替 Account。 |
$instance | 镜像仓库标准版实例名称。 |
$namespace | 命名空间名称。 |
$$repository | OCI 制品仓库名称。 |
IAM 用户访问镜像仓库服务 API 时,镜像仓库服务会向 IAM 进行权限检查。每个 API 会根据涉及到的资源以及 API 的语义来确定需要检查哪些资源的权限。每个 API 的鉴权规则如下表所示:
API | 鉴权 Action | 鉴权 Resource |
---|---|---|
创建镜像仓库实例 | cr:CreateRegistry | trn:cr:*:*:instance/$instance |
删除镜像仓库实例 | cr:DeleteRegistry | trn:cr:*:*:instance/$instance |
启动镜像仓库实例 | cr:StartRegistry | trn:cr:*:*:instance/$instance |
查询镜像仓库实例 | cr:ListRegistries | * |
更新镜像仓库公网入口 | cr:UpdatePublicEndpoint | trn:cr:*:*:instance/$instance |
获取镜像仓库公网入口信息 | cr:GetPublicEndpoint | trn:cr:*:*:instance/$instance |
更新 VPC 访问入口 | cr:UpdateVpcEndpoint | trn:cr:*:*:instance/$instance |
获取 VPC 访问入口 | cr:GetVpcEndpoint | trn:cr:*:*:instance/$instance |
查询镜像仓库域名 | cr:ListDomains | trn:cr:*:*:instance/$instance |
创建命名空间 | cr:CreateNamespace | trn:cr:*:*:repository/$instance/$namespace |
删除命名空间 | cr:DeleteNamespace | trn:cr:*:*:repository/$instance/$namespace |
查询命名空间 | cr:ListNamespaces | * |
创建 OCI 制品仓库 | cr:CreateRepository | trn:cr:*:*:repository/$instance/$namespace/$repository |
删除 OCI 制品仓库 | cr:DeleteRepository | trn:cr:*:*:repository/$instance/$namespace/$repository |
推送镜像 | cr:PushRepository | trn:cr:*:*:repository/$instance/$namespace/$repository |
拉取镜像 | cr:PullRepository | trn:cr:*:*:repository/$instance/$namespace/$repository |
查询 OCI 制品仓库 | cr:ListRepositories | * |
查询 OCI 制品版本 | cr:ListTags | trn:cr:*:*:repository/$instance/$namespace/$repository |
更新镜像仓库用户信息 | cr:SetUser | trn:cr:*:*:instance/$instance |
获取镜像仓库用户信息 | cr:GetUser | trn:cr:*:*:instance/$instance |
获取登录镜像仓库的临时访问密钥 | cr:GetAuthorizationToken | trn: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/*" ] } ] }
授权 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" ] } ] }