Terraform:将预先存在的 aws 策略附加到预先存在的 aws 角色
Terraform: Attaching pre-existing aws policies to a pre-existing aws role
我不是使用 aws 控制台简单地将几个预先存在的策略附加到预先存在的角色,而是需要在需要权限的特定系统的模块中通过 Terraform 来完成。
不过我运气不太好?
variables.tf
variable "masterrole" {
description = "role already present within the cn-tio-tooling-acc"
default = "arn:aws-cn:iam::12345678910:role/Master"
}
variable "policies" {
description = "policies already present within the cn-tio-tooling-acc"
default = "arn:aws-cn:iam::12345678910:policy/Source-1,arn:aws-cn:iam::351767606935:policy/Source-2"
}
data.tf <-- 引用帐户中已经存在的角色和策略数据
data "aws_iam_role" "masterrole" {
name = "Master"
}
data "aws_iam_policy" "policies" {
arn = var.policies
}
IAM.tf
resource "aws_iam_role_policy_attachment" "Sources" {
role = aws_iam_role.masterrole.name
policy_arn = aws_iam_policy.policies.arn
}
这里可能是一些非常简单的东西,但为什么我从 'plan' 结果中得到以下内容?
错误:引用了未声明的资源
在 cn_cpm_iam.tf 第 3 行,在资源“aws_iam_role_policy_attachment”“来源”中:
3: 角色 = aws_iam_role.masterrole.name
托管资源“aws_iam_role”“masterrole”尚未在
根模块。
错误:引用了未声明的资源
在 cn_cpm_iam.tf 第 4 行,在资源“aws_iam_role_policy_attachment”“来源”中:
4: policy_arn = aws_iam_policy.cpmpolicies.arn
托管资源“aws_iam_policy”“策略”尚未在
根模块。
在 terraform 中引用数据源时,您需要在它们前面加上前缀 data.
。所以尝试使用
resource "aws_iam_role_policy_attachment" "Sources" {
role = data.aws_iam_role.masterrole.name
policy_arn = data.aws_iam_policy.policies.arn
}
但是因为您已经知道名称和 ARN,所以您可以直接使用它们而无需查询数据源:
resource "aws_iam_role_policy_attachment" "Sources" {
role = "Master"
policy_arn = var.policies
}
如果我在这里遗漏了什么,请告诉我;)
我不是使用 aws 控制台简单地将几个预先存在的策略附加到预先存在的角色,而是需要在需要权限的特定系统的模块中通过 Terraform 来完成。
不过我运气不太好?
variables.tf
variable "masterrole" {
description = "role already present within the cn-tio-tooling-acc"
default = "arn:aws-cn:iam::12345678910:role/Master"
}
variable "policies" {
description = "policies already present within the cn-tio-tooling-acc"
default = "arn:aws-cn:iam::12345678910:policy/Source-1,arn:aws-cn:iam::351767606935:policy/Source-2"
}
data.tf <-- 引用帐户中已经存在的角色和策略数据
data "aws_iam_role" "masterrole" {
name = "Master"
}
data "aws_iam_policy" "policies" {
arn = var.policies
}
IAM.tf
resource "aws_iam_role_policy_attachment" "Sources" {
role = aws_iam_role.masterrole.name
policy_arn = aws_iam_policy.policies.arn
}
这里可能是一些非常简单的东西,但为什么我从 'plan' 结果中得到以下内容?
错误:引用了未声明的资源 在 cn_cpm_iam.tf 第 3 行,在资源“aws_iam_role_policy_attachment”“来源”中: 3: 角色 = aws_iam_role.masterrole.name 托管资源“aws_iam_role”“masterrole”尚未在 根模块。
错误:引用了未声明的资源 在 cn_cpm_iam.tf 第 4 行,在资源“aws_iam_role_policy_attachment”“来源”中: 4: policy_arn = aws_iam_policy.cpmpolicies.arn 托管资源“aws_iam_policy”“策略”尚未在 根模块。
在 terraform 中引用数据源时,您需要在它们前面加上前缀 data.
。所以尝试使用
resource "aws_iam_role_policy_attachment" "Sources" {
role = data.aws_iam_role.masterrole.name
policy_arn = data.aws_iam_policy.policies.arn
}
但是因为您已经知道名称和 ARN,所以您可以直接使用它们而无需查询数据源:
resource "aws_iam_role_policy_attachment" "Sources" {
role = "Master"
policy_arn = var.policies
}
如果我在这里遗漏了什么,请告诉我;)