AWS ECR GetAuthorizationToken
AWS ECR GetAuthorizationToken
我已尝试按照 AWS 说明为我的用户设置 ECR 授权,方法是向我的用户提供 AmazonEC2ContainerRegistryFullAccess
策略。
然而,当我尝试在我的 PC 上 运行 时,aws ecr get-login
我收到一条错误消息,提示我没有权限。
An error occurred (AccessDeniedException) when calling the GetAuthorizationToken operation: User: arn:aws:iam::ACCOUNT_NUMBER:user/MY_USER is not authorized to perform: ecr:GetAuthorizationToken on resource: *
我做错了什么?
您必须将策略附加到您的 IAM 角色。
我附加了 AmazonEC2ContainerRegistryFullAccess 并且它起作用了。
我发现启用 2FA 时没有使用 aws ecr get-login 的选项,一旦我从我的帐户中删除 2FA,我就获得了授权令牌
正如错误描述中显示的那样,我必须在我的策略中允许操作 "GetAuthorizationToken"。
{
"Sid": "VisualEditor2",
"Effect": "Allow",
"Action": "ecr:GetAuthorizationToken",
"Resource": "*"
}
注意:这不是我的完整保单,而是声明的一部分。
当我尝试将我的容器推送到存储库时,我遇到了与 ECS 相同的问题。
为了解决这个问题,我附加了我的 IAM 角色:AmazonECS_FullAccess
这是一个完整的答案,在我执行了所有步骤之后 - 我能够使用 ECR
该错误可能有以下几种含义:
您未被授权,因为您没有为您的用户附加 ECR 政策
您未被授权,因为您使用的是 2FA,并且除非您设置临时会话令牌,否则使用 cli 是不安全的
您提供的凭据无效
这里是获取访问权限的所有步骤的列表(包括处理 2FA)
- 首先,您必须创建 允许您访问 ECR 中的 GetAuthorizationToken 操作的策略。
- 将此策略附加到用户或组(groups/roles 恕我直言总是更好的方法,我投票给角色,例如 DevOps)
- 确保在您的环境中设置了 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY。我建议使用 aws 文件夹,凭据和配置文件分开。
如果您启用了 2FA
- 您需要使用此命令生成会话令牌
aws sts get-session-token --serial-number arn-of-the-mfa-device --token-code code-from-token
。 arn-of-the-mfa-device
可以在您的个人资料的 2FA 部分中找到。令牌,是从设备生成的令牌。
- 使用收到的
AccessKeyId
、SecretAccessKey
和 SessionToken
更新 aws 凭据。 AWS 建议使用任何一个 cron 作业来刷新令牌,这意味着如果你这样做,你就是在测试东西,你的产品资源很可能没有启用 2FA。您可以通过提供 --duration-seconds
来增加会话,但最多只能增加 36 小时。可以在 authenticate-mfa-cli 找到一个很好的解释
这应该可以完成工作
我最终使用了 AmazonEC2ContainerRegistryPowerUser,这似乎是比完全访问更好的选择。以下是我截至 2019 年 6 月发现的政策:
我有同样的问题,但我之前只将 permission boundary
设置为 s3 导致了这个问题。
删除了 permission boundary
,效果很好
这是我的人EC2InstanceProfileForImageBuilderECRContainerBuilds
对我来说:
- Effect: Allow
Sid: VisualEditor2
Action:
- ecr:GetAuthorizationToken
- ecr:BatchGetImage
- ecr:GetDownloadUrlForLayer
Resource: "*"
用户必须拥有 ECR 上所有资源的 GetAuthorizationToken。为了使策略严格,您可以仅将所有操作授予所需的注册表,并且仅将 ecr:GetAuthorizationToken 授予所有资源。这是附加到您的用户的示例策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"ecr:BatchCheckLayerAvailability",
"ecr:BatchGetImage",
"ecr:CompleteLayerUpload",
"ecr:GetDownloadUrlForLayer",
"ecr:InitiateLayerUpload",
"ecr:PutImage",
"ecr:UploadLayerPart"
],
"Effect": "Allow",
"Resource": "<REPOSITORY_ARN_HERE>"
},
{
"Action": [
"ecr:GetAuthorizationToken",
],
"Effect": "Allow",
"Resource": "*"
}
]
}
我已尝试按照 AWS 说明为我的用户设置 ECR 授权,方法是向我的用户提供 AmazonEC2ContainerRegistryFullAccess
策略。
然而,当我尝试在我的 PC 上 运行 时,aws ecr get-login
我收到一条错误消息,提示我没有权限。
An error occurred (AccessDeniedException) when calling the GetAuthorizationToken operation: User: arn:aws:iam::ACCOUNT_NUMBER:user/MY_USER is not authorized to perform: ecr:GetAuthorizationToken on resource: *
我做错了什么?
您必须将策略附加到您的 IAM 角色。
我附加了 AmazonEC2ContainerRegistryFullAccess 并且它起作用了。
我发现启用 2FA 时没有使用 aws ecr get-login 的选项,一旦我从我的帐户中删除 2FA,我就获得了授权令牌
正如错误描述中显示的那样,我必须在我的策略中允许操作 "GetAuthorizationToken"。
{
"Sid": "VisualEditor2",
"Effect": "Allow",
"Action": "ecr:GetAuthorizationToken",
"Resource": "*"
}
注意:这不是我的完整保单,而是声明的一部分。
当我尝试将我的容器推送到存储库时,我遇到了与 ECS 相同的问题。
为了解决这个问题,我附加了我的 IAM 角色:AmazonECS_FullAccess
这是一个完整的答案,在我执行了所有步骤之后 - 我能够使用 ECR
该错误可能有以下几种含义:
您未被授权,因为您没有为您的用户附加 ECR 政策
您未被授权,因为您使用的是 2FA,并且除非您设置临时会话令牌,否则使用 cli 是不安全的
您提供的凭据无效
这里是获取访问权限的所有步骤的列表(包括处理 2FA)
- 首先,您必须创建 允许您访问 ECR 中的 GetAuthorizationToken 操作的策略。
- 将此策略附加到用户或组(groups/roles 恕我直言总是更好的方法,我投票给角色,例如 DevOps)
- 确保在您的环境中设置了 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY。我建议使用 aws 文件夹,凭据和配置文件分开。
如果您启用了 2FA
- 您需要使用此命令生成会话令牌
aws sts get-session-token --serial-number arn-of-the-mfa-device --token-code code-from-token
。arn-of-the-mfa-device
可以在您的个人资料的 2FA 部分中找到。令牌,是从设备生成的令牌。 - 使用收到的
AccessKeyId
、SecretAccessKey
和SessionToken
更新 aws 凭据。 AWS 建议使用任何一个 cron 作业来刷新令牌,这意味着如果你这样做,你就是在测试东西,你的产品资源很可能没有启用 2FA。您可以通过提供--duration-seconds
来增加会话,但最多只能增加 36 小时。可以在 authenticate-mfa-cli 找到一个很好的解释
这应该可以完成工作
我最终使用了 AmazonEC2ContainerRegistryPowerUser,这似乎是比完全访问更好的选择。以下是我截至 2019 年 6 月发现的政策:
我有同样的问题,但我之前只将 permission boundary
设置为 s3 导致了这个问题。
删除了 permission boundary
,效果很好
这是我的人EC2InstanceProfileForImageBuilderECRContainerBuilds
对我来说:
- Effect: Allow
Sid: VisualEditor2
Action:
- ecr:GetAuthorizationToken
- ecr:BatchGetImage
- ecr:GetDownloadUrlForLayer
Resource: "*"
用户必须拥有 ECR 上所有资源的 GetAuthorizationToken。为了使策略严格,您可以仅将所有操作授予所需的注册表,并且仅将 ecr:GetAuthorizationToken 授予所有资源。这是附加到您的用户的示例策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"ecr:BatchCheckLayerAvailability",
"ecr:BatchGetImage",
"ecr:CompleteLayerUpload",
"ecr:GetDownloadUrlForLayer",
"ecr:InitiateLayerUpload",
"ecr:PutImage",
"ecr:UploadLayerPart"
],
"Effect": "Allow",
"Resource": "<REPOSITORY_ARN_HERE>"
},
{
"Action": [
"ecr:GetAuthorizationToken",
],
"Effect": "Allow",
"Resource": "*"
}
]
}