Como posso obter dados para ajudar a solucionar erros de permissão de acesso negado ou não autorizados do IAM?
Eu recebo um erro de "access denied" ou "unauthorized" quando acesso um recurso da AWS. Quero dados para ajudar a solucionar esses erros de falha de chamada de API do AWS Identity and Access Management (AWS IAM).
Breve descrição
Use consultas do Amazon Athena ou a AWS Command Line Interface (AWS CLI) para obter logs de erros de falhas nas chamadas de API do IAM. Em seguida, siga as instruções para solucionar erros de acesso negado ou de operação não autorizada com uma política do IAM.
Resolução
Observação: se você receber mensagens de erro ao executar comandos da AWS CLI, verifique se está usando a versão mais recente da AWS CLI.
Use as consultas do Athena para solucionar falhas de chamadas de API do IAM pesquisando logs do CloudTrail
Observação: antes de começar, você deve ter uma trilha criada para fazer login em um bucket do Amazon Simple Storage Service (Amazon S3). Isso ocorre porque o Athena usa eventos registrados nos arquivos de log do AWS CloudTrail que são entregues a um bucket do Amazon S3 para essa trilha.
1. Siga as etapas na seção Criar a tabela do Athena em Como crio uma tabela do Amazon Athena de forma automática para pesquisar logs do AWS CloudTrail?
Observação: as tabelas do Athena que são criadas automaticamente estão na mesma região da AWS que seu bucket do Amazon S3.
2. Abra o console do Athena e clique no sinal de adição "+" para criar uma nova consulta.
3. Insira o exemplo de consulta a seguir e clique em Executar.
Neste exemplo de consulta, o formato de hora usa o formato básico ISO 8601 com a variável Z para UTC.
Observação: substitua your-arn pelos nomes do recurso da Amazon (ARN) do IAM dos seus recursos e your-table pelo nome da sua tabela.
SELECT from_iso8601_timestamp(eventTime) AS "Time", useridentity.arn AS "Identity ARN", eventID AS "Event ID", eventsource AS "Service", eventname AS "Action", errorCode AS "Error", errorMessage AS "Message" FROM your-table WHERE from_iso8601_timestamp(eventtime) >= from_iso8601_timestamp('2019-10-29T06:40:00Z') AND from_iso8601_timestamp(eventtime) < from_iso8601_timestamp('2019-10-29T06:55:00Z') AND userIdentity.arn = 'your-arn' AND eventType = 'AwsApiCall' AND errorCode is not null AND (lower(errorCode) LIKE '%accessdenied%' OR lower(errorCode) LIKE '%unauthorized%') ORDER BY eventTime desc
4. Este exemplo de saída de tabela lista erros de permissão para o ARN de identidade:
| Time | Event ID | Service | Action | Error | Message | |-----------------------------|--------------------------------------|--------------------------|--------------|--------------|----------------------------------------------------------------------------------------------------------------------| | 2019-10-29 06:52:45.000 UTC | 0406f0c1-47a8-4f71-8a94-18267b84042a | cloudtrail.amazonaws.com | LookupEvents | AccessDenied | User: arn:aws:iam::account:user/username is not authorized to perform: cloudtrail:LookupEvents with an explicit deny in an identity-based policy | | 2019-10-29 06:41:48.000 UTC | 14e5e77c-f682-45e1-8c88-12d15af293dd | cloudtrail.amazonaws.com | LookupEvents | AccessDenied | User: arn:aws:iam::account:user/username is not authorized to perform: cloudtrail:LookupEvents because no identity-based policy allows the cloudtrail:LookupEvents action |
Observação: as saídas de eventos do CloudTrail podem levar até 15 minutos para fornecer resultados.
5. Opcionalmente, obtenha erros para todos os usuários removendo esta linha da consulta de exemplo:
AND userIdentity.arn = 'your-arn'
6. Opcionalmente, obtenha todos os erros de um período de tempo selecionado removendo esta linha da consulta de exemplo:
AND (lower(errorCode) LIKE '%accessdenied%' OR lower(errorCode) LIKE '%unauthorized%')
Use a AWS CLI para solucionar falhas de chamadas de API de permissão do IAM
Observação: esse script da AWS CLI exige o processador JSON da linha de comandos jq. Para ver o tutorial e as instruções de download, consulte Formato de saída JSON. Para distribuições que usam o pacote yum, execute o seguinte comando:
$ sudo yum install jq
1. Execute o seguinte comando da AWS CLI:
Observação: substitua your-arn pelos ARNs do IAM dos seus recursos.
( echo "Time,Identity ARN,Event ID,Service,Action,Error,Message"; aws cloudtrail lookup-events --start-time "2019-10-29T06:40:00Z" --end-time "2019-10-29T06:55:00Z" --query "Events[*].CloudTrailEvent" --output text \ | jq -r ". | select(.userIdentity.arn == \"your-arn\" and .eventType == \"AwsApiCall\" and .errorCode != null and (.errorCode | ascii_downcase | (contains(\"accessdenied\") or contains(\"unauthorized\")))) | [.eventTime, .userIdentity.arn, .eventID, .eventSource, .eventName, .errorCode, .errorMessage] | @csv" ) | column -t -s'",'
Observação: a taxa de solicitações de pesquisa para o CloudTrail é limitada a duas solicitações por segundo, por conta, por região. Se esse limite for excedido, ocorrerá um erro de controle de utilização.
2. Este exemplo de saída de tabela lista erros de permissão do ARN de identidade do período especificado.
Observação: é possível pesquisar eventos que ocorreram em uma região nos últimos 90 dias.
Time Event ID Service Action Error Message 2019-10-29T06:52:45Z 0406f0c1-47a8-4f71-8a94-18267b84042a cloudtrail.amazonaws.com LookupEvents AccessDenied User: arn:aws:iam::account:user/username is not authorized to perform: cloudtrail:LookupEvents with an explicit deny in an identity-based policy 2019-10-29T06:41:48Z 14e5e77c-f682-45e1-8c88-12d15af293dd cloudtrail.amazonaws.com LookupEvents AccessDenied User: arn:aws:iam::account:user/username is not authorized to perform: cloudtrail:LookupEvents because no identity-based policy allows the cloudtrail:LookupEvents action
3. (Opcional) obtenha erros para todos os usuários removendo esta linha:
.userIdentity.arn == \"your-arn\" and
4. (Opcional) obtenha todos os erros do período de tempo selecionado removendo esta linha:
and (.errorCode | ascii_downcase | (contains(\"accessdenied\") or contains(\"unauthorized\")))
Solucione erros de não autorizado
O Athena e os exemplos de saída anteriores da AWS CLI são relevantes para as chamadas de API LookupEvents do CloudTrail.
As políticas do IAM que negam acesso porque contêm uma declaração Negar incluem uma frase específica na mensagem de erro para negações explícitas e implícitas. Os erros de negação explícita do IAM contêm a frase "with an explicit deny in a <type> policy". Os erros de negação implícita do IAM contêm a frase "because no <type> policy allows the <action> action".
A saída cloudtrail:LookupEvents with an explicit deny indica que uma política do IAM associada está incorreta.
Uma negação explícita pode ocorrer em qualquer um desses tipos de política. Por exemplo, políticas baseadas em identidade, políticas baseadas em recursos, limites de permissões, SCPs de organizações e políticas de sessão. Instruções de negação explícitas sempre substituem instruções de permissão. A negação explícita existe na política baseada na identidade dos usuários do IAM.
A saída cloudtrail:LookupEvents because no identity-based policy allows indica que a política baseada em identidade não permite essa ação de API, resultando em uma negação implícita. A política baseada em identidade não tem uma declaração de permissão explícita para a ação cloudtrail:LookupEvents da API.
Os tipos de política avaliados pela AWS para estabelecer o acesso são:
- SCPs do AWS Organizations
- Políticas baseadas em recursos
- Limites de permissões do IAM
- Políticas de sessão
- Políticas baseadas em identidade
Para obter mais informações sobre como as políticas do IAM são avaliadas e gerenciadas, consulte Lógica da avaliação de política e Gerenciar políticas do IAM.
Informações relacionadas
Políticas e permissões no AWS Identity and Access Management
Troubleshoot IAM policies (Solucionar problemas de políticas do IAM)
- Idioma
- Português

Conteúdo relevante
- Resposta aceita
feita há 9 meses
- Resposta aceita
feita há 9 meses
feita há um ano