繁体   English   中英

在 Terraform 内设置 IAM 策略

[英]Setting IAM Policy within Terraform

我在按照 Terraform 上的文档设置 IAM 策略时遇到问题。尝试使用databricks 中的文档将此策略分配给我的 S3 存储桶时

正在返回以下错误Policy document should not specify a principal.

您可以使用以下代码部分进行复制

resource "aws_iam_policy" "databricks_bucket_policy" {
  name        = "databrick_bucket_policy"
  path        = "/"
  description = "A policy for Databricks S3 Bucket"

  # Terraform's "jsonencode" function converts a
  # Terraform expression result to valid JSON syntax.
  policy = jsonencode({
    "Version" : "2012-10-17",
    "Statement" : [
      {
        "Effect" : "Allow",
        "Principal" : {
          "AWS" : [
            "arn:aws:iam::414351767826:role/unity-catalog-prod-UCMasterRole-14S5ZJVKOTYTL",
            "arn:aws:iam::<YOUR_AWS_ACCOUNT_ID>:role/<THIS_ROLE_NAME>"
          ]
        },
        "Action" : "sts:AssumeRole",
        "Condition" : {
          "StringEquals" : {
            "sts:ExternalId" : "<DATABRICKS_ACCOUNT_ID>"
          }
        }
      }
    ]
  })
}

我已经尝试遵循此 terraform 文档,但尚未完全理解 如果有人可以澄清如何做到这一点,我将不胜感激。

您正在尝试创建aws_iam_policy资源并将其分配给 S3 存储桶,但您只能将aws_s3_bucket_policy分配给存储桶。 IAM 策略分配给用户或角色,因此您永远不会在 IAM 策略中指定委托人,因为它直接分配给它所应用的委托人。

相比之下,将资源策略(例如 S3 存储桶策略)分配给资源,并且您指定要授予或拒绝访问该资源的委托人。


现在,查看 Databricks 文档,他们在文档的第 3 步中为您提供的似乎是一种信任关系。 第 4 步具有 IAM 策略。 他们还指导您创建 IAM 角色,而不是 S3 存储桶策略。

看起来您被指示要做的是创建一个 Databricks 可以承担的 IAM 角色,这使 Databricks 可以访问您帐户中的 S3 存储桶。 根本没有指示您创建 S3 存储桶策略。

您的 Terraform 应如下所示:

resource "aws_iam_role" "databricks_role" {
  name = "databricks_role"

  assume_role_policy = jsonencode(
    # The JSON from Step 3 goes here
  )
}

resource "aws_iam_policy" "databricks_role_policy" {
  name        = "databrick_role_policy"
  path        = "/"
  description = "A policy for Databricks IAM Role"

  policy = jsonencode(
    # The JSON from Step 4 goes here
  )
}

resource "aws_iam_role_policy_attachment" "databricks_role" {
  role       = aws_iam_role.databricks_role.name
  policy_arn = aws_iam_policy.databricks_role_policy.arn
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM