AWS ECR docker 登录成功,但无法拉/推root 用户 IAM 也不起作用相同的配置适用于另一台主机

如何解决AWS ECR docker 登录成功,但无法拉/推root 用户 IAM 也不起作用相同的配置适用于另一台主机

任务:拉取镜像并将其推送到 AWS ECR(私有)

状态:在一台 Ubuntu 20 主机上工作,在另一台 Ubuntu 20 主机上不工作

简要:我有 IAM,并且能够从工作的 Ubuntu 20 主机推送和拉取。还有另一个主机,我尝试了 IAM,我什至为 root 用户创建了一对凭据,但仍然没有运气。我尝试了 docker login 方法和 https://github.com/awslabs/amazon-ecr-credential-helper

作品来自19.03.8。 从 19.03.12 不起作用,更新到 Docker 20.10.5,仍然不起作用。

完整说明。

使用docker登录

  1. docker login(零实际上包含我的 acc id)
$ aws ecr get-login-password --region us-east-2 | docker login --username AWS --password-stdin 000000000000.dkr.ecr.us-east-2.amazonaws.com
WARNING! Your password will be stored unencrypted in /home/username/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
  1. $ cat ~/.docker/config.json(零实际上包含我的 acc id)
{
        "auths": {
                "000000000000.dkr.ecr.us-east-2.amazonaws.com": {
                        "auth": "QVd[REMOVED A LOT OF CHARACTERS]Q=="
                }
        }
}
  1. cat ~/.aws/credentials
[default]
aws_access_key_id=A......A
aws_secret_access_key=x.......Q
  1. docker pull(注意:(a) 图像存在 (b) 我可以从第一个 Ubuntu 中拉取和推送 (c) 我用 root 用户凭据替换凭据以进行测试;同样的事情发生在常规用户信用)
$ docker pull 000000000000.dkr.ecr.us-east-2.amazonaws.com/imagename:latest
Error response from daemon: pull access denied
for 000000000000.dkr.ecr.us-east-2.amazonaws.com/imagename:latest,repository does not exist or may require 'docker login': denied: User: arn:aws:iam::000000000000:root is not authorized to perform:ecr:BatchGetImage on resource: arn:aws:ecr:us-east-2:000000000000:repository/imagename

使用 aws-ecr-helper

  1. $ cat ~/.docker/config.json
{
    "credsStore": "ecr-login"
}
  1. $cat ~/.ect/cache.json
$ cat cache.json
{
  "Registries": {
    "us-east-2-Q[REMOVED]s+EJ+-000000000000": {
      "AuthorizationToken": "QV[REMOVED LOTS OF CHARACTERS]0=","RequestedAt": "2021-03-07T12:26:37.65116332+01:00","ExpiresAt": "2021-03-07T23:26:37.605Z","ProxyEndpoint": "https://000000000000.dkr.ecr.us-east-2.amazonaws.com","Service": "ecr"
    }
  },"Version": "1.0"
}
  1. docker pull
$ docker pull 000000000000.dkr.ecr.us-east-2.amazonaws.com/imagename:latest
Error response from daemon: pull access denied
for 000000000000.dkr.ecr.us-east-2.amazonaws.com/imagename:latest,repository does not exist or may require 'docker login': denied: User: arn:aws:iam::000000000000:root is not authorized to perform:
ecr:BatchGetImage on resource: arn:aws:ecr:us-east-2:000000000000:repository/imagename

只是为了澄清。与普通用户和 root 完全相同的配置在另一台主机上工作。请建议下一步去哪里。谢谢。

更新。工作和不工作的主机都在 AWS 生态系统之外。

更新 #2。 我启用了 CloudTrail 日志,这让我可以从 Amazon 的角度查看请求。 所以基本上我在两台电脑上做完全一样的事情。同时,我从第一个收到结果,而从第二个收到拒绝访问。 基本上这意味着两个请求都到达了 AWS,问题是,为什么第二个桌面没有访问权限。

从桌面连接后登录,有效

(000000000000 是我的帐号)

eventVersion    "1.08"
userIdentity    
type    "Root"
principalId "000000000000"
arn "arn:aws:iam::000000000000:root"
accountId   "000000000000"
accessKeyId "A[DELETED]Q"
sessionContext  
sessionIssuer   {}
webIdFederationData {}
attributes  
mfaAuthenticated    "false"
creationDate    "2021-03-07T19:19:57Z"
invokedBy   "AWS Internal"
eventTime   "2021-03-07T19:20:03Z"
eventSource "ecr.amazonaws.com"
eventName   "BatchGetImage"
awsRegion   "us-east-2"
sourceIPAddress "AWS Internal"
userAgent   "AWS Internal"
requestParameters   
registryId  "000000000000"
repositoryName  "imagename"
imageIds    
0   
imageTag    "latest"
acceptedMediaTypes  
0   "application/vnd.docker.distribution.manifest.v2+json"
1   "application/vnd.docker.distribution.manifest.list.v2+json"
2   "application/vnd.oci.image.index.v1+json"
3   "application/vnd.oci.image.manifest.v1+json"
4   "application/vnd.docker.distribution.manifest.v1+prettyjws"
5   "application/json"
responseElements    null
requestID   "e514746b[DELETED]"
eventID "3e6db33d[DELETED]"
readOnly    true
resources   
0   
accountId   "000000000000"
ARN "arn:aws:ecr:us-east-2:000000000000:repository/imagename"
eventType   "AwsApiCall"
managementEvent true
eventCategory   "Management"
recipientAccountId  "000000000000"

同时 从桌面连接后登录,总是被拒绝

eventVersion    "1.08"
userIdentity    
type    "Root"
principalId "000000000000"
arn "arn:aws:iam::000000000000:root"
accountId   "000000000000"
accessKeyId "A[DELETED]A"
sessionContext  
sessionIssuer   {}
webIdFederationData {}
attributes  
mfaAuthenticated    "false"
creationDate    "2021-03-07T17:30:12Z"
invokedBy   "AWS Internal"
eventTime   "2021-03-07T19:02:50Z"
eventSource "ecr.amazonaws.com"
eventName   "BatchGetImage"
awsRegion   "us-east-2"
sourceIPAddress "AWS Internal"
userAgent   "AWS Internal"
errorCode   "AccessDenied"
errorMessage    "User: arn:aws:iam::000000000000:root is not authorized to perform: ecr:BatchGetImage on resource: arn:aws:ecr:us-east-2:000000000000:repository/imagename"
requestParameters   null
responseElements    null
requestID   "371354a8[DELETED]"
eventID "2f9f0310[DELETED]"
readOnly    true
eventType   "AwsApiCall"
managementEvent true
eventCategory   "Management"
recipientAccountId  "000000000000"

考虑凭据的人请注意,您在这些日志下看到的访问密钥不是用户的访问密钥。每个请求的访问密钥都不同(即使来自工作桌面的每个请求都有不同的访问密钥)。

更新 #3。我使用 Docker 18 和新的 aws cli 从第三个 Ubuntu 17 主机检查,它工作正常。所以这绝对是关于设置、docker 或 aws cli,而不是关于 ECR 本身。

更新 #4。我使用 shell 代理(tinyproxy + SSH 隧道)进行了测试,并测试以消除某种影子 IP 禁止的可能性。所以基本上:

  • 工作主机通过基于非工作主机的代理继续工作,
  • 非工作主机通过基于工作主机的代理不断失败 这意味着特定主机上的 docker 有问题,但再次删除并安装 docker 并不能解决问题。

解决方法

当您确认这不是 IAM 角色问题时,由于以下问题之一,您可能会收到此错误:

您的启动类型无权访问 Amazon ECR 终端节点。

  1. 如果您的主机位于私有子网中,请确认您的子网在路由表中具有到 NAT 网关的路由。

  2. 如果您的主机在公共子网中,请确认该实例具有公共 IP 地址。

  3. 如果您将 AWS PrivateLink 用于 Amazon ECR,请确认与 Amazon ECR 的接口 VPC 终端节点关联的安全组允许来自您的安全组内的通过 HTTPS(端口 443)的入站流量。 VPC CIDR 或您的主机安全组。

  4. 确认连接到您的主机的安全组允许以下内容的出站访问:端口 443 上的 HTTPS、端口 53 上的 DNS(UDP 和 TCP)以及您子网的网络访问控制列表(网络 ACL)。

您的 Amazon ECR 存储库策略限制对存储库映像的访问。 以下存储库策略示例允许 IAM 用户推送和拉取映像:

{
  "Version": "2008-10-17","Statement": [
    {
      "Sid": "AllowPushPull","Effect": "Allow","Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:user/push-pull-user-1","arn:aws:iam::123456789012:user/push-pull-user-2"
        ]
      },"Action": [
        "ecr:GetDownloadUrlForLayer","ecr:BatchGetImage","ecr:BatchCheckLayerAvailability","ecr:PutImage","ecr:InitiateLayerUpload","ecr:UploadLayerPart","ecr:CompleteLayerUpload"
      ]
    }
  ]
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-