如何使用AssumeRole和MFA将容器推送到Lightsail

0

【以下的问题经过翻译处理】 我们正在使用角色作为访问不同环境的最佳实践。我在我的~/.aws/config中设置了角色:

[profile dev]
source_profile=default
role_arn=arn:aws:iam::987654321:role/MyRole
mfa_serial = arn:aws:iam::123456789:mfa/MyUser

这个方法很有效,当执行CLI命令时,会像预期一样提示我输入MFA代码,一切都正常。

然而,当我用Lightsail Control(lightsailctl)插件运行aws lightsail push-container-image时,出现了错误:

AssumeRoleTokenProviderNotSetError: assume role with MFA enabled, but AssumeRoleTokenProvider session option not set.
Command '['lightsailctl', '--plugin', '--input-stdin']' returned non-zero exit status 1.

我尝试了使用另一个方法:调用“aws lightsail register-container-image”。这需要--digest标志,因此我将我的镜像构建并推送到我们的GitLab镜像注册表中:

docker build -t registry.gitlab.com/myorg/myimage:latest .
docker push registry.gitlab.com/myorg/myimage:latest

然后我使用docker images --digests获取摘要。但是当我运行aws lightsail register-container-image时,出现如下错误:

An error occurred (NotFoundException) when calling the RegisterContainerImage operation: Image with digest "sha256:7494ec375bd1948670750289069cfbb0caa7c08eaae821674ee5a54b0ee422d5" not found.

如果我尝试将其推送到AWS ECR,则会得到相同的NotFoundException

如果我尝试在登录后推送到Lightsail ECR引用,我无法连接,层会一直重新尝试连接:

PS > cat pwd.txt | docker login 585224773020.dkr.ecr.ap-southeast-2.amazonaws.com -u AWS --password-stdin
Login Succeeded
PS > docker build -t 585224773020.dkr.ecr.ap-southeast-2.amazonaws.com/myorg/myimage:latest .
[+] Building 3.3s (17/17) FINISHED
PS > docker push 585224773020.dkr.ecr.ap-southeast-2.amazonaws.com/myorg/myimage:latest      
The push refers to repository [585224773020.dkr.ecr.ap-southeast-2.amazonaws.com/myorg/myimage]
a7cb1ff97502: Retrying in 10 seconds
762b147902c0: Retrying in 10 seconds
235e04e3592a: Retrying in 10 seconds
6173b6fa63db: Retrying in 10 seconds
9a94c4a55fe4: Retrying in 10 seconds
9a3a6af98e18: Waiting
7d0ebbe3f5d2: Waiting
EOF

profile picture
EXPERTE
gefragt vor 5 Monaten35 Aufrufe
1 Antwort
0

【以下的回答经过翻译处理】 在这种情况下 mfa_serial 似乎没用。

以下是我推送镜像所采取的步骤:

  1. ~/.aws/credentials 中设置默认配置文件,以便调用 get-session-token:
[default]
aws_access_key_id=example-access-Key-for-an-IAM-user
aws_secret_access_key=example-secret-access-key-for-IAM-user

  1. ~/.aws/credentials 中设置一个配置文件以供 Lightsail 使用:
[mfa]
aws_access_key_id=<not available yet>
aws_secret_access_key=<not available yet>
aws_session_token=<not available yet>

  1. ~/.aws/config 中创建一个条目,为要使用 [mfa] 配置文件的角色设置:
[profile mfa-dev]
source_profile=mfa
role_arn=arn:aws:iam::<account_id>:role/<role>

  1. 调用 get-session-token,传入来自 MFA 设备的令牌代码:
$ aws --profile default sts get-session-token --serial-number arn:aws:iam::<account_id>:mfa/<user>  --token-code xxxxxx

  1. 这将以 JSON 格式返回凭证。将这些 JSON 值复制到**~/.aws/credentials** 中的 [mfa] 配置文件中:
[mfa]
aws_access_key_id=<value from JSON>
aws_secret_access_key=<value from JSON>
aws_session_token=<value from JSON>

  1. 将您的环境设置为使用 [mfa-dev] 配置文件(在 Powershell 中):
 $env:AWS_PROFILE = "mfa-dev"

  1. 推送镜像:
$ aws lightsail push-container-image --service-name <service> --label <label> --image <image>

profile picture
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen