gpt4 book ai didi

amazon-web-services - 将特定 IAM 角色列入白名单的存储桶策略

转载 作者:行者123 更新时间:2023-12-05 06:16:52 24 4
gpt4 key购买 nike

我有一个如下所示的存储桶策略:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::test-bucket/*"
},
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::test-bucket/*",
"Condition": {
"StringEquals": {
"s3:ExistingObjectTag/status": "INFECTED"
},
"StringNotLike": {
"aws:SourceArn": "arn:aws:sts::1234567890:assumed-role/ecs_task_role/*"
}
}
}
]
}

我想要的是这样的:

如果 s3 对象有一个带有键值 status=INFECTED 的标签,则限制对公众的访问,除非您使用此 iam 角色 arn:aws:iam::1234567890:角色/ecs_task_role。因此,任何承担此 iam 角色的系统(此处为容器)都应该能够访问存储桶内容,而不管其中的对象具有什么标签。

我看到我的 ecs 任务承担了这个角色,然后它的角色 arn 看起来像这样:arn:aws:sts::1234567890:assumed-role/ecs_task_role/e7f2364b-c93d-4228-9259- 1a59bdf2d201

所以我使用通配符 StringNotLike 运算符将来 self 的 ecs 任务的请求列入白名单。

但由于某些原因,这不起作用。当我尝试从带有标签 status: INFECTED 的存储桶中下载对象时,我的 ecs 任务出现 403 访问被拒绝。我在这里错过了什么?更重要的是,我需要更改什么才能使此访问控制逻辑起作用?

提前致谢!

最佳答案

如果不使用 Deny,生活会简单得多。

看来您有两个要求:

  • 阻止“INFECTED”对象的公共(public)访问
  • 授予对 IAM 角色的访问权限

这可以分为两个部分:

  • 授予对未感染对象的访问权限的存储桶策略
  • 授予存储桶访问权限的 IAM 角色策略(无论元数据如何)

在存储桶策略中,您应该使用 NotStringEquals 来检查标签(即,在找到该标签的地方授予权限)。这限制了 Allow 而不必使用 Deny

{
"Version": "2012-10-17",
"Id": "AllowNonInfected",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::stack-woodstock/*",
"Condition": {
"StringNotEquals": {
"s3:ExistingObjectTag/status": "INFECTED"
}
}
}
]
}

关于amazon-web-services - 将特定 IAM 角色列入白名单的存储桶策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61920939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com