Como soluciono os erros AccessDenied em chamadas de API do Amazon SQS?

Última atualização: 2021-09-03

Quando executo uma chamada de API do Amazon Simple Queue Service (Amazon SQS), recebo um erro AccessDenied semelhante a um dos seguintes:

“An error occurred (AccessDenied) when calling the SendMessage operation: Access to the resource https://sqs.us-east-1.amazonaws.com/ is denied.”

“An error occurred (KMS.AccessDeniedException) when calling the SendMessage operation: User: arn:aws:iam::xxxxx:user/xxxx is not authorized to perform: kms:GenerateDataKey on resource: arn:aws:kms:us-east-1:xxxx:key/xxxx with an explicit deny”

Como soluciono esse problema?

Resolução

Política de acesso do Amazon SQS e política do IAM

Observação: se receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), verifique se está usando a versão mais recente da AWS CLI.

  • A política de acesso do SQS ou a política do AWS Identity and Access Management (IAM) devem incluir permissões para permitir explicitamente o acesso à ação.
  • Se a fila do SQS estiver em uma conta diferente, tanto a política de acesso do SQS quanto a política do IAM deverão permitir explicitamente o acesso.
    Importante
    : uma rejeição explícita em qualquer uma das políticas substitui uma permissão explícita.
  • Se a política usar um elemento condicional, verifique se a condição restringe o acesso.
  • Se o usuário ou a função estiver em uma organização do AWS Organizations que usa uma Service Control Policy (SCP – Política de controle de serviço), verifique se a SCP não está bloqueando o usuário ou a função.

Para confirmar a identidade do IAM usada para fazer chamadas de API, execute o seguinte comando get-caller-identity da AWS CLI:

aws sts get-caller-identity

Para mais informações sobre as permissões de acesso do Amazon SQS, consulte Quais são as permissões necessárias para acessar uma fila do Amazon SQS?

Permissões do KMS

Se a fila do Amazon SQS estiver com a Server-Side Encryption (SSE – Criptografia no lado do servidor) ativada, é necessário conceder permissões a produtores e consumidores. As permissões necessárias podem ser fornecidas por uma chave do AWS KMS gerenciada pela AWS ou por uma chave gerenciada pelo cliente. Uma política de chaves gerenciada pelo cliente deve incluir permissões de acesso para cada produtor e consumidor de fila. Como alternativa, é possível atualizar a política do IAM para incluir as permissões do KMS necessárias para a chave do KMS.

  • Permissões de produtor necessárias: kms:GenerateDataKey e kms:Decrypt
  • Permissões de consumidor necessárias: kms:Decrypt

Para acessar uma fila de SSE do Amazon SQS diretamente de uma conta diferente, a fila deve usar uma chave gerenciada pelo cliente. Você não pode usar uma chave gerenciada pela AWS porque só é possível modificar as políticas de chave gerenciadas pelo cliente. A política de chaves do KMS deve permitir o acesso da chave do KMS entre contas, e a política do IAM deve incluir permissões para acessar a chave do KMS.

Para mais informações, consulte Gerenciamento de chaves.

Política de endpoints da VPC

Se você acessar o SQS por meio de um endpoint da Amazon Virtual Private Cloud (Amazon VPC), a política de endpoint da VPC do SQS deverá permitir o acesso.

O exemplo a seguir de política de endpoint da VPC especifica que o usuário “MyUser” do IAM tem permissão para enviar mensagens para a fila “MyQueue” do SQS. Outras ações, usuários do IAM e recursos do SQS têm acesso negado por meio do endpoint da VPC.

{
   "Statement": [{
      "Action": ["sqs:SendMessage"],
      "Effect": "Allow",
      "Resource": "arn:aws:sqs:us-east-2:123456789012:MyQueue",
      "Principal": {
        "AWS": "arn:aws:iam:123456789012:user/MyUser"
      }
   }]
}

Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?