<h2>AWS Organizations: Fundamentos e Arquitetura Multi-conta</h2>
<p>AWS Organizations é um serviço que permite gerenciar múltiplas contas AWS de forma centralizada. Diferente de trabalhar com contas isoladas, uma estratégia multi-conta oferece segregação de ambientes, melhor controle de custos, conformidade regulatória e isolamento de segurança. Cada conta funciona como um silos independente, mas você as governa através de uma conta raiz (Management Account).</p>
<p>A estrutura básica envolve a criação de uma organização, depois adicionar contas membro e organizá-las em Unidades Organizacionais (OUs). Você pode aplicar políticas em nível de organização que se propagam automaticamente para todas as contas filhas. Isso evita retrabalho e garante conformidade consistente.</p>
<h3>Estrutura Organizacional</h3>
<p>A hierarquia começa com a <strong>Raiz</strong> (Root), que contém tudo. Abaixo dela, você cria <strong>OUs</strong> (Organizational Units) para agrupar contas por função: desenvolvimento, produção, segurança, financeiro, etc. Cada OU pode ter políticas específicas aplicadas, criando uma governança em camadas.</p>
<pre><code class="language-bash"># Exemplo de estrutura de árvore
Root
├── OU: Produção
│ ├── Conta: Production-App-1
│ └── Conta: Production-App-2
├── OU: Desenvolvimento
│ ├── Conta: Dev-App-1
│ └── Conta: Dev-App-2
└── OU: Segurança
└── Conta: Security-Audit</code></pre>
<h3>Criando uma Organização com AWS CLI</h3>
<pre><code class="language-bash"># Criar organização
aws organizations create-organization \
--feature-set ALL
Criar OU sob a raiz
aws organizations create-organizational-unit \
--parent-id r-xxxx \
--name "Producao"
Criar conta
aws organizations create-account \
--account-name "Production-App-1" \
--email "prod-app-1@empresa.com"
Mover conta para OU
aws organizations move-account \
--account-id 123456789012 \
--source-parent-id r-xxxx \
--destination-parent-id ou-xxxx</code></pre>
<h2>Control Tower: Governança Automatizada</h2>
<p>AWS Control Tower é uma solução construída <strong>sobre</strong> Organizations que automatiza a criação de contas seguras e conformes. Enquanto Organizations oferece a infraestrutura, Control Tower adiciona guardrails (políticas automáticas), blueprints de conta pré-configurada e um painel centralizado de governança.</p>
<p>Control Tower cria automaticamente duas OUs: <strong>Security</strong> (para auditoria) e <strong>Sandbox</strong> (para experimentação). Você também recebe uma conta de Logging centralizada e uma de Audit. Tudo isso é configurado automaticamente com detecção de desvios em tempo real.</p>
<h3>Guardrails: Proteção Automática</h3>
<p>Guardrails são políticas de prevenção ou detecção. Um guardrail <strong>preventivo</strong> (como SCP) impede ações não conformes. Um guardrail <strong>detectivo</strong> (como Config Rules) identifica recursos não conformes e alerta você. Cada guardrail tem um nível: <strong>Foundational</strong> (essencial), <strong>Strongly Recommended</strong> (recomendado) ou <strong>Elective</strong> (opcional).</p>
<pre><code class="language-python"># Exemplo: Script Python para verificar guardrails ativos
import boto3
ct = boto3.client('controltower')
Listar guardrails habilitados
response = ct.list_enabled_controls()
for control in response['enabledControls']:
print(f"Controle: {control['controlIdentifier']}")
print(f"Status: {control['statusSummary']['status']}")
Habilitar um guardrail específico
ct.enable_control(
targetIdentifier='ou-prod-xxxx',
controlIdentifier='arn:aws:controltower:us-east-1::control/...'
)</code></pre>
<h3>Exemplo Prático: Landing Zone</h3>
<p>Quando você configura Control Tower pela primeira vez, ele cria uma <strong>Landing Zone</strong> — um ambiente base seguro com buckets S3 para logs, CloudTrail centralizado, Config Rules, e permissões de auditoria pré-configuradas.</p>
<pre><code class="language-bash"># Verificar Landing Zone status via CLI
aws controltower get-landing-zone-status
Resultado (exemplo)
{
"landingZoneStatus": "ACTIVE",
"latestAvailableVersion": "3.3",
"version": "3.3"
}</code></pre>
<h2>Estratégia Multi-conta na Prática</h2>
<p>Uma boa estratégia multi-conta reduz risco, isola custos e facilita compliance. A segregação típica separa <strong>Produção</strong> (isolada, acesso restrito), <strong>Desenvolvimento</strong> (mais permissivo), <strong>Segurança</strong> (auditoria centralizada) e <strong>Infraestrutura Compartilhada</strong> (recursos comuns como VPN, DNS).</p>
<p>O acesso entre contas funciona via <strong>Cross-Account Roles</strong>. Uma aplicação em produção pode assumir uma role em outra conta para acessar um serviço específico. Isso é mais seguro que compartilhar credenciais de longa vida.</p>
<h3>Cross-Account Access com IAM Roles</h3>
<pre><code class="language-json">{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111111111111:root"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "unique-external-id-123"
}
}
}
]
}</code></pre>
<p>A role acima, criada na conta <strong>222222222222</strong> (produção), permite que a conta <strong>111111111111</strong> (desenvolvimento) assuma seus privilégios. Você depois anexa uma política à role para definir o que ela pode fazer.</p>
<pre><code class="language-python"># Script para assumir role cross-account
import boto3
sts = boto3.client('sts')
response = sts.assume_role(
RoleArn='arn:aws:iam::222222222222:role/CrossAccountRole',
RoleSessionName='dev-session',
ExternalId='unique-external-id-123'
)
Agora use as credenciais temporárias
credentials = response['Credentials']
s3_client = boto3.client(
's3',
aws_access_key_id=credentials['AccessKeyId'],
aws_secret_access_key=credentials['SecretAccessKey'],
aws_session_token=credentials['SessionToken']
)
Listar objetos no bucket de produção
s3_client.list_objects_v2(Bucket='prod-data-bucket')</code></pre>
<h3>Billing Consolidado</h3>
<p>Organizations oferece <strong>Consolidated Billing</strong>, agregando custos de todas as contas sob uma fatura única. Você obtém volume discounts em todos os serviços, reduzindo custos operacionais.</p>
<pre><code class="language-bash"># Listar contas e seus custos (via AWS Cost Explorer)
aws ce get-cost-and-usage \
--time-period Start=2024-01-01,End=2024-01-31 \
--granularity MONTHLY \
--metrics BlendedCost \
--group-by Type=DIMENSION,Key=LINKED_ACCOUNT</code></pre>
<h2>Conclusão</h2>
<p>Multi-account strategy com AWS Organizations resolve três problemas críticos: <strong>governança centralizada</strong> (uma só verdade), <strong>isolamento de segurança</strong> (falha em uma conta não afeta outra) e <strong>otimização de custos</strong> (controle granular por departamento). Control Tower acelera isso oferecendo guardrails automáticos e um framework pronto.</p>
<p>O aprendizado principal: não trabalhe com contas isoladas em produção. Invista tempo inicial em organizar contas por ambiente e função, configure Control Tower para automatizar conformidade, e use cross-account roles para acesso seguro. Isso não é overhead — é fundação.</p>
<h2>Referências</h2>
<ul>
<li><a href="https://docs.aws.amazon.com/organizations/" target="_blank" rel="noopener noreferrer">AWS Organizations Documentation</a></li>
<li><a href="https://docs.aws.amazon.com/controltower/" target="_blank" rel="noopener noreferrer">AWS Control Tower User Guide</a></li>
<li><a href="https://docs.aws.amazon.com/whitepapers/latest/organizing-your-aws-environment/" target="_blank" rel="noopener noreferrer">AWS Multi-Account Security Strategy</a></li>
<li><a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account.html" target="_blank" rel="noopener noreferrer">IAM Cross-Account Access Best Practices</a></li>
<li><a href="https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/consolidated-billing.html" target="_blank" rel="noopener noreferrer">AWS Organizations Pricing and Billing</a></li>
</ul>