配置访问凭证

更新时间:
复制 MD 格式

通过Docker、containerd等客户端推拉ACR镜像前,需配置访问凭证完成身份认证。凭证分为固定密码和临时密码,认证鉴权成功后可进行容器镜像或Helm Chart的上传和下载。

凭证说明

认证成功后,系统根据RAM访问控制策略进行鉴权,控制可执行的操作范围。

访问凭证独立于阿里云账号及密码。ACR 固定密码不是您的阿里云账号(主账号或 RAM 用户)的控制台登录密码,而是专门在 ACR 控制台的访问凭证页面单独设置的 Registry 专用密码。凭证信息包含两类:

  • 固定密码:无时效限制,泄露后在主动重置前持续有效。如需更高安全性,推荐使用临时密码。密码遗失时可在访问凭证页面重新设置。

  • 临时密码:有效时间为1小时。若通过STS方式请求,临时密码的有效时间则等同于本次请求STS Token的有效时间。

主账号和子账号(RAM 用户)的访问凭证相互独立。子账号不能使用主账号设置的固定密码;每个 RAM 用户须使用自己的阿里云账号登录 ACR 控制台,并单独设置专属的固定密码。

使用Docker等客户端登录ACR时,--username参数的取值因账号类型而异:

  • 阿里云账号(主账号):用户名为阿里云账号的登录名,您可以在ACR控制台的访问凭证页面查看完整的docker login命令及对应的用户名。该用户名与阿里云主账号ID(纯数字格式)不同,使用主账号ID作为用户名会导致认证失败。

  • RAM用户:用户名为RAM用户的登录名称,格式为<RAM用户登录名称>@<阿里云账号默认域名>,例如username@China-1234567890.onaliyun.com

执行docker login前,可先在ACR控制台的访问凭证页面确认正确的用户名格式,避免因用户名错误导致unauthorized: authentication required认证失败。

使用固定密码

说明

容器镜像服务ACR暂不支持角色登录,请使用临时密码登录。

RAM 用户:若需以 RAM 用户身份在 ACR 控制台设置固定密码,主账号须提前为该 RAM 用户开启控制台登录权限。未启用控制台访问权限的 RAM 用户无法登录 ACR 控制台,也无法配置访问凭证。

主账号无法代替 RAM 用户设置或管理固定密码。RAM 用户需使用自己的账号登录 ACR 控制台后,自行完成访问凭证配置。
  1. 登录容器镜像服务控制台

  2. 在顶部菜单栏,选择所需地域。

  3. 在左侧导航栏,选择实例列表

  4. 实例列表页面单击目标企业版实例。

  5. 在企业版实例管理页面左侧导航栏选择实例管理 > 访问凭证

  6. 访问凭证页面,单击设置固定密码

  7. 设置固定密码对话框中,输入密码确认密码。然后单击确定

    密码须满足以下安全策略:长度为 8-32 位,必须包含字母、符号或数字中的至少两项,不能使用 P@ssw0rd 等互联网公开的常见弱口令,且不支持使用 $ 符号。

    • 确定按钮变灰无提示:若单击确定后按钮变灰且无错误提示,通常是密码不符合安全策略所致(例如密码中包含 $ 等禁用字符,或使用了常见弱口令)。请检查并调整密码后重试。

    • docker login 因特殊字符失败:若密码中包含 @ 等特殊字符,在终端执行 docker login 时可能因 Shell 转义导致认证失败(报 unauthorized: authentication required)。遇此情况,请在访问凭证页面重置密码,使用不含特殊字符的密码后重试。

    • 历史密码不可查看:固定密码设置后无法查看历史记录,如密码遗失请在访问凭证页面重置。

后续步骤

登录企业版实例。

  1. 设置专有网络或公网的访问控制。具体操作,请参见配置公网的访问控制配置专有网络的访问控制

  2. 在终端中输入访问凭证,登录企业版实例。参考示例如下:

    docker login <企业版实例名称>-registry.<企业版实例所在的地域>.cr.aliyuncs.com

使用临时密码

可以在OpenAPI Explorer中直接运行GetAuthorizationToken接口获取目标实例的登录临时账号和临时密码。
  1. 使用已有AccessKey或者参考创建AccessKey重新创建,并记录AccessKey IDAccessKey Secret

  2. 使用以下内容,通过脚本编辑模式创建自定义权限策略管理RAM用户的权限

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "cr:GetAuthorizationToken",
                    "cr:PullRepository",
                    "cr:PushRepository"
                ],
                "Resource": "*"
            }
        ]
    }
  3. 执行如下命令,获取临时密码。

    ACR_ENDPOINT="<acr service endpoint>"其中<acr service endpoint>ACR实例所在地域的服务接入点
    export ALIYUN_AK="<aliyun access key>"               # 步骤1查看的AccessKey ID。
    export ALIYUN_SK="<aliyun access key secret>"       # 步骤1查看的AccessKey Secret。
    export ACR_INSTANCE_ID="<id of acr instance>"       # 目标ACR实例ID。
    export ACR_ENDPOINT="<acr service endpoint>"  
    aliyun cr GetAuthorizationToken --endpoint $ACR_ENDPOINT --InstanceId $ACR_INSTANCE_ID --access-key-id $ALIYUN_AK --access-key-secret $ALIYUN_SK | jq -r '.AuthorizationToken'

相关文档