若您期望使不同的RAM用户拥有访问镜像资源的不同权限,并且同时也支持提供临时的访问授权,您可以借助阿里云权限管理机制访问控制(简称RAM)和安全凭证管理(简称STS)为账号进行鉴权。
前提条件
已使用阿里云账号创建RAM用户。具体操作,请参见创建RAM用户。
背景信息
阿里云权限管理机制包括访问控制(简称RAM)和安全凭证管理(简称STS),灵活使用RAM和STS,可以极大地提高管理的灵活性和安全性。默认情况下,阿里云账号对自己的资源拥有完整的操作权限。借助RAM和STS,可以使不同的RAM用户拥有访问镜像资源的不同权限,同时也支持提供临时的访问授权。在了解如何配置授权策略前,请先详细阅读RAM产品文档。
授予RAM用户权限策略后,使用RAM用户登录容器镜像控制台,需要创建个人版实例和设置Registry密码,然后才能查看拥有权限的镜像资源。
RAM说明
在使用RAM对RAM用户授权时,请特别关注下面的说明,以免您为RAM用户授予过大的权限。
如果您通过RAM为某一个RAM用户授予阿里云所有资源的管理权限(即AdministratorAccess),无论您之前是否为该RAM用户授予过镜像服务的权限,该RAM用户都将拥有对镜像服务的全部权限。
授予RAM用户系统策略
ACR默认已创建AliyunContainerRegistryFullAccess和AliyunContainerRegistryReadOnlyAccess策略,您直接授权使用即可。以下为系统策略的详细介绍:
AliyunContainerRegistryFullAccess
RAM用户拥有该授权后,对于镜像资源的权限等同于阿里云账号,可以做任意操作。
{ "Statement": [ { "Action": "cr:*", "Effect": "Allow", "Resource": "*" } ], "Version": "1" }
AliyunContainerRegistryReadOnlyAccess
RAM用户拥有该授权后,对于所有镜像资源有只读权限,例如:可以查看仓库列表,Pull镜像等。
{ "Statement": [ { "Action": [ "cr:Get*", "cr:List*", "cr:PullRepository" ], "Effect": "Allow", "Resource": "*" } ], "Version": "1" }
本文以授予RAM用户AliyunContainerRegistryReadOnlyAccess权限为例:
使用RAM管理员登录RAM控制台。
在左侧导航栏,选择 。
在用户页面,单击目标RAM用户操作列的添加权限。
您也可以选中多个RAM用户,单击用户列表下方的添加权限,为RAM用户批量授权。
在新增授权面板,为RAM用户添加权限。
选择授权应用范围。
账号级别:权限在当前阿里云账号内生效。
资源组级别:权限在指定的资源组内生效。
说明指定资源组授权生效的前提是该云服务已支持资源组。更多信息,请参见支持资源组的云服务。
输入被授权主体。
被授权主体即需要授权的RAM用户,系统会自动填入当前的RAM用户,您也可以添加其他RAM用户。
在权限策略搜索框中搜索AliyunContainerRegistryReadOnlyAccess,然后单击AliyunContainerRegistryReadOnlyAccess。
单击确认新增授权。
单击关闭。
授予RAM用户自定义策略
如果您想对权限进行细粒度控制,您可以自定义策略,然后授予RAM用户自定义策略权限。
典型场景策略配置
以下列举了典型场景的自定义策略:
场景一: 授予RAM用户某个命名空间(例如:juzhong)的读权限。
RAM用户登录实例后,可以拉取所有该命名空间下的镜像,可以通过OpenAPI查看到该命名空间的信息及该命名空间下所有镜像仓库的相关信息。
{ "Statement": [ { "Action": [ "cr:Get*", "cr:List*", "cr:PullRepository" ], "Effect": "Allow", "Resource": [ "acs:cr:*:*:repository/juzhong/*" ] } ], "Version": "1" }
重要如果同时需要RAM用户在控制台查看命名空间,需要进行如下授权。RAM用户可以看到全量的命名空间及仓库列表,但仅能Pull其中juzhong这个命名空间下的仓库。
{ "Statement": [ { "Action": [ "cr:Get*", "cr:List*", "cr:PullRepository" ], "Effect": "Allow", "Resource": [ "acs:cr:*:*:repository/juzhong/*" ] }, { "Action": [ "cr:ListNamespace", "cr:ListRepository" ], "Effect": "Allow", "Resource": [ "*" ] } ], "Version": "1" }
场景二:授权RAM用户某个镜像仓库(例如:镜像仓库名为nginx,所属命名空间名为juzhong,所属地域为华东1)的所有权限。
重要如需通过RAM用户在控制台上管理镜像仓库,依然需要参考场景1配置。
{ "Statement": [ { "Action": [ "cr:*" ], "Effect": "Allow", "Resource": [ "acs:cr:cn-hangzhou:*:repository/juzhong/nginx" ] }, { "Action": [ "cr:Get*", "cr:List*" ], "Effect": "Allow", "Resource": [ "acs:cr:*:*:repository/juzhong" ] } ], "Version": "1" }
场景三:授予RAM用户某命名空间的所有操作权限。
重要此场景仅可以通过OpenAPI调用。如果需要同时在控制台看到所有仓库,请参照场景1。
{ "Statement": [ { "Action": [ "cr:*" ], "Effect": "Allow", "Resource": [ "acs:cr:cn-hangzhou:*:repository/juzhong", "acs:cr:cn-hangzhou:*:repository/juzhong/*" ] } ], "Version": "1" }
您可以使用以上典型场景的脚本配置创建自定义策略,然后授予RAM用户自定义策略。操作如下:
创建自定义策略。
授予RAM用户自定义策略。
镜像服务鉴权规则
资源描述
在通过RAM进行授权时,资源的描述方式如下表所示:
资源类型 | 授权策略中的资源描述 |
repository | acs:cr:$regionid:$accountid:repository/$namespacename/$repositoryname |
参数说明如下表所示:
参数名称 | 说明 |
regionid | 地域ID,可用*代替。 |
accountid | 云账号数字ID,可用*代替。 |
namespacename | 命名空间名称。 |
repositoryname | 镜像仓库名称。 |