Como solucionar erros de acesso negado ou operação não autorizada em uma política do IAM?

10 minuto de leitura
0

Estou tentando realizar uma ação em um recurso da AWS e recebi um erro de "acesso negado" ou "operação não autorizada". Como posso solucionar esses problemas de permissão?

Breve descrição

Solucionar problemas com as políticas do AWS Identity and Access Management (IAM):

Resolução

Identificar o chamador da API e entender as mensagens de erro

Importante:

Certifique-se de que as chamadas de API sejam feitas em nome da entidade do IAM correta antes de analisar as políticas do IAM. Se a mensagem de erro não incluir as informações do chamador, siga estas etapas para identificar o chamador da API:

  1. Abra o Console de Gerenciamento da AWS.
  2. No canto superior direito da página, escolha a seta ao lado das informações da conta.
  3. Se estiver conectado como um perfil do IAM, consulte "Atualmente ativo como" para o nome do perfil assumido e "ID da conta" para o ID da conta.
  4. Se estiver conectado como usuário federado, consulte "Usuário federado" para obter o nome do perfil de federação e o nome da sessão do perfil.

-ou-

Use o comando get-caller-identity da AWS CLI para identificar o chamador da API. Também é possível usar o comando da AWS CLI com o sinalizador --debug para identificar a origem das credenciais a partir da saída, semelhante ao seguinte:

2018-03-13 16:23:57,570 - MainThread - botocore.credentials - INFO - Found credentials in shared credentials file: ~/.aws/credentials

Verificar as permissões de políticas do IAM

Verifique se as permissões necessárias foram concedidas ao chamador da API, conferindo as políticas do IAM anexadas. Para mais informações, consulte Determinar se uma solicitação é permitida ou negada em uma conta.

Avaliar SCPs de organizações da AWS

Se a conta da AWS fizer parte de uma organização da AWS, SCPs poderão ser aplicadas no nível hierárquico para permitir ou negar ações. As permissões de SCP são herdadas por todas as entidades do IAM na conta da AWS. Certifique-se de que o chamador da API não seja explicitamente negado na SCP.

Certifique-se de que a API que está sendo chamada não seja explicitamente negada em uma política de SCP organizacional que afeta o chamador

Analisar políticas baseadas em identidade e baseadas em recursos

Verifique se há uma declaração de permissão explícita na política baseada em identidade de entidades do IAM para o chamador da API. Em seguida, certifique-se de que a API ofereça suporte a permissões em nível de recurso. Se o chamador da API não oferecer suporte a permissões em nível de recurso, verifique se o curinga "*" está especificado no elemento de recurso da declaração de política do IAM.

Você pode anexar políticas baseadas em recursos a um recurso dentro do serviço da AWS para fornecer acesso. Para mais informações, consulte Políticas baseadas em identidade e políticas baseadas em recursos.

Para visualizar o resumo da política do IAM:

  1. Abra o console do IAM.
  2. No painel de navegação, selecione Políticas.
  3. Escolha a seta ao lado do nome da política para expandir a visualização dos detalhes da política.

No exemplo a seguir, a política não funciona porque nem todas as ações de API do Amazon Elastic Compute Cloud (Amazon EC2) oferecem suporte a permissões em nível de recurso:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SorryThisIsNotGoingToWorkAsExpected",
            "Effect": "Allow",
            "Action": ["ec2:*"],
            "Resource": "arn:aws:ec2:us-east-1:accountid:instance/*"
        }
    ]
}

Os usuários do IAM que tentarem iniciar uma instância do Amazon EC2 na região us-east-1 com o comando run-instances da AWS CLI receberão uma mensagem de erro semelhante à seguinte:

"An error occurred (UnauthorizedOperation) when calling the RunInstances operation: You are not authorized to perform this operation. Encoded authorization failure message:…"

Para resolver isso, altere o recurso para um curinga "*". Isso ocorre porque o Amazon EC2 apenas oferece suporte a permissões parciais em nível de recurso.

Para decodificar a mensagem de falha de autorização e obter mais detalhes sobre o motivo dessa falha, use a ação da API DecodeAuthorizationMessage, semelhante à seguinte:

$ aws sts decode-authorization-message --encoded-message <encoded-message-from-the-error>

Verificar limites de permissões

Se a entidade do IAM tiver um limite de permissão anexado, esse limite definirá as permissões máximas que a entidade tem.

Avaliar políticas de sessão

Se o chamador da API for um perfil do IAM ou um usuário federado, as políticas de sessão serão aprovadas durante a sessão. As permissões para uma sessão são a interseção das políticas baseadas em identidade da entidade do IAM usada para criar a sessão e das políticas de sessão. Certifique-se de que a chamada da API exista na política e na entidade do IAM.

Garantir que as chaves de condição na política sejam compatíveis com as APIs

Chaves de condição da AWS podem ser usadas para comparar elementos em uma solicitação de API feita à AWS com valores de chave especificados em uma política do IAM. As chaves de condição podem ser uma chave de condição global ou definidas pelo serviço da AWS. Chaves de condição específicas do serviço da AWS apenas podem ser usadas dentro desse serviço (por exemplo, condições do EC2 em ações de API do EC2). Para obter mais informações, consulte Ações, recursos e chaves de contexto de condição para serviços da AWS.

Um elemento de condição pode conter várias condições e, dentro de cada bloco de condições, pode conter vários pares de chave/valor. Para obter mais informações, consulte Criar uma condição com várias chaves ou valores.

Neste exemplo de política, o elemento de condição será correspondido se uma solicitação da API do IAM for chamada pelo administrador de usuários do IAM e o endereço IP de origem for 1.1.1.0/24 ou 2.2.2.0/24.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iam:*",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:username": "admin"
        },
        "IpAddress": {
          "aws:SourceIp": [
            "1.1.1.0/24",
            "2.2.2.0/24"
          ]
        }
      }
    }
  ]
}

Erros de política do IAM e exemplos de solução de problemas

Veja os exemplos a seguir para identificar a mensagem de erro, o chamador da API, a API e os recursos que estão sendo chamados:

Exemplo de mensagem de erroChamador de APIAPIRecursosQuando
A: "Ocorreu um erro (UnauthorizedOperation) ao chamar a operação DescribeInstances: Você não tem autorização para executar esta operação."desconhecidoDescribeInstancesdesconhecidohora em que o erro ocorre
B: "Ocorreu um erro (AccessDenied) ao chamar a operação AssumeRole: Usuário: arn:aws:iam: :123456789012:user/test não está autorizado a executar: sts:assumeRole no recurso: arn:aws:iam::123456789012:role/EC2-FullAccess"arn:aws:iam::123456789012:user/testAssumeRolearn:aws:iam::123456789012:role/EC2-FullAccesshora em que o erro ocorre
C: "Ocorreu um erro (AccessDenied) ao chamar a operação GetSessionToken: Não é possível chamar GetSessionToken com as credenciais da sessão"desconhecidoGetSessionTokendesconhecidohora em que o erro ocorre
D: "Ocorreu um erro (UnauthorizedOperation) ao chamar a operação AssociateIamInstanceProfile: Você não tem autorização para realizar essa operação. Mensagem de falha de autorização codificada: ...."desconhecidoAssociateIamInstanceProfiledesconhecidohora em que o erro ocorre

Usando esse método de avaliação, você pode identificar a causa das mensagens de erro que pode receber por problemas de permissão para diferentes serviços da AWS. Para obter mais detalhes, consulte as seguintes mensagens de erro e as etapas de solução de problemas:

Exemplo de mensagem de erro A:

Essa mensagem de erro indica que você não tem permissão para chamar a API DescribeInstances.

Para resolver esse erro, siga estas etapas:

  1. Identifique o chamador da API.
  2. Confirme se a ação da API ec2:DescribeInstances não está incluída em nenhuma declaração de negação.
  3. Confirme se a ação da API ec2:DescribeInstances está incluída nas instruções de permissão.
  4. Confirme se não há recursos especificados para essa ação da API. Observação: essa ação de API não oferece suporte a permissões em nível de recurso.
  5. Confirme se todas as condições do IAM especificadas na instrução de permissão têm suporte pela ação DescribeInstances e se as condições foram atendidas.

Para mais informações, consulte DescribeInstanceStatus.

Exemplo de mensagem de erro B:

Essa mensagem de erro inclui o nome da API, o chamador da API e o recurso de destino. Certifique-se de que a identidade do IAM que chamou a API tenha o acesso correto aos recursos. Analise as políticas do IAM usando o método de avaliação anterior.

Para resolver esse erro, siga estas etapas para confirmar a política de confiança do perfil do IAM: EC2-FullAccess:

  1. Confirme se arn:aws:iam::123456789012:user/test ou arn:aws:iam::123456789012:root não está incluído em nenhuma declaração de negação da política de confiança.
  2. Confirme se arn:aws:iam::123456789012:user/test ou arn:aws:iam::123456789012:root está incluído na declaração de permissão da política de confiança.
  3. Confirme se todas as condições do IAM especificadas nessa instrução de permissão são compatíveis com a ação da API sts:AssumeRole e são correspondidas.

Siga estas etapas para confirmar as políticas do IAM anexadas ao chamador da API (arn:aws:iam::123456789012:user/test):

  1. Confirme que arn:aws:iam::123456789012:role/EC2-FullAccess não está incluído em nenhuma declaração de negação com a ação da API sts:AssumeRole.
  2. Se arn:aws:iam::123456789012:root estiver na declaração de permissão da política de confiança, confirme se arn:aws:iam::123456789012:role/EC2-FullAccess está incluído na declaração de permissão das políticas do IAM com a ação da API sts:AssumeRole.
  3. Confirme se todas as condições do IAM especificadas nessa instrução de permissão são compatíveis com a ação da API sts:AssumeRole e correspondem.

Exemplo de mensagem de erro C:

Essa mensagem de erro indica que get-session-token não tem suporte por credenciais temporárias. Para obter mais informações, consulte Comparar as operações de API do AWS STS.

Exemplo de mensagem de erro D:

Essa mensagem de erro retorna uma mensagem codificada que pode fornecer detalhes sobre a falha na autorização. Para decodificar a mensagem de erro e obter os detalhes da falha de permissão, consulte DecodeAuthorizationMessage. Depois de decodificar a mensagem de erro, identifique o chamador da API e revise as permissões e condições em nível de recurso.

Para resolver esse erro, siga estas etapas para revisar as permissões de políticas do IAM:

  1. Se a mensagem de erro indicar que a API foi explicitamente negada, remova as ações de API ec2:AssociateIamInstanceProfile ou iam:PassRole da declaração correspondida.
  2. Confirme se ec2:AssociateIamInstanceProfile e iam:PassRole estão na instrução de permissão com destinos de recursos compatíveis e corretos. Por exemplo, confirme se os destinos de recursos da ação de API ec2:AssociateIamInstanceProfile são instâncias do EC2 e se os destinos de recursos de iam:passRole são perfis do IAM.
  3. Se as ações de API ec2:AssociateIamInstanceProfile e iam:PassRole estiverem na mesma declaração de permissão, confirme se todas as condições têm suporte pela ação de API ec2:AssociateIamInstanceProfile e iam:PassRole e se essas condições correspondem.
  4. Se as ações de API ec2:AssociateIamInstanceProfile e iam:PassRole estiverem em declarações de permissão separadas, confirme se todas as condições em cada instrução de permissão têm suporte por uma ação e se essas condições correspondem.

Para obter mais informações, consulte Lógica de avaliação de políticas e Determinar se uma solicitação é permitida ou negada em uma conta.


Informações relacionadas

Solucionar problemas de políticas do IAM

Por que recebi um erro de "AccessDenied" ou "Informações inválidas" ao tentar assumir um perfil do IAM entre contas?

Referência de elementos de política JSON do IAM