DevOps Mind
Introdução
Idéia deste post é trazer uma explicação breve, para configurar o Terraform em um cenário multi-account básico.
Material de apoio
Procedimento
– No provider, foi passado um profile que será usado como base, como se fosse conta-A:
provider "aws" {
# Região onde seus recursos serão provisionados
region = "us-east-1"
profile = "devopsmind-labs/AdministratorAccess"
assume_role {
role_arn = "arn:aws:iam::608264180887:role/admin-role-account-sandbox"
# (Optional) The external ID created in step 1c.
external_id = "8899"
session_name = "terraform-session"
}
}
na conta-B é necessária a role, permitindo o account id da conta-A e usando o external id citado.
neste cenário foi usado o profile fixo “devopsmind-labs/AdministratorAccess”, porque ele dificilmente vai variar.
Numa empresa pode ser interessante outra abordagem, estilo “Shared-Services Account”, como pode ser visto:
– Exemplo de como está o aws config, usando granted:
fernando@debian10x64:~$ cat ~/.aws/config
[default]
region = us-east-1
output = json
[profile fernandomuller]
region = us-east-1
output = json
[profile devopsmind-labs/AdministratorAccess]
granted_sso_start_url = https://d-2267f719d3.awsapps.com/start/
granted_sso_region = us-east-1
granted_sso_account_id = 411377134833
granted_sso_role_name = AdministratorAccess
common_fate_generated_from = aws-sso
credential_process = granted credential-process --profile devopsmind-labs/AdministratorAccess
[profile sandbox-devopsmind-labs/AdministratorAccess]
granted_sso_start_url = https://d-2267f719d3.awsapps.com/start/
granted_sso_region = us-east-1
granted_sso_account_id = 608264180887
granted_sso_role_name = AdministratorAccess
common_fate_generated_from = aws-sso
credential_process = granted credential-process --profile sandbox-devopsmind-labs/AdministratorAccess
Demais arquivos tf só serviram para os testes, não são mandatórios nas configurações do SSO:
main.tf
data "aws_caller_identity" "current" {}
resource "aws_s3_bucket" "my_bucket" {
bucket = "day67taskbucket0304"
}
outputs.tf
output "s3_bucket_id" {
value = aws_s3_bucket.my_bucket.id
}
output "aws_account_id" {
value = data.aws_caller_identity.current.account_id
}
output "s3_bucket_region" {
value = aws_s3_bucket.my_bucket.region
}
output "s3_bucket_arn" {
value = aws_s3_bucket.my_bucket.arn
}
output "s3_bucket_domain_name" {
value = aws_s3_bucket.my_bucket.bucket_domain_name
}
![](https://devopsmind.com.br/wp-content/uploads/2024/02/TERRAFORM-plan-1024x394.png)
Extra
Para aqueles que precisam de uma forma fácil e segura de configurar o AWS CLI, recomendo fortemente o uso do Granted, que pode ser visto neste post: