Efetuar autenticação do Terraform na AWS com SSO, usando assume_role

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

<https://hector-reyesaleman.medium.com/terraform-aws-provider-everything-you-need-to-know-about-multi-account-authentication-and-f2343a4afd4b>

<https://support.hashicorp.com/hc/en-us/articles/360041289933-Using-AWS-AssumeRole-with-the-AWS-Terraform-Provider>

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:

<https://hector-reyesaleman.medium.com/terraform-aws-provider-everything-you-need-to-know-about-multi-account-authentication-and-f2343a4afd4b>

– 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
}

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:

Fernando Müller Junior
Fernando Müller Junior

Eu sou o Fernando Müller, um Tech Lead SRE com 16 anos de experiência em TI, atualmente eu trabalho na Appmax, uma fintech localizada no Brasil. Apaixonado por trabalhar com arquiteturas e aplicações Cloud Native, ferramentas Open Source e tudo que existe no mundo SRE, sempre procurando se desenvolver e aprender constantemente(Lifelong learning), atuando em projetos inovadores!

Artigos: 28

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *