opção

Gerencie o AWS Identity and Access Management (IAM) para usuários, funções, políticas e permissões. Crie políticas do IAM, configure o acesso entre contas, defina funções de serviço, resolva erros de permissão e implemente a segurança baseada no princípio do privilégio mínimo.

...Expandir tudo
34
Tempo atualizado 21 de Setembro de 2026

AWS IAM

O AWS Identity and Access Management (IAM) permite o controle seguro de acesso aos serviços e recursos da AWS. O IAM é fundamental para a segurança da AWS — todas as chamadas à API da AWS são autenticadas e autorizadas por meio do IAM.

Índice

  • Conceitos básicos
  • Padrões comuns
  • Referência da CLI
  • Melhores práticas
  • Solução de problemas
  • Referências

Conceitos básicos

Entidades principais

Entidades que podem fazer solicitações à AWS: usuários do IAM, funções, usuários federados e aplicativos.

Políticas

Documentos JSON que definem permissões. Tipos:

  • Baseadas em identidade: associadas a usuários, grupos ou funções
  • Baseadas em recursos: associadas a recursos (buckets do S3, filas do SQS)
  • Limites de permissão: o máximo de permissões que uma identidade pode ter
  • Políticas de controle de serviço (SCPs): Limites para toda a organização

Funções

Identidades com permissões que podem ser assumidas por entidades confiáveis. Sem credenciais permanentes — utiliza tokens de segurança temporários.

Relações de confiança

Definem quais entidades podem assumir uma função. Configuradas por meio da política de confiança da função.

Padrões comuns

Criar uma função de serviço para o Lambda

AWS CLI:

# Criar a política de confiança
cat > trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": { "Service": "lambda.amazonaws.com" },
      "Action": "sts:AssumeRole"
    }
  ]
}
EOF

# Criar a função
aws iam create-role \
  --role-name MyLambdaRole \
  --assume-role-policy-document file://trust-policy.json

# Anexar uma política gerenciada
aws iam attach-role-policy \
  --role-name MyLambdaRole \
  --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

boto3:

import boto3
import json

iam = boto3.client('iam')

trust_policy = {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {"Service": "lambda.amazonaws.com"},
            "Action": "sts:AssumeRole"
        }
    ]
}

# Criar funçãoiam.create_role(
    RoleName='MyLambdaRole',
    AssumeRolePolicyDocument=json.dumps(trust_policy)
)

# Anexar política gerenciada
iam.attach_role_policy(
    RoleName='MyLambdaRole',
    PolicyArn='arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole'
)

Criar política personalizada com privilégios mínimos

cat > policy.json << 'EOF'
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:GetItem",
        "dynamodb:PutItem",
        "dynamodb:Query"
      ],
      "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/MyTable"
    }
  ]
}
Fim do arquivo

aws iam create-policy \
  --policy-name MyDynamoDBPolicy \
  --policy-document file://policy.json

Assunção de função entre contas

# Na Conta B (conta confiável), crie uma função com confiança para a Conta A
cat > cross-account-trust.json << 'EOF'
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": { "AWS": "arn:aws:iam::111111111111:root" },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": { "sts:ExternalId": "unique-external-id" }
      }
    }
  ]
}
EOF

# Da conta A, assumir a função
aws sts assume-role \
  --role-arn arn:aws:iam::222222222222:role/CrossAccountRole \
  --role-session-name MySession \
  --external-id unique-external-id

Referência da CLI

Comandos essenciais

Comando Descrição
aws iam create-role Cria uma nova função do IAM
aws iam create-policy Criar uma política gerenciada pelo cliente
aws iam attach-role-policy Anexar uma política gerenciada a uma função
aws iam put-role-policy Adicionar uma política embutida a uma função
aws iam get-role Obter detalhes da função
aws iam list-roles Listar todas as funções
aws iam simulate-principal-policy Testar permissões da política
aws sts assume-role Assumir uma função e obter credenciais temporárias
aws sts get-caller-identity Obter a identidade atual

Sinalizadores úteis

  • --query: Filtrar a saída com JMESPath
  • --output table: Saída legível por humanos
  • --no-cli-pager: Desativa o paginador para scripts

Práticas recomendadas

Segurança

  • Nunca use a conta root para tarefas diárias
  • Habilite a autenticação multifatorial (MFA) para todos os usuários humanos
  • Use funções em vez de chaves de acesso de longo prazo
  • Aplique o princípio do privilégio mínimo — conceda apenas as permissões necessárias
  • Use condições para restringir o acesso por IP, horário ou MFA
  • Alterne as credenciais regularmente
  • Utilize limites de permissão para a administração delegada

Projeto de políticas

  • Comece com políticas gerenciadas pela AWS e personalize-as conforme necessário
  • Use variáveis de política (${aws:username}) para políticas dinâmicas
  • Dê preferência a negações explícitas para ações confidenciais
  • Agrupe permissões relacionadas de forma lógica

Monitoramento

  • Habilite o CloudTrail para auditoria de API
  • Use o Access Analyzer dIAM para identificar políticas excessivamente permissivas
  • Analise os relatórios de credenciais regularmente
  • Configure alertas para o uso da conta root

Solução de problemas

Erros de acesso negado

Sintoma: AccessDeniedException ou UnauthorizedAccess

Etapas de depuração:

  1. Verifique a identidade: aws sts get-caller-identity
  2. Verifique as políticas associadas: ` aws iam list-attached-role-policies --role-name MyRole`
  3. Simule a ação:
    aws iam simulate-principal-policy \
      --policy-source-arn arn:aws:iam::123456789012:role/MyRole \
      --action-names dynamodb:GetItem \
      --resource-arns arn:aws:dynamodb:us-east-1:123456789012:table/MyTable
    
    
  4. Verifique se há negações explícitas nas SCPs ou nos limites de permissão
  5. Verifique se as políticas baseadas em recursos permitem que o principal

Não é possível assumir a função

Sintoma: AccessDenied ao chamar AssumeRole

Causas:

  • A política de confiança não inclui o principal chamador
  • Falta a permissão sts:AssumeRole no chamador
  • Incompatibilidade de ExternalId (para funções entre contas)
  • A duração da sessão excede o máximo

Solução: Revise e atualize a relação de confiança da função.

Limites de tamanho da política

  • Política gerenciada: 6.144 caracteres
  • Política embutida: 2.048 caracteres (usuário), 10.240 caracteres (função/grupo)
  • Política de confiança: 2.048 caracteres

Solução: Use várias políticas, faça referência a recursos por prefixo/caractere curinga ou utilize controle de acesso baseado em tags.

Referências

  • IAM Guia do usuário
  • IAM Referência da API
  • IAM Referência da CLI
  • Referência de políticas
  • boto3 IAM
Ver no GitHub
---
name: iam
description: Manage AWS Identity and Access Management for users, roles, policies, and permissions. Create IAM policies, configure cross-account access, set up service roles, troubleshoot permission errors, and enforce least-privilege security.
---

# AWS IAM

AWS Identity and Access Management (IAM) enables secure access control to AWS services and resources. IAM is foundational to AWS security—every AWS API call is authenticated and authorized through IAM.

## Table of Contents

- [Core Concepts](#core-concepts)
- [Common Patterns](#common-patterns)
- [CLI Reference](#cli-reference)
- [Best Practices](#best-practices)
- [Troubleshooting](#troubleshooting)
- [References](#references)

## Core Concepts

### Principals

Entities that can make requests to AWS: IAM users, roles, federated users, and applications.

### Policies

JSON documents defining permissions. Types:
- **Identity-based**: Attached to users, groups, or roles
- **Resource-based**: Attached to resources (S3 buckets, SQS queues)
- **Permission boundaries**: Maximum permissions an identity can have
- **Service control policies (SCPs)**: Organization-wide limits

### Roles

Identities with permissions that can be assumed by trusted entities. No permanent credentials—uses temporary security tokens.

### Trust Relationships

Define which principals can assume a role. Configured via the role's trust policy.

## Common Patterns

### Create a Service Role for Lambda

**AWS CLI:**

```bash
# Create the trust policy
cat > trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": { "Service": "lambda.amazonaws.com" },
      "Action": "sts:AssumeRole"
    }
  ]
}
EOF

# Create the role
aws iam create-role \
  --role-name MyLambdaRole \
  --assume-role-policy-document file://trust-policy.json

# Attach a managed policy
aws iam attach-role-policy \
  --role-name MyLambdaRole \
  --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
```

**boto3:**

```python
import boto3
import json

iam = boto3.client('iam')

trust_policy = {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {"Service": "lambda.amazonaws.com"},
            "Action": "sts:AssumeRole"
        }
    ]
}

# Create role
iam.create_role(
    RoleName='MyLambdaRole',
    AssumeRolePolicyDocument=json.dumps(trust_policy)
)

# Attach managed policy
iam.attach_role_policy(
    RoleName='MyLambdaRole',
    PolicyArn='arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole'
)
```

### Create Custom Policy with Least Privilege

```bash
cat > policy.json << 'EOF'
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:GetItem",
        "dynamodb:PutItem",
        "dynamodb:Query"
      ],
      "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/MyTable"
    }
  ]
}
EOF

aws iam create-policy \
  --policy-name MyDynamoDBPolicy \
  --policy-document file://policy.json
```

### Cross-Account Role Assumption

```bash
# In Account B (trusted account), create role with trust for Account A
cat > cross-account-trust.json << 'EOF'
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": { "AWS": "arn:aws:iam::111111111111:root" },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": { "sts:ExternalId": "unique-external-id" }
      }
    }
  ]
}
EOF

# From Account A, assume the role
aws sts assume-role \
  --role-arn arn:aws:iam::222222222222:role/CrossAccountRole \
  --role-session-name MySession \
  --external-id unique-external-id
```

## CLI Reference

### Essential Commands

| Command | Description |
|---------|-------------|
| `aws iam create-role` | Create a new IAM role |
| `aws iam create-policy` | Create a customer managed policy |
| `aws iam attach-role-policy` | Attach a managed policy to a role |
| `aws iam put-role-policy` | Add an inline policy to a role |
| `aws iam get-role` | Get role details |
| `aws iam list-roles` | List all roles |
| `aws iam simulate-principal-policy` | Test policy permissions |
| `aws sts assume-role` | Assume a role and get temporary credentials |
| `aws sts get-caller-identity` | Get current identity |

### Useful Flags

- `--query`: Filter output with JMESPath
- `--output table`: Human-readable output
- `--no-cli-pager`: Disable pager for scripting

## Best Practices

### Security

- **Never use root account** for daily tasks
- **Enable MFA** for all human users
- **Use roles** instead of long-term access keys
- **Apply least privilege** — grant only required permissions
- **Use conditions** to restrict access by IP, time, or MFA
- **Rotate credentials** regularly
- **Use permission boundaries** for delegated administration

### Policy Design

- Start with AWS managed policies, customize as needed
- Use policy variables (`${aws:username}`) for dynamic policies
- Prefer explicit denies for sensitive actions
- Group related permissions logically

### Monitoring

- Enable **CloudTrail** for API auditing
- Use **IAM Access Analyzer** to identify overly permissive policies
- Review **credential reports** regularly
- Set up alerts for root account usage

## Troubleshooting

### Access Denied Errors

**Symptom:** `AccessDeniedException` or `UnauthorizedAccess`

**Debug steps:**
1. Verify identity: `aws sts get-caller-identity`
2. Check attached policies: `aws iam list-attached-role-policies --role-name MyRole`
3. Simulate the action:
   ```bash
   aws iam simulate-principal-policy \
     --policy-source-arn arn:aws:iam::123456789012:role/MyRole \
     --action-names dynamodb:GetItem \
     --resource-arns arn:aws:dynamodb:us-east-1:123456789012:table/MyTable
   ```
4. Check for explicit denies in SCPs or permission boundaries
5. Verify resource-based policies allow the principal

### Role Cannot Be Assumed

**Symptom:** `AccessDenied` when calling `AssumeRole`

**Causes:**
- Trust policy doesn't include the calling principal
- Missing `sts:AssumeRole` permission on the caller
- ExternalId mismatch (for cross-account roles)
- Session duration exceeds maximum

**Fix:** Review and update the role's trust relationship.

### Policy Size Limits

- Managed policy: 6,144 characters
- Inline policy: 2,048 characters (user), 10,240 characters (role/group)
- Trust policy: 2,048 characters

**Solution:** Use multiple policies, reference resources by prefix/wildcard, or use tags-based access control.

## References

- [IAM User Guide](https://docs.aws.amazon.com/IAM/latest/UserGuide/)
- [IAM API Reference](https://docs.aws.amazon.com/IAM/latest/APIReference/)
- [IAM CLI Reference](https://docs.aws.amazon.com/cli/latest/reference/iam/)
- [Policy Reference](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)
- [boto3 IAM](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/iam.html)

Todos os arquivos

3 arquivos
SKILL.md 6.9k
Ver

Instalar iam

Baixe e descompacte os arquivos de habilidades no diretório .claude/skills/.

Baixar ZIP

Clone o repositório e copie os arquivos da habilidade para o seu projeto.

git clone https://github.com/itsmostafa/aws-agent-skills/tree/main/skills/iam # Copy SKILL.md to your .claude/skills/ directory

Copiar Copiar
Configuração rápida: Copie a pasta da habilidade para .claude/skills/ O Claude detectará e utilizará automaticamente a habilidade

Habilidades relacionadas

gmgn-portfolio
Tempo atualizado 1 de Julho de 2026
device-integrity
Tempo atualizado 29 de Junho de 2026
zeroize-audit
Tempo atualizado 1 de Julho de 2026
flutter-use-http-package
Tempo atualizado 30 de Junho de 2026
OR