我有一个 ECS 任务配置为运行 nginx 容器,我想将其用作 S3 存储桶网站的反向代理。
出于安全目的,为存储桶启用了阻止公共访问,因此我正在寻找一种仅向 ECS 任务授予读取访问权限的方法。
我希望运行 nginx 反向代理的 ECS 任务能够
S3:GetObjects
访问我的网站存储桶。该存储桶不能是公共的,因此我想将其限制为使用 ecs 任务 IAM 角色作为主体的 ecs 任务。
IAM 角色: arn:aws:iam:::role/ 配置了附加策略,允许存储桶及其对象中的所有 S3 操作:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Action": "S3:*",
"Resource": [
"arn:aws:s3:::<BUCKET>",
"arn:aws:s3:::<BUCKET>/*"
]
}
]
}
在受信任的实体中,我添加了承担 ECS 任务角色的权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ecs-tasks.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
问题在于 EC2 目标组运行状况检查始终向存储桶及其对象返回“拒绝访问”。
[08/Jun/2020:20:33:19 +0000] “GET / HTTP/1.1” 403 303 “-“ “ELB-HealthChecker/2.0”
我还尝试通过添加下面的存储桶策略来授予它权限,但我认为不需要它,因为 IAM 角色已经可以访问它......
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "allowNginxProxy",
"Effect": "Allow",
"Principal": {
"Service": "ecs-tasks.amazonaws.com"
},
"Action": "*",
"Resource": [
"arn:aws:s3:::<BUCKET>/*",
"arn:aws:s3:::<BUCKET>"
]
}
]
}
我也尝试过使用
”AWS": "arn:aws:iam::<ACCOUNT_NUMBER>:role/<ECS_TASK_ROLE>"
作为校长。
有什么建议吗?
这里还有另一种可能性:
EC2 实例可能没有配置实例配置文件。
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
使用此托管策略
AmazonEC2ContainerServiceforEC2Role
创建实例配置文件
参考文档。