我有一个桶,我需要限制在一个特定的用户,我写了以下脚本,但它似乎仍然允许所有用户操作桶。
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-08 13:28:02
我认为您必须考虑到其他用户在他们的策略中可能有Allow,所以这里的方法应该是拒绝任何不是您希望它的用户的访问。AWS文档1中有详细的解释,但为了简洁起见,我认为terraform代码应该如下所示:
data "aws_iam_policy_document" "vulnerability-scans" {
statement {
sid = "AllExceptUser"
effect = "Deny"
principals {
type = "AWS"
identifiers = ["*"]
}
actions = [
"s3:PutObject",
"s3:GetObject",
"s3:ListBucket",
]
resources = [
aws_s3_bucket.vulnerability-scans.arn,
"${aws_s3_bucket.vulnerability-scans.arn}/*",
]
condition {
test = "StringNotLike"
variable = "aws:userId"
values = [
aws_iam_user.circleci.arn
]
}
}
}尽管引用URL说它是针对IAM角色的,但对于用户来说也是如此。StringNotLike条件算子在2中有更详细的解释。
https://stackoverflow.com/questions/71796584
复制相似问题