获取长期有效的登录或推拉镜像指令
操作场景
使用容器引擎客户端推送或拉取镜像前,需要先连接镜像仓库。连接方式分为临时登录指令和长期登录指令。
- 临时登录指令:临时登录指令过了用户设置的有效时间后会过期,提示过期后,需要重新生成登录指令,适用于偶尔的推送或拉取操作。
- 长期有效指令:永久有效,适用于需要持续集成、自动化部署等长期运维场景。
根据您使用的容器引擎客户端不同,连接镜像仓库的方式也有所差异:
- Docker容器引擎客户端:需要长期推送或拉取镜像时,使用获取docker容器引擎长期有效登录指令来登录容器镜像仓库。偶尔推送或拉取镜像时,使用临时登录指令即可。
- containerd容器引擎客户端:需要长期推送或拉取镜像时,使用获取containerd容器引擎长期有效的拉取、推送镜像指令来访问容器镜像仓库。
Docker容器的长期登录指令以及containerd容器的长期推送/拉取指令,请您务必保管,防止信息泄露。
临时登录指令过了用户设置的有效时间后会过期。
登录方式分类
为与IAM新平面更好地兼容,SWR新增了增强型指令,与之前的通用型指令进行区分。增强型指令简化了权限控制,完全支持IAM权限管理,去掉了冗余的SWR自有镜像权限控制,使镜像上传、下载的控制更加便捷。两者的详细区别请参见下表:
| 差异 | 通用型登录指令 | 增强型登录指令 |
|---|---|---|
| 适用范围 | 无限制 | 开启了IAM新平面才支持,适用使用IAM新平面进行权限控制的场景 |
| 指令有效期 | 支持临时登录指令和长期登录指令,具体差异请参见长期有效的登录指令与临时登录指令的区别是什么? | 为了安全考虑,不再支持长期登录指令,仅支持临时登录指令,其有效期为24小时。 |
| 权限控制 | 支持IAM权限管理,详细内容请参见配置IAM权限通过IAM授予使用SWR的权限, 支持SWR自有的镜像权限控制(即本地授权),详细内容请参见配置镜像权限 | 仅支持IAM权限管理,详细内容请参见配置IAM权限通过IAM授予使用SWR的权限。 增强型登录指令对iam条件键支持做了增强,请参见下表。 |
| 是否对接审计日志 | 是 | 是 |
| 支持的条件键 | 见下表 | 见下表 |
| 条件键名称 | 通用型登录指令是否支持 | 增强型临时登录指令是否支持 | |
|---|---|---|---|
| 临时登录指令 | 长期有效登录指令 | ||
| g:CalledVia | 否 | 否 | 否 |
| g:CalledViaFirst | 否 | 否 | 否 |
| g:CalledViaLast | 否 | 否 | 否 |
| g:PrincipalTag/tag-key | 否 | 否 | 是 |
| g:MFAAge | 否 | 否 | 是 |
| g:MFAPresent | 否 | 否 | 是 |
| g:SourceIdentity | 否 | 否 | 是 |
| g:TokenIssueTime | 否 | 否 | 是 |
| g:ViaService | 否 | 否 | 是 |
| g:DomainId | 是 | 否 | 是 |
| g:DomainName | 是 | 否 | 是 |
| g:PrincipalAccount | 是 | 是 | 是 |
| g:PrincipalUrn | 是 | 是 | 是 |
| g:PrincipalIsService | 是 | 是 | 是 |
| g:PrincipalIsRootUser | 是 | 是 | 是 |
| g:PrincipalServiceName | 是 | 否 | 是 |
| g:PrincipalType | 是 | 是 | 是 |
| g:PrincipalId | 是 | 是 | 是 |
| g:UserName | 是 | 是 | 是 |
| g:UserId | 是 | 是 | 是 |
| g:PrincipalOrgPath | 是 | 是 | 是 |
| g:PrincipalOrgId | 是 | 是 | 是 |
| g:PrincipalOrgManagementAccountId | 是 | 是 | 是 |
| g:ResourceOrgId | 是 | 是 | 是 |
| g:ResourceOrgPath | 是 | 是 | 是 |
| g:Referer | 是 | 是 | 是 |
| g:SecureTransport | 是 | 是 | 是 |
| g:SourceIp | 是 | 是 | 是 |
| g:SourceVpc | 是 | 是 | 是 |
| g:SourceVpce | 是 | 是 | 是 |
| g:UserAgent | 是 | 是 | 是 |
| g:RequestedRegion | 是 | 是 | 是 |
| g:RequestTag/tag-key | 否 | 否 | 否 |
| g:ResourceAccount | 是 | 是 | 是 |
| g:ResourceTag/tag-key | 否 | 否 | 否 |
| g:TagKeys | 否 | 否 | 否 |
| g:EnterpriseProjectId | 否 | 否 | 否 |
| g:SourceAccount | 否 | 否 | 否 |
| g:SourceUrn | 否 | 否 | 否 |
| g:CurrentTime | 是 | 是 | 是 |
获取通用型登录指令方式
下面来介绍如何获取docker容器引擎长期有效登录指令和获取containerd容器引擎长期有效的拉取、推送镜像指令的详细操作。
- 获取编程访问权限。(如果当前用户已有编程访问权限,请忽略此步骤)
- 以管理员身份,登录统一身份认证服务控制台统一身份认证服务 IAM控制台。
- 在管理控制台左上角单击
,选择区域和项目。 - 在“用户”页搜索框输入并搜索要授予编程访问权限的用户名称。
- 单击用户名称,进入用户详情页。单击“访问方式”后面的
按钮。勾选“编程访问”选项(可单独勾选编程访问,也可以2种访问方式同时勾选。) 图1 修改访问方式
- 获取AK/SK访问密钥。(如果当前用户已获取AK/SK访问密钥,请忽略此步骤)
- 登录统一身份认证服务控制台统一身份认证服务 IAM控制台,将鼠标移到用户名处,单击“我的凭证”。
- 在左侧导航栏中选择“访问密钥”,单击“新增访问密钥”。
- 输入描述信息,单击“确定”。
- 在弹出的提示页面单击“立即下载”。
- 下载成功后,在“credentials.csv”文件中即可获取AK和SK信息。
表3 credentials.csv文件示例 User Name
Access Key Id
Secret Access Key
a*****
RVHVMX******
H3nPwzgZ******
每个访问密钥文件仅能下载一次,请妥善保管。
- 登录SWR控制台SWR控制台。
- 依次单击页面的“登录指令->通用型登录指令->长期有效登录指令->导入访问密钥”,选择访问密钥文件credentials.csv或者手动输入步骤2中获取的 credentials.csv文件中的Access Key Id和Secret Access Key,单击“生成指令”后会自动生成长期有效的登录指令。到此获取完成,后面的步骤您无需执行。如果您的控制台的页面暂无长期有效登录指令页签,请跳过本步骤参考后面的步骤完成手动拼接长期有效登录指令。

- 获取区域项目名称、镜像仓库地址。
- 登录统一身份认证服务控制台统一身份认证服务 IAM控制台。
- 将鼠标移至页面右上角用户名称上。 图2 IAM首页
- 在下拉菜单中,单击“我的凭证”。
- 在项目列表中找到您的虚拟机的所属区域及项目: 图3 区域与项目
- 您可以按照获取到的项目信息拼接镜像仓库地址,拼接方式为 : swr.区域项目名称.myhuaweicloud.com
如用户a*****虚拟机所在区域为华北-北京四,那么对应的镜像仓库地址为:swr.cn-north-4.myhuaweicloud.com。
- 登录一台Linux系统的计算机,执行如下命令获取登录密钥。
printf "$AK" | openssl dgst -binary -sha256 -hmac "$SK" | od -An -vtx1 | sed 's/[ \n]//g' | sed 'N;s/\n//'
请将AK替换为2credentials文件的Access Key Id,SK替换为2credentials文件的Secret Access Key。
示例:
printf "RVHVMX******" | openssl dgst -binary -sha256 -hmac "H3nPwzgZ******" | od -An -vtx1 | sed 's/[ \n]//g' | sed 'N;s/\n//'
执行上面的命令后,我们得到的登录密钥如下:
cab4ceab4a1545***************
以上密钥仅为示例,请以实际获得的密钥为准。
- 使用如下的格式拼接登录指令。
docker login -u [区域项目名称]@[AK] -p [登录密钥] [镜像仓库地址]
其中,区域项目名称和镜像仓库地址在5中获取,AK在2中获取,登录密钥为6的执行结果。
示例:
docker login -u cn-north-4@RVHVMX****** -p cab4ceab4a1545*************** swr.cn-north-4.myhuaweicloud.com
当显示“Login Succeeded”,即为登录成功。
- 登录密钥字符串是经过加密的,无法逆向解密,从-p无法获取到SK。
- 获取的登录指令可在其他机器上使用并登录。
- (可选)当您退出仓库时,请使用以下命令删除您的认证信息。
cd /root/.docker/ rm -f config.json
- (可选)使用history -c命令清理相关使用痕迹,避免隐私信息泄露。
- 已拥有编程访问权限。获取编程访问权限方式如下:
- 以管理员身份,登录统一身份认证服务控制台统一身份认证服务 IAM控制台。
- 在管理控制台左上角单击
,选择区域和项目。 - 在“用户”页搜索框输入并搜索要授予编程访问权限的用户名称。
- 单击用户名称,进入用户详情页。单击“访问方式”后面的
按钮。勾选“编程访问”选项(可单独勾选编程访问,也可以2种访问方式同时勾选。) 图4 修改访问方式
- 已获取AK/SK访问密钥,获取方式如下:
- 登录统一身份认证服务控制台统一身份认证服务 IAM控制台,将鼠标移到用户名处,单击“我的凭证”。
- 在左侧导航栏中选择“访问密钥”,单击“新增访问密钥”。
- 输入描述信息,单击“确定”。
- 在弹出的提示页面单击“立即下载”。
- 下载成功后,在“credentials.csv”文件中即可获取AK和SK信息。
表4 credentials.csv文件示例 User Name
Access Key Id
Secret Access Key
a*****
RVHVMX******
H3nPwzgZ******
每个访问密钥文件仅能下载一次,请妥善保管。
- 获取区域项目名称、镜像仓库地址。
- 登录统一身份认证服务控制台统一身份认证服务 IAM控制台。
- 将鼠标移至页面右上角用户名称上。 图5 IAM首页
- 在下拉菜单中,单击“我的凭证”。
- 在项目列表中找到您的虚拟机的所属区域及项目。 图6 区域与项目
- 您可以按照获取到的项目信息拼接镜像仓库地址,拼接方式为 : swr.区域项目名称.myhuaweicloud.com。
如用户a*****虚拟机所在区域为华北-北京四,那么对应的镜像仓库地址为:swr.cn-north-4.myhuaweicloud.com。
- 登录一台Linux系统的计算机,执行如下命令获取登录密钥。
printf "$AK" | openssl dgst -binary -sha256 -hmac "$SK" | od -An -vtx1 | sed 's/[ \n]//g' | sed 'N;s/\n//'
请将AK替换为步骤2credentials.csv文件的Access Key Id,SK替换为步骤2credentials.csv文件的Secret Access Key。
示例:
printf "RVHVMX******" | openssl dgst -binary -sha256 -hmac "H3nPwzgZ******" | od -An -vtx1 | sed 's/[ \n]//g' | sed 'N;s/\n//'
执行上面的命令后,我们得到的登录密钥如下:
cab4ceab4a1545***************
以上密钥仅为示例,请以实际获得的密钥为准。
- 使用如下的格式拼接长期拉取和推送镜像的指令。
1. 镜像拉取指令拼接
ctr image pull --user [项目名]@[AK]:[登录密钥] [镜像仓库地址]/{组织名称}/{镜像名称}:{版本名称}
其中,项目名和镜像仓库地址在步骤3中获取,AK步骤2中获取的credentials.csv文件中的Access Key Id字段,登录密钥为步骤4的执行结果。
2. 镜像推送指令拼接
ctr image push --user [项目名]@[AK]:[登录密钥] [镜像仓库地址]/{组织名称}/{镜像名称}:{版本名称}
其中,项目名和镜像仓库地址在步骤3中获取,AK步骤2中获取的credentials.csv文件中的Access Key Id字段,登录密钥为步骤4的执行结果。
- 登录密钥字符串是经过加密的,无法将登录密钥字符串逆向解密成SK。
- 获取的指令可在其他机器上使用并进行镜像上传下载。
获取增强型登录指令方式
下面来介绍如何获取docker容器引擎增强型登录指令和获取containerd容器引擎增强型上传和下载指令的详细操作。
- 登录SWR控制台SWR控制台。
- 依次单击页面的“登录指令->增强型登录指令”,单击命令末尾的复制按钮完成登录指令复制即可。

- 登录SWR控制台SWR控制台。
- 在左侧菜单栏选择“我的镜像”,单击镜像名称。
- 在镜像详情页面切换到”Pull/Push指南”页签,单击”生成下载指令”或””生成上传指令”。进入”增强型下载指令”或”增强型上传指令”,单击命令末尾的复制按钮完成登录指令复制即可。

