ECS 任务对 S3 的访问被拒绝
ECS Task Access Denied to S3
我为我的任务设置了一个具有以下权限的 IAM 角色,但我在尝试访问存储桶时 访问被拒绝。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucket/Templates/*",
"arn:aws:s3:::bucket/*",
"arn:aws:s3:::anotherBucket/*"
]
}
]
}
容器实例具有标准 AmazonEC2ContainerServiceforEC2Role
策略的角色。
我似乎能够读取和写入存储桶/下的文件夹,例如 bucket/00001,但我无法读取 bucket/Templates。
我已经反复重新部署权限和任务(使用 terraform),但没有任何变化。我向应用程序添加了日志记录以确保它使用正确的存储桶和路径/密钥。
我被难住了。有人知道我在这里可能错过了什么吗?
谢谢
PS:我刚刚想到,我无法访问的存储桶中的文件是使用脚本复制到那里的。这是使用任务正在使用的凭据以外的凭据完成的。
aws s3 cp ..\Api\somefiles[=12=]0000000001\ s3://bucket/000000000001 --recursive --profile p
aws s3 cp ..\Api\somefiles\Templates[=12=]0000000001\ s3://bucket/Templates/000000000001 --recursive --profile p
我在 cp 命令上使用 -acl bucket-owner-full-control 但我删除了它以查看是否有帮助 - 它没有。也许我还需要其他东西?
已解决。从以前的雇主那里找到了一个旧样本 :) 我需要一个明确的 List* 权限,与其他权限分开。我还需要定义 sids。
"Version": "2012-10-17",
"Statement": [
{
"Sid": "sid1",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:ListBucket",
"s3:HeadBucket"
],
"Resource": "*"
},
{
"Sid": "sid2",
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}
它现在可以工作了,因为您更改了资源以匹配“”。
尝试将存储桶本身添加为资源,以及 / pattern:
"Version": "2012-10-17",
"Statement": [
{
"Sid": "sid1",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:ListBucket",
"s3:HeadBucket"
],
"Resource": "*"
},
{
"Sid": "sid2",
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucket",
"arn:aws:s3:::bucket/*",
"arn:aws:s3:::anotherBucket"
"arn:aws:s3:::anotherBucket/*",
]
}
]
我为我的任务设置了一个具有以下权限的 IAM 角色,但我在尝试访问存储桶时 访问被拒绝。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucket/Templates/*",
"arn:aws:s3:::bucket/*",
"arn:aws:s3:::anotherBucket/*"
]
}
]
}
容器实例具有标准 AmazonEC2ContainerServiceforEC2Role
策略的角色。
我似乎能够读取和写入存储桶/下的文件夹,例如 bucket/00001,但我无法读取 bucket/Templates。
我已经反复重新部署权限和任务(使用 terraform),但没有任何变化。我向应用程序添加了日志记录以确保它使用正确的存储桶和路径/密钥。
我被难住了。有人知道我在这里可能错过了什么吗?
谢谢
PS:我刚刚想到,我无法访问的存储桶中的文件是使用脚本复制到那里的。这是使用任务正在使用的凭据以外的凭据完成的。
aws s3 cp ..\Api\somefiles[=12=]0000000001\ s3://bucket/000000000001 --recursive --profile p
aws s3 cp ..\Api\somefiles\Templates[=12=]0000000001\ s3://bucket/Templates/000000000001 --recursive --profile p
我在 cp 命令上使用 -acl bucket-owner-full-control 但我删除了它以查看是否有帮助 - 它没有。也许我还需要其他东西?
已解决。从以前的雇主那里找到了一个旧样本 :) 我需要一个明确的 List* 权限,与其他权限分开。我还需要定义 sids。
"Version": "2012-10-17",
"Statement": [
{
"Sid": "sid1",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:ListBucket",
"s3:HeadBucket"
],
"Resource": "*"
},
{
"Sid": "sid2",
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}
它现在可以工作了,因为您更改了资源以匹配“”。 尝试将存储桶本身添加为资源,以及 / pattern:
"Version": "2012-10-17",
"Statement": [
{
"Sid": "sid1",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:ListBucket",
"s3:HeadBucket"
],
"Resource": "*"
},
{
"Sid": "sid2",
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucket",
"arn:aws:s3:::bucket/*",
"arn:aws:s3:::anotherBucket"
"arn:aws:s3:::anotherBucket/*",
]
}
]