### Create policies for allowing user to assume the role in the production account
### You can copy this file and change `prod` to other environment if you have any other account
# Admin Access policy
# If this policy is applied, then you will be able to assume role in the production account with admin permission
module "art_prod_admin" {
source = "./_module_assume_policy/"
aws_account = "art-prod"
subject = "admin"
resources = ["arn:aws:iam::${var.prod_account_id}:role/assume-art-prod-admin"]
}
output "assume_art_prod_admin_policy_arn" {
value = module.art_prod_admin.assume_policy_arn
}
# Poweruser Access policy
# If this policy is applied, then you will be able to assume role in the production account with poweruser permission
module "art_prod_poweruser" {
source = "./_module_assume_policy/"
aws_account = "art-prod"
subject = "poweruser"
resources = ["arn:aws:iam::${var.prod_account_id}:role/assume-art-prod-poweruser"]
}
output "assume_art_prod_poweruser_policy_arn" {
value = module.art_prod_poweruser.assume_policy_arn
}
# ReadOnly Access policy
# If this policy is applied, then you will be able to assume role in the production account with readonly permission
module "art_prod_readonly" {
source = "./_module_assume_policy/"
aws_account = "art-prod"
subject = "readonly"
resources = ["arn:aws:iam::${var.prod_account_id}:role/assume-art-prod-readonly"]
}
output "assume_art_prod_readonly_policy_arn" {
value = module.art_prod_readonly.assume_policy_arn
}
terraform/iam/art-id/user_samples.tf
resource "aws_iam_user" "jupiter_devart_com" {
name = "[email protected]"
}
resource "aws_iam_user" "daniel_devart_com" {
name = "[email protected]"
}
terraform/iam/art-id/group_devops_black.tf
############## art DevOps Group ##################
resource "aws_iam_group" "art_devops_black" {
name = "art_devops_black"
}
resource "aws_iam_group_membership" "art_devops_black" {
name = aws_iam_group.art_devops_black.name
users = [
aws_iam_user.jupiter_devart_com.name,
]
group = aws_iam_group.art_devops_black.name
}
############### DevOps Basic Policy ##################
resource "aws_iam_group_policy" "art_devops_black" {
name = "art_devops_black"
group = aws_iam_group.art_devops_black.id
policy = data.aws_iam_policy_document.art_devops_black.json
}
data "aws_iam_policy_document" "art_devops_black" {
statement {
actions = [
"*"
]
resources = [
"*"
]
}
}
######################################################
########### DevOps Assume Policies ####################
resource "aws_iam_group_policy_attachment" "art_devops_black" {
count = length(var.assume_policy_art_devops_black)
group = aws_iam_group.art_devops_black.name
policy_arn = var.assume_policy_art_devops_black[count.index]
}
variable "assume_policy_art_devops_black" {
description = "IAM Policy to be attached to user"
type = list(string)
default = [
# Please change <account_id> to the real account id number of id account
"arn:aws:iam::<account_id>:policy/assume-art-prod-admin-policy", # Add admin policy to black group user
]
}
#######################################################
############### MFA Manager ###########################
resource "aws_iam_group_policy_attachment" "art_devops_black_rotatekeys" {
group = aws_iam_group.art_devops_black.name
policy_arn = aws_iam_policy.rotate_keys.arn
}
resource "aws_iam_group_policy_attachment" "art_devops_black_selfmanagemfa" {
group = aws_iam_group.art_devops_black.name
policy_arn = aws_iam_policy.self_managed_mfa.arn
}
resource "aws_iam_group_policy_attachment" "art_devops_black_forcemfa" {
group = aws_iam_group.art_devops_black.name
policy_arn = aws_iam_policy.force_mfa.arn
}
#######################################################
############## art DevOps Group ##################
resource "aws_iam_group" "art_devops_white" {
name = "art_devops_white"
}
resource "aws_iam_group_membership" "art_devops_white" {
name = aws_iam_group.art_devops_white.name
users = [
aws_iam_user.daniel_devart_com.name,
]
group = aws_iam_group.art_devops_white.name
}
#######################################################
########### DevOps Assume Policies ####################
resource "aws_iam_group_policy_attachment" "art_devops_white" {
count = length(var.assume_policy_art_devops_white)
group = aws_iam_group.art_devops_white.name
policy_arn = var.assume_policy_art_devops_white[count.index]
}
variable "assume_policy_art_devops_white" {
description = "IAM Policy to be attached to user"
type = list(string)
default = [
# Please change <account_id> to the real account id number of id account
"arn:aws:iam::<account_id>:policy/assume-art-prod-readonly-policy", # Add readonly policy to while group user
]
}
#######################################################
############### MFA Manager ###########################
resource "aws_iam_group_policy_attachment" "art_devops_white_rotatekeys" {
group = aws_iam_group.art_devops_white.name
policy_arn = aws_iam_policy.rotate_keys.arn
}
resource "aws_iam_group_policy_attachment" "art_devops_white_selfmanagemfa" {
group = aws_iam_group.art_devops_white.name
policy_arn = aws_iam_policy.self_managed_mfa.arn
}
resource "aws_iam_group_policy_attachment" "art_devops_white_forcemfa" {
group = aws_iam_group.art_devops_white.name
policy_arn = aws_iam_policy.force_mfa.arn
}
#######################################################