通过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 控制台后,自行完成访问凭证配置。
登录容器镜像服务控制台。
在顶部菜单栏,选择所需地域。
在左侧导航栏,选择实例列表。
在实例列表页面单击目标企业版实例。
在企业版实例管理页面左侧导航栏选择。
在访问凭证页面,单击设置固定密码。
在设置固定密码对话框中,输入密码和确认密码。然后单击确定。
密码须满足以下安全策略:长度为 8-32 位,必须包含字母、符号或数字中的至少两项,不能使用
P@ssw0rd等互联网公开的常见弱口令,且不支持使用$符号。确定按钮变灰无提示:若单击确定后按钮变灰且无错误提示,通常是密码不符合安全策略所致(例如密码中包含
$等禁用字符,或使用了常见弱口令)。请检查并调整密码后重试。docker login 因特殊字符失败:若密码中包含
@等特殊字符,在终端执行docker login时可能因 Shell 转义导致认证失败(报unauthorized: authentication required)。遇此情况,请在访问凭证页面重置密码,使用不含特殊字符的密码后重试。历史密码不可查看:固定密码设置后无法查看历史记录,如密码遗失请在访问凭证页面重置。
后续步骤
登录企业版实例。
设置专有网络或公网的访问控制。具体操作,请参见配置公网的访问控制或配置专有网络的访问控制。
在终端中输入访问凭证,登录企业版实例。参考示例如下:
docker login <企业版实例名称>-registry.<企业版实例所在的地域>.cr.aliyuncs.com
使用临时密码
可以在OpenAPI Explorer中直接运行GetAuthorizationToken接口获取目标实例的登录临时账号和临时密码。
使用已有AccessKey或者参考创建AccessKey重新创建,并记录AccessKey ID和AccessKey Secret。
使用以下内容,通过脚本编辑模式创建自定义权限策略并管理RAM用户的权限。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "cr:GetAuthorizationToken", "cr:PullRepository", "cr:PushRepository" ], "Resource": "*" } ] }执行如下命令,获取临时密码。
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'