【发布时间】:2019-04-02 16:22:57
【问题描述】:
我正在尝试使用 Terraform 在 AWS 的三个环境中创建数据角色。 一个是 root 帐户中的角色。此角色可用于登录 AWS,并可在生产和暂存中担任数据角色。这工作正常。这是使用单独的模块。
我在尝试从模块创建 prod 和 staging 角色时遇到问题。 我的模块看起来像这样 main.tf:
resource "aws_iam_role" "this" {
name = "${var.name}"
description = "${format("%s (managed by Terraform)", var.policy_description)}"
assume_role_policy = "${length(var.custom_principals) == 0 ? data.aws_iam_policy_document.assume_role.json : data.aws_iam_policy_document.assume_role_custom_principals.json}"
}
resource "aws_iam_policy" "this" {
name = "${var.name}"
description = "${format("%s (managed by Terraform)", var.policy_description)}"
policy = "${var.policy}"
}
data "aws_iam_policy_document" "assume_role" {
statement {
actions = ["sts:AssumeRole"]
principals {
type = "AWS"
identifiers = ["arn:aws:iam::${var.account_id}:root"]
}
}
}
data "aws_iam_policy_document" "assume_role_custom_principals" {
statement {
actions = ["sts:AssumeRole"]
principals {
type = "AWS"
identifiers = [
"${var.custom_principals}",
]
}
}
}
resource "aws_iam_role_policy_attachment" "this" {
role = "${aws_iam_role.this.name}"
policy_arn = "${aws_iam_policy.this.arn}"
}
我在 output.tf 中也有以下内容:
output "role_name" {
value = "${aws_iam_role.this.name}"
}
接下来我尝试使用该模块在 prod 和 staging 中创建两个角色。 main.tf:
module "data_role" {
source = "../tf_data_role"
account_id = "${var.account_id}"
name = "data"
policy_description = "Role for data engineers"
custom_principals = [
"arn:aws:iam::${var.master_account_id}:root",
]
policy = "${data.aws_iam_policy_document.data_access.json}"
}
然后我尝试附加这样的 AWS 策略:
resource "aws_iam_role_policy_attachment" "data_readonly_access" {
role = "${module.data_role.role_name}"
policy_arn = "arn:aws:iam::aws:policy/ReadOnlyAccess"
}
resource "aws_iam_role_policy_attachment" "data_redshift_full_access" {
role = "${module.data_role.role_name}"
policy_arn = "arn:aws:iam::aws:policy/AmazonRedshiftFullAccess"
}
我在这里遇到的问题是,当我尝试运行此模块时,上述两个策略未附加在暂存中,而是附加在 root 帐户中。如何解决此问题以使其附加暂存策略?
【问题讨论】:
标签: amazon-web-services terraform