amazon-web-services - AWS ECS Fargate 从跨账户 ECR 存储库中提取映像
问题描述
我有 2 个 AWS 账户: - 具有 ECR 存储库的账户 A。- 具有运行 Fargate 的 ECS 集群的账户 b。
我在账户 A 中创建了一个与账户 B 具有信任关系的“跨账户”角色,我还为该角色附加了“AmazonEC2ContainerRegistryPowerUser”策略。
我通过将账户 B 的 ID 和“跨账户”角色添加到存储库策略来授予对账户 A 中 ECR 存储库的访问权限。
我将一个策略附加到 Fargate“TaskExecutionRole”,允许 Fargate 承担“跨账户”角色。
当尝试在账户 B 中部署 Fargate 任务并引用账户 A 中的图像时,我收到 500 错误。
解决方案
Fargate 不会自动承担跨账户角色。幸运的是,您无需在另一个帐户中担任角色即可从该帐户的 ECR 存储库中提取图像。
要在 ECR 中启用对图像的跨账户访问,请在账户 A 的存储库中添加账户 B 的访问权限(通过设置存储库策略),然后在账户 B 中指定有权从 ECR 中提取的 TaskExecutionRole(“ecr:GetDownloadUrlForLayer” 、“ecr:BatchGetImage”、“ecr:BatchCheckLayerAvailability”)。
例如,在账户 A 中的存储库上设置存储库策略,如下所示:
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AllowCrossAccountPull",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::ACCOUNT_B_ID:root"
},
"Action": [
"ecr:GetDownloadUrlForLayer",
"ecr:BatchCheckLayerAvailability",
"ecr:BatchGetImage"
]
}
]
}
然后,将账户 B 中的 TaskExecutionRole 设置为具有如下策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecr:GetAuthorizationToken",
"ecr:BatchCheckLayerAvailability",
"ecr:GetDownloadUrlForLayer",
"ecr:BatchGetImage"
],
"Resource": "*"
}
]
}
或者,您可以为 TaskExecutionRole 使用托管策略AmazonECSTaskExecutionRolePolicy
,而不是定义自己的策略。
推荐阅读
- swift - Swift,Firebase:创建用户后实时数据库中没有数据
- android - 如何制作这种类型的自定义 EditText UI?
- python - 将方法作为参数和可选参数的方法
- python - 如何有条件地从另一个 Python 包中导入和运行方法?
- reactjs - 必须按两次才能增加 this.state.count - React Native
- php - 试图在 uselogin.php 中获取非对象的属性
- vue.js - 使用 Vue Native CLI 安装 Vue Native 失败
- javascript - 如何在 Promise 中处理异步代码?
- javascript - 在 ReactNative 中显示 3D 模型
- java - java反射constructor.newInstance给出“错误数量的参数”