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