Могу ли я добавить из коробки aws_iam_policy (SecurityAudit), идентификатор учетной записи и внешний идентификатор к aws_iam_role, используя terraform?
Я настраиваю облачную безопасность и мне нужно:
- Выберите тип доверенного лица> Другая учетная запись AWS
- Идентификатор аккаунта: xxxxxxxxxx
- Внешний идентификатор: xxxxxxxxxx
- Прикрепите политику SecurityAudit (которая уже есть в AWS)
Я не уверен, как добавить уже существующую политику или где добавить идентификаторы. Я не могу найти решение из документации terraform.
../Core/iam_roles.tf
# BEGIN 'foo'
resource "aws_iam_role" "foo" {
name = "${terraform.workspace}_Foo"
path = "/"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"automation.amazonaws.com",
"events.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
EOF
}
resource "aws_iam_role_policy_attachment" "foo" {
policy_arn = "${aws_iam_policy.security_audit.arn}"
role = "${aws_iam_role.foo.name}"
}
Любая помощь приветствуется!
2 ответа
Решение
`# BEGIN 'Foo'
resource "aws_iam_role" "foo" {
name = "${terraform.workspace}_Foo"
path = "/"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::INSERT_ACCOUNT_NUMBER:root"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "INSERT_EXTERNAL_ID"
}
}
}
]
}
EOF
}
resource "aws_iam_role_policy_attachment" "foo" {
policy_arn = "arn:aws:iam::aws:policy/SecurityAudit"
role = "${aws_iam_role.foo.name}"
}
resource "aws_iam_instance_profile" "foo" {
name = "${terraform.workspace}_Foo"
role = "${aws_iam_role.foo.name}"
}
# END
`
Если вы присоединяете политику, которая уже существует в учетной записи, я бы использовал источник данных для ее запроса. Вы должны знать ARN, чтобы использовать источник данных политики IAM, чтобы он не сильно отличался от указания ARN непосредственно в aws_iam_role_policy_attachment
ресурс за исключением того, что позволяет terraform plan
Команда, чтобы проверить, что политика существует перед запуском apply
Это дополнительная гарантия для вас. Источник данных также дает вам больше информации о ресурсе, если он вам нужен.
data "aws_iam_policy" "security_audit" {
arn = "arn:aws:iam::${var.target_account_id}:policy/SecurityAudit"
}
# BEGIN 'foo'
resource "aws_iam_role" "foo" {
name = "${terraform.workspace}_Foo"
path = "/"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"automation.amazonaws.com",
"events.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
},
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::${var.other_aws_account_id}:role/your_role_name_and_path_here"
]
},
"Action": "sts:AssumeRole"
}
]
}
EOF
}
resource "aws_iam_role_policy_attachment" "foo" {
policy_arn = "${data.aws_iam_policy.security_audit.arn}"
role = "${aws_iam_role.foo.name}"
}