ECS任务访问S3被拒绝

5

我为我的任务设置了一个 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/ 下的文件夹,如 bucket/00001,但我无法从 bucket/Templates 读取。
我已经多次重新部署了权限和任务(使用 terraform),但没有任何变化。我已经向应用程序添加日志,以确保它正在使用正确的 bucket 和路径/密钥。
我陷入了困境。有人知道我可能遗漏了什么吗?
谢谢。
PS:我突然想到,我无法访问的桶中的文件是使用其他凭据而不是任务使用的凭据复制到那里的。
aws s3 cp ..\Api\somefiles\000000000001\ s3://bucket/000000000001 --recursive --profile p aws s3 cp ..\Api\somefiles\Templates\000000000001\ s3://bucket/Templates/000000000001 --recursive --profile p 我在 cp 命令中使用了 -acl bucket-owner-full-control,但我删除了它以查看是否有帮助,但没有。也许我需要其他的东西吗?
2个回答

4
现在它可以工作是因为你改变了资源以匹配“”。 尝试将桶本身作为资源添加,以及/模式:
"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/*",
            ]
    }
]

1

问题已解决。我找到了以前雇主的一个旧样例 :) 我需要明确为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": "*"
    }
]

}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接