terraform.aws-baseline-infra/modules/security_identity_compliance/iam-user/main.tf

84 lines
2.7 KiB
Terraform
Raw Normal View History

2022-09-15 16:31:30 +08:00
resource "aws_iam_user" "iam-user" {
name = var.iam-user-name
tags = var.default-tags
force_destroy = true
}
resource "aws_iam_access_key" "iam-user-access-key" {
count = var.create-access-key ? 1 : 0
user = aws_iam_user.iam-user.name
}
resource "aws_iam_user_policy" "iam-user-policy" {
2022-09-16 10:37:28 +08:00
count = var.create-group ? 0 : 1
name = var.iam-user-policy-name
2022-09-15 16:31:30 +08:00
user = aws_iam_user.iam-user.name
policy = var.iam-user-policy
}
resource "aws_iam_user_policy_attachment" "iam-user-managed-policies" {
2022-09-16 10:37:28 +08:00
count = var.create-group ? 0: length(var.managed-policy-arns)
2022-09-15 16:31:30 +08:00
user = aws_iam_user.iam-user.name
2022-09-16 10:37:28 +08:00
policy_arn = var.managed-policy-arns[count.index]
2022-09-15 16:31:30 +08:00
}
resource "random_password" "iam-user-pass" {
count = var.create-password ? 1 : 0
length = 20
special = true
}
resource "aws_iam_user_login_profile" "iam-user-profile" {
count = var.create-password ? 1 : 0
user = aws_iam_user.iam-user.name
}
resource "aws_secretsmanager_secret" "secretmanager" {
count = var.create-access-key || var.create-password ? 1 : 0
name = "IamUserCredential-${var.iam-user-name}"
description = "AWS resource credential"
tags = var.default-tags
}
resource "aws_secretsmanager_secret_version" "iam-user-secret" {
count = var.create-access-key || var.create-password ? 1 : 0
secret_id = aws_secretsmanager_secret.secretmanager[0].id
secret_string = jsonencode(
{ "ConsolePassword" : length(random_password.iam-user-pass) > 0 ? random_password.iam-user-pass[0].result : "NotSet",
"AccessKeyId" : length(aws_iam_access_key.iam-user-access-key) > 0 ? aws_iam_access_key.iam-user-access-key[0].id : "NotSet",
"KeySecret" : length(aws_iam_access_key.iam-user-access-key) > 0 ? aws_iam_access_key.iam-user-access-key[0].secret : "NotSet"
})
2022-09-16 10:37:28 +08:00
}
resource aws_iam_group iam-group {
count = var.create-group ? 1 : 0
name = var.iam-group-name
}
resource aws_iam_group_membership new-group-membership {
count = length(aws_iam_group.iam-group)
name = aws_iam_group.iam-group[0].name
group = aws_iam_group.iam-group[0].name
users = [aws_iam_user.iam-user.name]
}
resource aws_iam_group_membership existing-group-membership {
count = length(var.add-to-groups)
name = var.add-to-groups[count.index]
group = var.add-to-groups[count.index]
users = [aws_iam_user.iam-user.name]
}
resource "aws_iam_group_policy" "iam-group-policy" {
count = var.create-group ? 1 : 0
name = "SelfServiceAccess"
group = aws_iam_group.iam-group[0].name
policy = var.iam-user-policy
}
resource "aws_iam_group_policy_attachment" "iam-group-managed-policies" {
count = var.create-group ? length(var.managed-policy-arns) : 0
group = aws_iam_group.iam-group[0].name
policy_arn = var.managed-policy-arns[count.index]
}