e-e*_*e-e 72 docker amazon-ecr
我最近在 AWS ECR 中创建了一个新存储库,并尝试推送图像。我正在复制/粘贴通过存储库页面上的“查看推送命令”按钮提供的说明。我将其复制到此处以供参考:
aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin 123456789.dkr.ecr.us-west-2.amazonaws.com
(“登录成功”)
docker build -t myorg/myapp .
docker tag myorg/myapp:latest 123456789.dkr.ecr.us-west-2.amazonaws.com/myorg/myapp:latest
docker push 123456789.dkr.ecr.us-west-2.amazonaws.com/myorg/myapp:latest
然而,当我到达这docker push
一步时,我看到:
> docker push 123456789.dkr.ecr.us-west-2.amazonaws.com/myorg/myapp:latest
The push refers to repository [123456789.dkr.ecr.us-west-2.amazonaws.com/myorg/myapp]
a53c8ed5f326: Retrying in 1 second
78e16537476e: Retrying in 1 second
b7e38d172e62: Retrying in 1 second
f1ff72b2b1ca: Retrying in 1 second
33b67aceeff0: Retrying in 1 second
c3a550784113: Waiting
83fc4b4db427: Waiting
e8ade0d39f19: Waiting
487d5f9ec63f: Waiting
b24e42eb9639: Waiting
9262398ff7bf: Waiting
804aae047b71: Waiting
5d33f5d87bf5: Waiting
4e38024e7e09: Waiting
EOF
Run Code Online (Sandbox Code Playgroud)
我想知道这是否与此存储库关联的权限/策略有关。目前该存储库没有附加任何声明。这是缺失的部分吗?如果是这样,该声明会是什么样子?我已经尝试过这个,但没有效果:
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AllowPutImage",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789:root"
},
"Action": "ecr:PutImage"
}
]
}
Run Code Online (Sandbox Code Playgroud)
奖励积分:我最终想在 CDK CodeBuildAction 中使用它。我遇到了与上面相同的错误,所以我检查一下我在本地终端中是否得到了相同的结果,我就是这样。因此,如果策略声明需要不同才能在 CDK CodeBuildAction 中使用,那么这些详细信息也将受到赞赏。
预先感谢您的建议和建议。
小智 51
当我尝试使用 AWS 和 Docker CLI 手动上传图像时,我遇到了同样的问题。我可以通过进入 ECR -> 存储库 -> 权限然后添加新的策略声明和principal:*
以下操作来修复它:
"ecr:BatchGetImage",
"ecr:BatchCheckLayerAvailability",
"ecr:CompleteLayerUpload",
"ecr:GetDownloadUrlForLayer",
"ecr:InitiateLayerUpload",
"ecr:PutImage",
"ecr:UploadLayerPart"
Run Code Online (Sandbox Code Playgroud)
请务必添加更多限制性原则。我只是想看看在这种情况下权限是否是问题所在,果然确实如此。
Vis*_*M.R 34
接受的答案可以正确解决问题。然而,正如答案中所提到的,允许principal:*
是有风险的,并且可能会使您的 ECR 受到损害。
请务必添加特定主体,即 IAM 用户/角色,以便仅允许这些用户/角色执行上述“操作”。可以在Amazon ECR >> 存储库 >>选择所需存储库>> 权限 >> 编辑策略 JSON中添加以下 JSON 策略以快速解决此问题:
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<AccountNumber>:role/<RoleName>"
},
"Action": [
"ecr:BatchCheckLayerAvailability",
"ecr:BatchGetImage",
"ecr:CompleteLayerUpload",
"ecr:GetDownloadUrlForLayer",
"ecr:InitiateLayerUpload",
"ecr:PutImage",
"ecr:UploadLayerPart"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
小智 6
在运行“docker Push”时,如果没有首先在 ECR 中创建相应的存储库(示例中为“myorg/myapp”),则可能会看到相同的消息(循环中的“Retrying in ... Seconds”)。跑步:
aws ecr create-repository --repository-name myorg/myapp --region us-west-2
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
67598 次 |
最近记录: |