配置仓库的RAM访问控制

更新时间: 2023-07-03 16:54:03

阿里云权限管理机制包括访问控制(简称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:Pull*"
          ],
          "Effect": "Allow",
          "Resource": "*"
        }
      ],
      "Version": "1"
    }               

以下以授予RAM用户AliyunContainerRegistryReadOnlyAccess权限为例:

  1. 使用阿里云账号登录RAM控制台
  2. 在左侧导航栏,选择身份管理 > 用户
  3. 用户页面,单击目标RAM用户操作列的添加权限
  4. 添加权限面板,为RAM用户添加权限。

    1. 选择授权应用范围。
      • 整个云账号:权限在当前阿里云账号内生效。
      • 指定资源组:权限在指定的资源组内生效。
        说明 指定资源组授权生效的前提是该云服务已支持资源组。更多信息,请参见支持资源组的云服务
    2. 输入授权主体。
      授权主体即需要添加权限的RAM用户。
    3. 选择权限下单击系统策略,在文本框中输入AliyunContainerRegistryReadOnlyAccess,然后单击AliyunContainerRegistryReadOnlyAccess。

  5. 单击确定
  6. 单击完成

镜像服务鉴权规则

  • 资源描述

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

    资源类型

    授权策略中的资源描述

    *

    acs:cr:$regionid:$accountid:*

    instance

    acs:cr:$regionid:$accountid:instance/$instanceid

    repository

    acs:cr:$regionid:$accountid:repository/$instanceid/*

    acs:cr:$regionid:$accountid:repository/$instanceid

    acs:cr:$regionid:$accountid:repository/$instanceid/$namespacename/*

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

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

    chart

    acs:cr:$regionid:$accountid:chart/$instanceid/*

    acs:cr:$regionid:$accountid:chart/$instanceid

    acs:cr:$regionid:$accountid:chart/$instanceid/$chartnamespacename/*

    acs:cr:$regionid:$accountid:chart/$instanceid/$chartnamespacename

    acs:cr:$regionid:$accountid:chart/$instanceid/$chartnamespacename/<br>$chartrepositoryname

    参数说明如下表所示:

    参数名称

    说明

    regionid

    地域ID,可用*代替。

    accountid

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

    instanceid

    容器镜像服务企业版实例ID。

    namespacename

    命名空间名称。

    repositoryname

    镜像仓库名称。

    chartnamespacename

    Chart镜像命名空间名称。

    chartrepositoryname

    Chart镜像仓库名称。

  • 鉴权规则

    RAM用户或者STS方式访问镜像服务API时,镜像服务会向RAM进行权限检查,以确保调用者拥有相应权限。每个API会根据涉及到的资源以及API的语义来确定需要检查哪些资源的权限。每个API的鉴权规则如下表所示:

    说明

    *表示通配符。

    API

    鉴权Action

    鉴权Resource

    GetAuthorizationToken

    cr:GetAuthorizationToken

    *

    GetChartNamespace

    cr:GetNamespace

    acs:cr:$regionid:$accountid:chart/$instanceid/$chartnamespacename

    GetChartRepository

    cr:GetRepository

    acs:cr:$regionid:$accountid:chart/$instanceid/$chartnamespacename/$chartrepositoryname

    GetInstance

    cr:GetInstance

    acs:cr:$regionid:$accountid:instance/$instanceid

    GetInstanceCount

    cr:ListInstance

    *

    GetInstanceEndpoint

    cr:GetInstanceEndpoint

    acs:cr:$regionid:$accountid:instance/$instanceid

    GetInstanceUsage

    cr:GetInstanceUsage

    acs:cr:$regionid:$accountid:instance/$instanceid

    GetInstanceVpcEndpoint

    cr:GetInstanceVpcEndpoint

    acs:cr:$regionid:$accountid:instance/$instanceid

    GetNamespace

    cr:GetNamespace

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

    GetRepoBuildRecord

    cr:GetRepositoryBuildRecord

    acs:cr:$regionid:$accountid:repository/$instanceid

    GetRepoBuildRecordStatus

    cr:GetBuildRepositoryStatus

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

    GetRepoSyncTask

    cr:GetRepositorySync

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

    GetRepoTagLayers

    cr:GetRepositoryLayers

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

    GetRepoTagManifest

    cr:GetRepositoryManifest

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

    GetRepoTagScanTask

    cr:GetScan

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

    GetRepository

    cr:GetRepository

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

    ListChartNamespace

    cr:ListNamespace

    acs:cr:$regionid:$accountid:chart/$instanceid/*

    ListChartRelease

    cr:ListChartRelease

    acs:cr:$regionid:$accountid:chart/$instanceid/$chartnamespacename/$chartrepositoryname

    ListChartRepository

    cr:ListRepository

    acs:cr:$regionid:$accountid:chart/$instanceid/$chartnamespacename/*

    ListInstance

    cr:ListInstance

    *

    ListInstanceEndpoint

    cr:ListInstanceEndpoint

    acs:cr:$regionid:$accountid:repository/$instanceid

    ListNamespace

    cr:ListNamespace

    acs:cr:$regionid:$accountid:repository/$instanceid/*

    ListRepoBuildRecord

    cr:ListRepositoryBuild

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

    ListRepoBuildRecordLog

    cr:GetRepositoryBuildLog

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

    ListRepoBuildRule

    cr:ListRepositoryBuildRule

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

    ListRepoSyncRule

    cr:ListSyncRule

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

    ListRepoSyncTask

    cr:GetRepositorySync

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

    ListRepoTag

    cr:ListRepositoryTag

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

    ListRepoTrigger

    cr:ListWebHook

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

    ListRepoTriggerLog

    cr:GetWebHookLog

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

    ListRepoTriggerRecord

    cr:GetWebHookLog

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

    ListRepository

    cr:ListRepository

    acs:cr:$regionid:$accountid:repository/$instanceid/$namespacename/*

    CancelRepoBuildRecord

    cr:CancelBuildRepository

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

    CreateBuildRecordByRule

    cr:BuildRepositoryByRule

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

    CreateChartNamespace

    cr:CreateNamespace

    acs:cr:$regionid:$accountid:chart/$instanceid

    CreateInstanceEndpointAclPolicy

    cr:CreateInstanceEndpointAclPolicy

    acs:cr:$regionid:$accountid:instance/$instanceid

    CreateInstanceVpcEndpointLinkedVpc

    cr:CreateInstanceVpcEndpointLinkedVpc

    acs:cr:$regionid:$accountid:instance/$instanceid

    CreateNamespace

    cr:CreateNamespace

    acs:cr:$regionid:$accountid:repository/$instanceid

    CreateRepoBuildRule

    cr:CreateRepositoryBuildRule

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

    CreateRepoSyncRule

    cr:CreateSyncRule

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

    CreateRepoSyncTaskByRule

    cr:CreateRepositorySync

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

    CreateRepoTrigger

    cr:CreateWebHook

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

    CreateRepository

    cr:CreateRepository

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

    DeleteChartNamespace

    cr:DeleteNamespace

    acs:cr:$regionid:$accountid:chart/$instanceid/$chartnamespacename

    DeleteChartRelease

    cr:DeleteChartRelease

    acs:cr:$regionid:$accountid:chart/$instanceid/$chartnamespacename/$chartrepositoryname

    DeleteChartRepository

    cr:DeleteRepository

    acs:cr:$regionid:$accountid:chart/$instanceid/$chartnamespacename/$chartrepositoryname

    DeleteInstanceEndpointAclPolicy

    cr:DeleteInstanceEndpointAclPolicy

    acs:cr:$regionid:$accountid:instance/$instanceid

    DeleteInstanceVpcEndpointLinkedVpc

    cr:DeleteInstanceVpcEndpointLinkedVpc

    acs:cr:$regionid:$accountid:instance/$instanceid

    DeleteNamespace

    cr:DeleteNamespace

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

    DeleteRepoBuildRule

    cr:DeleteRepositoryBuildRule

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

    DeleteRepoSyncRule

    cr:DeleteSyncRule

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

    DeleteRepoTag

    cr:DeleteRepositoryTag

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

    DeleteRepoTrigger

    cr:DeleteWebHook

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

    DeleteRepository

    cr:DeleteRepository

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

    UpdateChartNamespace

    cr:UpdateNamespace

    acs:cr:$regionid:$accountid:chart/$instanceid/$chartnamespacename

    UpdateChartRepository

    cr:UpdateRepository

    acs:cr:$regionid:$accountid:chart/$instanceid/$chartnamespacename/$chartrepositoryname

    UpdateInstanceEndpointStatus

    cr:UpdateInstanceEndpointStatus

    acs:cr:$regionid:$accountid:instance/$instanceid

    UpdateNamespace

    cr:UpdateNamespace

    acs:cr:$regionid:$accountid:chart/$instanceid/$chartnamespacename

    UpdateRepoBuildRule

    cr:UpdateRepositoryBuildRule

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

    UpdateRepoTrigger

    cr:UpdateWebHook

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

    UpdateRepository

    cr:UpdateRepository

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

    PullRepository

    cr:PullRepository

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

    PushRepository

    cr:PushRepository

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

    PullChart

    cr:PullChart

    acs:cr:$regionid:$accountid:chart/$instanceid/$chartnamespacename/$chartrepositoryname

    PushChart

    cr:PushChart

    acs:cr:$regionid:$accountid:chart/$instanceid/$chartnamespacename/$chartrepositoryname

    PutScan

    cr:PutScan

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

    GetScan

    cr:GetScan

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

    GetScanStatus

    cr:GetScanStatus

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

    ListScanResult

    cr:ListScanResult

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

    GetScanCount

    cr:GetScanCount

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

阿里云首页 容器镜像服务 ACR 相关技术圈