AWS ECR GetAuthorizationToken

Y. *_*ash 28 amazon-ec2 amazon-web-services amazon-ecs aws-cli

我已经尝试通过向我的用户提供AmazonEC2ContainerRegistryFullAccess策略来遵循关于为我的用户设置ECR授权的AWS说明.

但是,当我尝试在我的电脑上运行时,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: *
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

Dio*_*elo 36

用户必须拥有 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": "*"
                    }

                ]
            }
Run Code Online (Sandbox Code Playgroud)

  • 终于有一个正确的、从紧的政策了。 (6认同)

小智 34

您必须将策略附加到IAM角色.

我附上了AmazonEC2ContainerRegistryFullAccess并且它有效.

  • 这违反了AWS最佳实践101,你绝对不应该允许完全访问所有存储库,只需让你的角色访问它需要的内容 (4认同)
  • 我发现启用 2FA 后,无法选择使用 aws ecr get-login,一旦我从我的帐户中删除了 2FA,我就获得了授权令牌。 (3认同)
  • 对于将来的读者-如果您的角色仅需要读取(而不是编写或编辑),则`AmazonEC2ContainerRegistryReadOnly`就足够了。 (2认同)

Tar*_*syk 16

这是一个完整的答案,在我遵循所有步骤之后 - 我能够使用 ECR

错误可能有两种含义:

1) 您没有被授权,因为您没有附加到您的用户的 ECR 策略

2)您没有被授权,因为您使用的是 2FA 并且使用 cli 是不安全的,除非您设置临时会话令牌

这是获得访问权限的所有步骤的列表(包括处理 2FA)

  1. 首先,您必须创建一个策略,让您可以访问 ECR 中的 GetAuthorizationToken 操作。
  2. 将此策略附加到用户或组(恕我直言,组/角色总是更好的方法,我对角色的投票,例如 DevOps)
  3. 确保在您的环境中设置了 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY。我建议使用 aws 文件夹,并将凭据和配置文件分开。

如果您启用了 2FA

  1. 您需要使用此命令生成会话令牌 aws sts get-session-token --serial-number arn-of-the-mfa-device --token-code code-from-tokenarn-of-the-mfa-device可以在您的个人资料的 2FA 部分中找到。令牌,是从设备生成的令牌。
  2. 更新AWS与收到credentails AccessKeyIdSecretAccessKeySessionToken。AWS 建议使用任何一个 cron 作业来刷新令牌,这意味着如果您正在执行此操作,您正在测试事物,您的生产资源很可能没有启用 2FA。您可以通过提供--duration-seconds但最多 36 小时来增加会话。可以在authentication-mfa-cli找到一个很好的解释

这应该可以胜任


ihe*_*gie 10

我最终使用 AmazonEC2ContainerRegistryPowerUser 似乎比完全访问更好的选择。以下是我在 2019 年 6 月找到的政策: 容器注册表权限


Ade*_*mad 9

正如错误描述中出现的那样,我必须在我的策略中允许操作“GetAuthorizationToken”。

    {
        "Sid": "VisualEditor2",
        "Effect": "Allow",
        "Action": "ecr:GetAuthorizationToken",
        "Resource": "*"
    }
Run Code Online (Sandbox Code Playgroud)

注意:这不是我的完整政策,而是声明的一个小节。


Y. *_*ash 8

我发现启用2FA后,没有选择使用aws ecr get-login,一旦我从帐户中删除了2FA,我便获得了授权令牌

  • 如果您已设置 2FA 并在本地 .aws/credentials 文件中使用自定义 aws 配置文件,则必须提供要使用的此配置文件的名称。就我而言,我有一个名为“MFA”的配置文件,因此我必须为几乎每个命令添加一个“--profile mfa”。或者您可以在当前 shell 中“导出 AWS_PROFILE=mfa”。因此,对于在我的情况下使用自定义 aws 配置文件运行此命令:“aws ecr get-login --region eu-central-1 --no-include-email --profile mfa” - 使用您的配置文件名称更改“mfa” (4认同)

IMR*_*IMR 8

如果您尝试从 PUBLIC AWS 存储库中提取映像,则必须将以下用户权限添加到您的策略中:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "ecr-public:GetAuthorizationToken",
            "sts:GetServiceBearerToken"
        ],
        "Resource": "*"
    }
 ]  
} 
Run Code Online (Sandbox Code Playgroud)

请在此处查看完整文档。