仓库访问控制

若您期望使不同的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权限为例:

  1. 使用RAM管理员登录RAM控制台

  2. 在左侧导航栏,选择身份管理 > 用户

  3. 用户页面,单击目标RAM用户操作列的添加权限

    image

    您也可以选中多个RAM用户,单击用户列表下方的添加权限,为RAM用户批量授权。

  4. 新增授权面板,为RAM用户添加权限。

    1. 选择授权应用范围。

      • 账号级别:权限在当前阿里云账号内生效。

      • 资源组级别:权限在指定的资源组内生效。

        说明

        指定资源组授权生效的前提是该云服务已支持资源组。更多信息,请参见支持资源组的云服务

    2. 输入被授权主体。

      被授权主体即需要授权的RAM用户,系统会自动填入当前的RAM用户,您也可以添加其他RAM用户。

    3. 所有策略类型下单击自定义策略在文本框中输入AliyunContainerRegistryReadOnlyAccess,然后单击AliyunContainerRegistryReadOnlyAccess

    4. 单击确认新增授权

  5. 单击关闭

授予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用户自定义策略。操作如下:

  1. 创建自定义策略。

    1. 使用阿里云账号登录RAM控制台

    2. 在左侧导航栏,选择权限管理 > 权限策略

    3. 权限策略页面,单击创建权限策略

    4. 创建权限策略页面,单击脚本编辑页签,在文本框中编辑策略内容。关于策略语法的详细介绍,请参见权限策略语法和结构

      说明

      编辑策略内容时,ActionResource的配置,请参见镜像服务鉴权规则

    5. 单击继续编辑基本信息,输入名称备注

    6. 单击确定

  2. 授予RAM用户自定义策略。

    1. 使用阿里云账号登录RAM控制台

    2. 在左侧导航栏,选择身份管理 > 用户

    3. 用户页面,单击目标RAM用户操作列的添加权限

    4. 新增授权面板,为RAM用户添加权限。

      1. 选择授权应用范围。

        • 账号级别:权限在当前阿里云账号内生效。

        • 资源组级别:权限在指定的资源组内生效。

          说明

          指定资源组授权生效的前提是该云服务已支持资源组。更多信息,请参见支持资源组的云服务

      2. 输入被授权主体。

        被授权主体即需要授权的RAM用户,系统会自动填入当前的RAM用户,您也可以添加其他RAM用户。

      3. 所有策略类型下单击自定义策略,在文本框中输入自定义策略名称,然后单击自定义策略名称。

      4. 单击确认新增授权

    5. 单击关闭

镜像服务鉴权规则

资源描述

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

资源类型

授权策略中的资源描述

repository

acs:cr:$regionid:$accountid:repository/$namespacename/$repositoryname

参数说明如下表所示:

参数名称

说明

regionid

地域ID,可用*代替。

accountid

云账号数字ID,可用*代替。

namespacename

命名空间名称。

repositoryname

镜像仓库名称。