首页 > 解决方案 > 创建动态主体块 S3 IAM 策略

问题描述

我有一个 terraform 模块,它创建提供不同 S3 存储桶访问的策略资源。

特别是,可以使用变量自定义模块来更改存储桶、策略名称等。

# part of TF module

[...]

data "aws_iam_policy_document" "read_only" {
  statement {
    effect = "Allow"
    actions = [
      "s3:GetBucketAcl",
      "s3:GetBucketLocation",
      "s3:GetBucketPolicyStatus",
      "s3:GetBucketPublicAccessBlock",
      "s3:GetEncryptionConfiguration",
      "s3:List*",
    ]
    resources = [
      "arn:aws:s3:::${var.s3_bucket_name}"
    ]
  }
  statement {
    effect = "Allow"
    actions = [
      "s3:Get*",
    ]
    resources = [
      "arn:aws:s3:::${var.s3_bucket_name}${var.s3_bucket_prefix}/*"
    ]
  }
  statement {
    effect = "Allow"
    actions = [
      "s3:GetAccountPublicAccessBlock",
    ]
    resources = [
      "*"
    ]
  }
}

resource "aws_iam_policy" "read_only_policy" {
  count = var.create_policy_resource ? 1 : 0

  name   = "${var.policy_name_prefix}ReadOnlyPolicy"
  policy = data.aws_iam_policy_document.read_only.json
}
[...]

现在的问题是如何使用该principal块为来自其他 AWS 账户的角色提供功能。

到目前为止,我还无法使用该dynamic使其工作,因为每个语句应该有一个且只有一个主体块,但前提是用于传递主体列表的变量不为空。

知道如何使用 Terraform 解决这种情况吗?

标签: amazon-web-servicesamazon-s3terraformamazon-iam

解决方案


推荐阅读