首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Terraform S3 -拒绝除特定用户以外的所有用户

Terraform S3 -拒绝除特定用户以外的所有用户
EN

DevOps用户
提问于 2022-04-07 13:35:41
回答 1查看 642关注 0票数 1

我有一个桶,我需要限制在一个特定的用户,我写了以下脚本,但它似乎仍然允许所有用户操作桶。

代码语言:javascript
复制
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}/*",
    ]
  }
}
EN

回答 1

DevOps用户

发布于 2022-04-10 08:23:41

首先,让我们了解角色和策略是如何在AWS上工作的。为了让用户能够访问一个桶,我们可以通过三种方式允许它:

  1. 允许它使用附加到用户所承担的角色的IAM策略;
  2. 允许它使用桶策略;
  3. 用户组将策略附加到它,或者有一个直接附加到用户的策略,允许访问桶。

这些是显式的Allow策略。如果上面至少有on策略允许用户访问,则用户可以访问。

重要的是显式Deny优先于显式Allow。因此,如果我们想拒绝对特定用户的访问,我们需要创建一个具有显式Deny的桶策略。为了做到这一点,我们可以用NotPrincipal

桶策略示例:

代码语言:javascript
复制
{
    "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代码:

代码语言:javascript
复制
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}/*",
    ]
  }
}
票数 1
EN
页面原文内容由DevOps提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://devops.stackexchange.com/questions/15753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档