[英]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.