Como posso obter dados para ajudar na solução de problemas de permissão de acesso negado ou erros não autorizados do IAM?

6 minuto de leitura
0

Estou tentando acessar um recurso da AWS e recebi um erro de “acesso negado” ou “não autorizado”. Como posso obter dados para ajudar na solução desses erros de falha de chamada de API do AWS Identity and Access Management (IAM)?

Breve descrição

Você pode usar consultas do Amazon Athena ou a AWS Command Line Interface (AWS CLI) para obter logs de erros de falhas nas chamadas da API 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 erros ao executar comandos da AWS CLI, certifique-se de estar utilizando a versão mais recente da AWS CLI.

Opção 1: Use as consultas do Athena para solucionar falhas de chamadas da API IAM pesquisando os logs do CloudTrail

Observação: antes de começar, você deve criar uma trilha 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 de Como faço para criar tabelas automaticamente no Athena para pesquisar nos 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 escolha o sinal de adição “+” para criar uma nova consula.

3.    Insira o exemplo de consulta a seguir e escolha 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 pelo Amazon Resource Names (ARN) do IAM para seus recursos e your-table pelo nome da 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 essa linha da consulta de exemplo:

AND userIdentity.arn = 'your-arn'

6.    Opcionalmente, obtenha todos os erros de um período selecionado removendo esta linha da consulta de exemplo:

AND (lower(errorCode) LIKE '%accessdenied%' OR lower(errorCode) LIKE '%unauthorized%')

Opção 2: Use o AWS CLI para solucionar falhas de chamadas da API de permissão do IAM

Observação: esse script da AWS CLI requer o processador JSON da linha de comando 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 para 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 limitação.

2.    Este exemplo de saída de tabela lista erros de permissão para o ARN de identidade do período especificado.

Observação: você pode 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 selecionado removendo esta linha:

and (.errorCode | ascii_downcase | (contains(\"accessdenied\") or contains(\"unauthorized\")))

Solucionar erros não autorizados

O Athena e os exemplos anteriores da AWS CLI são relevantes para as chamadas de API do CloudTrail LookupEvents.

As políticas do IAM que negam acesso porque contêm uma declaração Deny 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 “com uma negação explícita em uma <type> política”. Os erros de negação implícita do IAM contêm a frase “porque nenhuma <type> política permite a <action> ação”.

O cloudTrail:LookupEvents com uma saída de negação explícita 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. Declarações de negação explícitas sempre substituem declarações de permissão. A negação explícita existe na política baseada na identidade dos usuários do IAM.

O cloudTrail:LookupEvents porque nenhuma política baseada em identidade permite a saída 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 da API cloudTrail:LookupEvents.

Os tipos de política avaliados pela AWS para estabelecer o acesso são:

Para informações adicionais sobre como as políticas do IAM são avaliadas e gerenciadas, consulte Lógica de avaliação de políticas e Gerenciamento de políticas do IAM.


Informações relacionadas

Políticas e permissões no IAM

Solucionar problemas de políticas do IAM

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos