Introdução
Um processador precisa acessar relatórios por uma identidade temporária de tarefa. Você criará uma função, escolherá quem pode usá-la, testará sua permissão de leitura e revogará o acesso antes da limpeza.
Conclua primeiro Conceda privilégio mínimo a um leitor de relatórios para conhecer campos de políticas e limites de solicitações. Esta VM nova prepara os profiles default, worker e outsider. Use /home/labex/project e AWS View; nenhuma configuração de conta pessoal é necessária. Mantenha arquivos de credenciais, caches da CLI e respostas AssumeRole sem filtros privados.
Relação com as certificações
| Certificação | Tarefa do exame | Prática |
|---|---|---|
| Cloud Practitioner (CLF-C02) | Tarefa 2.3 | Confiança de funções IAM, sessões temporárias e acesso a recursos. |
| Solutions Architect – Associate (SAA-C03) | Tarefa 1.1 | Confiança de funções IAM, sessões temporárias e acesso a recursos. |
| Developer – Associate (DVA-C02) | Tarefa 2.1 | Confiança de funções IAM, sessões temporárias e acesso a recursos. |
| CloudOps Engineer – Associate (SOA-C03) | Tarefa 4.1 | Confiança de funções IAM, sessões temporárias e acesso a recursos. |
| Security – Specialty (SCS-C03) | Tarefa 4.1, Tarefa 4.2 | Prática dos fundamentos: Confiança de funções IAM, sessões temporárias e acesso a recursos; Políticas IAM, escopo de ações e recursos, e privilégio mínimo. |
| Data Engineer – Associate (DEA-C01) | Tarefa 4.1 | Prática dos fundamentos: Confiança de funções IAM, sessões temporárias e acesso a recursos. |
| DevOps Engineer – Professional (DOP-C02) | Tarefa 6.1 | Prática dos fundamentos: Confiança de funções IAM, sessões temporárias e acesso a recursos. |
| Solutions Architect – Professional (SAP-C02) | Tarefa 2.3 | Prática dos fundamentos: Confiança de funções IAM, sessões temporárias e acesso a recursos. |
Visão geral do laboratório

Defina a confiança e a permissão de leitura da função
Nesta etapa, você criará ReportReader com uma política de confiança que indica seu solicitante permitido. Uma política de confiança é uma política de recurso da função: seu Principal identifica quem pode assumir essa função. A política de permissões da função define separadamente o que uma sessão resultante pode fazer.
A tarefa precisa agora de uma sessão temporária de função. Use os campos conhecidos Action e Resource para seu trabalho no S3 e uma política de confiança separada para a entrada na função. Você testará essas duas decisões separadamente antes de revogar o acesso.
Uma função IAM define permissões e quem pode assumi-la. AWS Security Token Service (STS) emite credenciais temporárias para uma sessão de função, uma identidade diferente de quem a solicita.

Confirme o ARN do processador para compará-lo com a confiança inicial.
cd /home/labex/project
aws sts get-caller-identity --profile worker --query Arn --output text
Espere arn:aws:iam::123456789012:user/report-worker. Comece com uma confiança que indica apenas o operador. sts:AssumeRole solicita uma sessão de função; Principal é um ARN de identidade, não um nome de profile. O processador intencionalmente ainda não é confiável.
cat > trust.json <<'JSON'
{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::123456789012:user/iam03-operator"},"Action":"sts:AssumeRole"}]}
JSON
aws iam create-role \
--role-name ReportReader \
--assume-role-policy-document file://trust.json \
--query Role.Arn \
--output text
Espere o ARN terminando em role/ReportReader. Criar uma função não lhe dá permissões S3. Adicione uma política inline restrita: a função pode usar GetObject apenas para o relatório de hoje, não gravá-lo nem ler a folha de pagamento.
cat > role-policy.json <<'JSON'
{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":"s3:GetObject","Resource":"arn:aws:s3:::labex-iam03-reports/reports/today.txt"}]}
JSON
aws iam put-role-policy \
--role-name ReportReader \
--policy-name ReportRead \
--policy-document file://role-policy.json
aws iam get-role --role-name ReportReader --query Role.AssumeRolePolicyDocument
aws iam get-role-policy \
--role-name ReportReader \
--policy-name ReportRead \
--query PolicyDocument
Leia ambos os documentos. A confiança controla a entrada; as permissões da função controlam as operações da sessão. O processador ainda não é confiável. Teste essa barreira, selecionando apenas o campo seguro ARN retornado.
aws sts assume-role --profile worker --role-arn arn:aws:iam::123456789012:role/ReportReader --role-session-name report-run --query AssumedRoleUser.Arn --output text || true
Espere AccessDenied. Não remova o filtro de consulta: uma resposta bem-sucedida sem filtro inclui segredos.
Autorize o solicitante e use um profile de função
Nesta etapa, você permitirá que o processador solicite ReportReader, atualizará a confiança da função e usará um profile de função. Ambos os usuários de teste receberão a mesma permissão de solicitante; apenas o processador confiável deve obter a sessão de função.
Escreva uma política de solicitante cujo Resource seja o ARN exato da função e associe-a ao processador.
cat > assume-policy.json <<'JSON'
{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":"sts:AssumeRole","Resource":"arn:aws:iam::123456789012:role/ReportReader"}]}
JSON
aws iam put-user-policy \
--user-name report-worker \
--policy-name AssumeReportReader \
--policy-document file://assume-policy.json
Para isolar a verificação de confiança, dê ao usuário externo a mesma permissão restrita de solicitante. Este usuário descartável de comparação não está no documento de confiança.
aws iam put-user-policy \
--user-name outsider \
--policy-name AssumeReportReader \
--policy-document file://assume-policy.json
aws sts assume-role --profile worker --role-arn arn:aws:iam::123456789012:role/ReportReader --role-session-name before-trust --query AssumedRoleUser.Arn --output text || true
Espere AccessDenied: o Allow de sua identidade não prevalece sobre a confiança existente que indica apenas o operador. Substitua essa confiança pelo processador pretendido e atualize a função.
cat > trust.json <<'JSON'
{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::123456789012:user/report-worker"},"Action":"sts:AssumeRole"}]}
JSON
aws iam update-assume-role-policy \
--role-name ReportReader \
--policy-document file://trust.json
aws sts assume-role --profile outsider --role-arn arn:aws:iam::123456789012:role/ReportReader --role-session-name outsider-test --query AssumedRoleUser.Arn --output text || true
Espere AccessDenied mesmo que a política de identidade do usuário externo permita AssumeRole. Seu ARN não é confiável. Repita como processador:
aws sts assume-role \
--profile worker \
--role-arn arn:aws:iam::123456789012:role/ReportReader \
--role-session-name report-run \
--query AssumedRoleUser.Arn \
--output text
A confiança da função decidiu qual solicitante poderia entrar. Um Allow de identidade não pode contorná-la. Para confiança na mesma conta que indica diretamente um usuário, essa confiança pode conceder entrada sem um Allow de identidade separado; as concessões iguais aos solicitantes aqui ajudam a isolar a comparação de confiança.
Espere um ARN terminando em assumed-role/ReportReader/report-run. Um nome de sessão ajuda a distinguir usos da função nos registros de atividade. Credenciais de função expiram; o profile de função da CLI abaixo obtém credenciais temporárias para você.
Configure o profile report-role preparado para solicitar essas credenciais temporárias automaticamente. source_profile seleciona o solicitante, e role_arn seleciona a função de destino. Essas configurações não contêm valores secretos. A CLI armazena seu cache temporário com segurança; não o exiba.
aws configure set role_arn arn:aws:iam::123456789012:role/ReportReader --profile report-role
aws configure set source_profile worker --profile report-role
aws configure set role_session_name report-run --profile report-role
aws sts get-caller-identity --profile report-role --query Arn --output text
Espere novamente o ARN assumed-role. A CLI realiza a autenticação STS internamente para este profile. A própria identidade do processador tem permissão AssumeRole, não a permissão S3 da função.
aws s3api get-object --profile worker --bucket labex-iam03-reports --key reports/today.txt direct-worker.txt || true
Espere AccessDenied. Assumir uma função não associa suas permissões de volta ao usuário de origem.
Teste os limites de recursos e ações da sessão de função
Nesta etapa, você usará o profile de função para a tarefa de relatórios e confirmará que ele não pode realizar trabalho não relacionado. Uma solicitação AssumeRole bem-sucedida comprova apenas a entrada na função; solicitações efetivas ao S3 comprovam seu acesso efetivo.
aws s3api get-object \
--profile report-role \
--bucket labex-iam03-reports \
--key reports/today.txt today.txt
cat today.txt
Espere Daily orders: 145. Tente os dois recursos existentes fora do ARN exato de objeto da função.
aws s3api get-object --profile report-role --bucket labex-iam03-reports --key private/payroll.txt private-denied.txt || true
aws s3api get-object --profile report-role --bucket labex-iam03-reference --key reference.txt reference-denied.txt || true
Ambos devem retornar AccessDenied. Depois, tente sobrescrever o relatório de hoje com a substituição não aprovada fornecida. GetObject não autoriza PutObject.
aws s3api put-object --profile report-role --bucket labex-iam03-reports --key reports/today.txt --body upload.txt || true
aws s3api get-object \
--profile report-role \
--bucket labex-iam03-reports \
--key reports/today.txt today.txt
cat today.txt
Espere PutObject AccessDenied e Daily orders: 145 inalterado. Um arquivo local ausente, erro de credencial expirada ou serviço indisponível é outro diagnóstico e não comprova um limite de permissão. AWS View mostra a confiança armazenada, a política da função e as leituras efetivas da sessão de função; expanda o relatório de hoje para inspecionar seus bytes.

Revogue o acesso à função e faça a limpeza
Nesta etapa, você removerá a concessão de relatório da função antes de excluir seus dados. Remover uma permissão de função e impedir novas solicitações para assumi-la são ações separadas; limpar apenas um cache local não revoga permissões no servidor.
Remova ReportRead enquanto a função e o relatório ainda existem e repita a leitura pelo profile de função.
aws iam delete-role-policy --role-name ReportReader --policy-name ReportRead
aws s3api get-object --profile report-role --bucket labex-iam03-reports --key reports/today.txt revoked.txt || true
Espere AccessDenied. Remova ambas as concessões de solicitante e substitua a confiança direta no processador por confiança apenas no operador. Remover apenas um Allow de identidade não revoga uma concessão direta de confiança na mesma conta. Depois, teste que o processador não consegue obter uma sessão nova.
aws iam delete-user-policy --user-name report-worker --policy-name AssumeReportReader
aws iam delete-user-policy --user-name outsider --policy-name AssumeReportReader
cat > trust.json <<'JSON'
{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::123456789012:user/iam03-operator"},"Action":"sts:AssumeRole"}]}
JSON
aws iam update-assume-role-policy \
--role-name ReportReader \
--policy-document file://trust.json
aws sts assume-role --profile worker --role-arn arn:aws:iam::123456789012:role/ReportReader --role-session-name after-revocation --query AssumedRoleUser.Arn --output text || true
Espere AccessDenied enquanto a função ainda existe. Exclua a função apenas após essas verificações funcionais de revogação.
aws iam delete-role --role-name ReportReader
aws iam list-roles --query 'Roles[].RoleName'
aws s3api delete-object --bucket labex-iam03-reports --key reports/today.txt
aws s3api delete-object --bucket labex-iam03-reports --key private/payroll.txt
aws s3api list-objects-v2 --bucket labex-iam03-reports
Espere uma lista vazia de funções e KeyCount: 0 na resposta de objetos. Exclua o bucket vazio do exercício e confirme que a referência ainda existe com seus bytes originais.
aws s3api delete-bucket --bucket labex-iam03-reports
aws s3api list-buckets --query 'Buckets[].Name'
aws s3api get-object --bucket labex-iam03-reference --key reference.txt reference.txt
cat reference.txt
Resta apenas o bucket de referência com Platform reference: keep. Essas consultas bem-sucedidas comprovam exclusão e preservação. O ambiente descartável recupera as identidades preparadas e os arquivos de credenciais temporárias quando termina. Você removeu a função e as concessões de solicitante criadas para este exercício.
Resumo
Você separou a confiança da função de sua política de permissões, comprovou que uma concessão de solicitante sozinha não pode contornar a confiança e usou STS por um profile de função da CLI. A sessão de função podia ler apenas seu relatório e não podia gravar nem ler dados não relacionados. Você removeu as concessões de função e solicitante antes da limpeza delimitada. Prefira funções temporárias a chaves permanentes de cargas de trabalho e inspecione a identidade efetiva e solicitações permitidas e negadas ao diagnosticar acesso.
Para aprofundar o tema, consulte a documentação da AWS: Funções IAM, confiança e credenciais temporárias.



