我有一个桶,我需要限制在一个特定的用户,我写了以下脚本,但它似乎仍然允许所有用户操作桶。
resource "aws_s3_bucket" "vulnerability-scans" {
bucket = "vulnerability-scans"
}
resource "aws_s3_bucket_policy" "vulnerability-scans" {
bucket = aws_s3_bucket.vulnerability-scans.id
policy = data.aws_iam_policy_document.vulnerability-scans.json
}
data "aws_iam_policy_document" "vulnerability-scans" {
statement {
principals {
type = "AWS"
identifiers = [
aws_iam_user.circleci.arn,
]
}
actions = [
"s3:PutObject",
"s3:GetObject",
"s3:ListBucket",
]
resources = [
aws_s3_bucket.vulnerability-scans.arn,
"${aws_s3_bucket.vulnerability-scans.arn}/*",
]
}
}发布于 2022-04-10 08:23:41
首先,让我们了解角色和策略是如何在AWS上工作的。为了让用户能够访问一个桶,我们可以通过三种方式允许它:
这些是显式的Allow策略。如果上面至少有on策略允许用户访问,则用户可以访问。
重要的是显式Deny优先于显式Allow。因此,如果我们想拒绝对特定用户的访问,我们需要创建一个具有显式Deny的桶策略。为了做到这一点,我们可以用NotPrincipal。
桶策略示例:
{
"Id": "bucketPolicy",
"Statement": [
{
"Action": "s3:*",
"Effect": "Deny",
"NotPrincipal": {
"AWS": [
"arn:aws:iam::1234567890:user/alloweduser"
]
},
"Resource": [
"arn:aws:s3:::examplebucket",
"arn:aws:s3:::examplebucket/*"
]
}
],
"Version": "2012-10-17"
}此策略的Terraform代码:
data "aws_iam_policy_document" "vulnerability-scans" {
statement {
not_principals {
type = "AWS"
identifiers = [
aws_iam_user.circleci.arn
]
}
effect = "Deny"
actions = [
"s3:*"
]
resources = [
aws_s3_bucket.vulnerability-scans.arn,
"${aws_s3_bucket.vulnerability-scans.arn}/*",
]
}
}https://devops.stackexchange.com/questions/15753
复制相似问题