Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services AWS ECR GetAuthorizationToken_Amazon Web Services_Amazon Ec2_Aws Cli_Amazon Ecr - Fatal编程技术网

Amazon web services AWS ECR GetAuthorizationToken

Amazon web services AWS ECR GetAuthorizationToken,amazon-web-services,amazon-ec2,aws-cli,amazon-ecr,Amazon Web Services,Amazon Ec2,Aws Cli,Amazon Ecr,我试图按照AWS的说明,通过向我的用户提供AmazonEC2ContainerRegistryFullAccess策略,为我的用户设置ECR授权 但是,当我尝试在PC上运行aws ecr get login时,我收到一个错误,我没有权限 An error occurred (AccessDeniedException) when calling the GetAuthorizationToken operation: User: arn:aws:iam::ACCOUNT_NUMBER:user/

我试图按照AWS的说明,通过向我的用户提供
AmazonEC2ContainerRegistryFullAccess
策略,为我的用户设置ECR授权

但是,当我尝试在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登录的选项,一旦我从我的帐户中删除了2FA,我就获得了授权令牌,正如错误描述中显示的那样,我必须在策略中允许操作“GetAuthorizationToken”

    {
        "Sid": "VisualEditor2",
        "Effect": "Allow",
        "Action": "ecr:GetAuthorizationToken",
        "Resource": "*"
    }

注意:这不是我的全部政策,而是声明的一部分

当我试图将我的容器推送到存储库中时,ECS也有同样的问题


为了解决这个问题,我将以下内容附加到我的IAM角色上:
AmazonECS\u FullAccess

以下是一个完整的答案,在我完成所有步骤后,我能够使用ECR

错误有两种含义:

1) 您未获得授权,因为您的用户没有附加ECR策略

2) 您未获得授权,因为您正在使用2FA,并且除非设置临时会话令牌,否则使用cli不安全

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

  • 首先,您必须创建一个策略,该策略允许您访问ECR中的GetAuthorizationToken操作
  • 将此策略附加到用户或组(组/角色总是更好的方法,我投票给角色,例如DevOps)
  • 确保在您的环境中设置了AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY。我建议使用凭证和配置文件分开的aws文件夹
  • 如果已启用2FA

  • 您需要使用此命令生成会话令牌
    aws sts获取会话令牌——mfa设备的序列号arn——令牌中的令牌代码
    <代码>mfa设备的arn可在您的个人资料2FA部分中找到。令牌,是从设备生成的令牌
  • 使用收到的
    AccessKeyId
    SecretAccessKey
    SessionToken
    更新aws credentails。AWS建议使用cron作业来刷新令牌,这意味着如果您正在这样做,那么您的产品资源很可能没有启用2FA。您可以通过提供持续时间秒来增加会话,但最多只能增加36小时。一个很好的解释可以在

  • 这应该可以完成任务

    我最终使用AmazonEC2ContainerRegistryPowerUser,这似乎是一个比完全访问更好的选择。以下是截至2019年6月我发现的政策:

    我也有同样的问题,但我之前只将导致问题的
    权限边界设置为s3


    删除了
    权限边界
    ,它像一个魔咒一样工作

    这是我的人
    EC2InstanceProfileForImageBuilderECRContainerBuilds
    对我来说:

                  - Effect: Allow
                    Sid: VisualEditor2
                    Action:
                      - ecr:GetAuthorizationToken
                      - ecr:BatchGetImage
                      - ecr:GetDownloadUrlForLayer
                    Resource: "*"
    
    

    我发现当启用2FA时,没有使用aws ecr get登录的选项,一旦我从我的帐户中删除2FA,我就获得了授权令牌。@Y.Eliash 2FA是如何禁用的?我在哪里能找到那扇窗户。AWS是巨大的。对于未来的读者来说——如果你的角色只需要阅读(而不是编写或编辑),那么
    AmazonEC2ContainerRegistryReadOnly
    就足够了。是的,这也为我做到了。已保存日期bro:-Daws get session token可从MFA获取令牌-如果您已安装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”更改为配置文件名如果启用了mfa,则设置会话令牌->mfa也可能导致此问题这对我有效。应标记为正确答案