阿里云权限管理机制包括访问控制(简称RAM)和安全凭证管理(简称STS),灵活使用RAM和STS,可以极大地提高管理的灵活性和安全性。本文介绍如何在不同的场景下配置仓库的访问控制。
前提条件
已使用阿里云账号创建RAM用户。具体操作,请参见创建RAM用户。背景信息
默认情况下,阿里云账号对自己的资源拥有完整的操作权限。借助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用户某个命名空间(例如: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 镜像仓库名称。 - 鉴权规则
RAM用户或者STS方式访问镜像服务API时,镜像服务会向RAM进行权限检查,以确保调用者拥有相应权限。每个API会根据涉及到的资源以及API的语义来确定需要检查哪些资源的权限。每个API的鉴权规则如下表所示:
API 鉴权Action 鉴权Resource 创建命名空间 cr:CreateNamespace * 删除命名空间 cr:DeleteNamespace acs:cr:$regionid:$accountid:repository/$namespacename 更新命名空间信息 cr:UpdateNamespace acs:cr:$regionid:$accountid:repository/$namespacename 获取指定命名空间 cr:GetNamespace acs:cr:$regionid:$accountid:repository/$namespacename 获取命名空间列表 cr:ListNamespace * 创建仓库 cr:CreateRepository acs:cr:$regionid:$accountid:repository/$namespacename 删除仓库 cr:DeleteRepository acs:cr:$regionid:$accountid:repository/$namespacename/$repositoryname 更新仓库信息 cr:UpdateRepository acs:cr:$regionid:$accountid:repository/$namespacename/$repositoryname 查询仓库信息 cr:GetRepository acs:cr:$regionid:$accountid:repository/$namespacename/$repositoryname 查询仓库列表信息 cr:ListRepository * 根据命名空间查询仓库列表信息 cr:ListRepository * 查询仓库标签信息 cr:ListRepositoryTag acs:cr:$regionid:$accountid:repository/$namespacename/$repositoryname 删除镜像版本 cr:DeleteRepositoryTag acs:cr:$regionid:$accountid:repository/$namespacename/$repositoryname 查询镜像Manifest信息 cr:GetRepositoryManifest acs:cr:$regionid:$accountid:repository/$namespacename/$repositoryname 查询镜像层信息 cr:GetRepositoryLayers acs:cr:$regionid:$accountid:repository/$namespacename/$repositoryname 获取临时Token cr:GetAuthorizationToken * Pull镜像 cr:PullRepository acs:cr:$regionid:$accountid:repository/$namespacename/$repositoryname Push镜像 cr:PushRepository acs:cr:$regionid:$accountid:repository/$namespacename/$repositoryname