Como soluciono erros de “AccessDenied” ou “AccessDeniedException” em chamadas de API do Amazon SQS?

5 minuto de leitura
0

Executei uma chamada de API do Amazon Simple Queue Service (Amazon SQS) e recebi o erro “AccessDenied”.

Breve descrição

Quando eu executo uma chamada de API do Amazon SQS, recebo um erro “AccessDenied” ou “AccessDeniedException” semelhante ao seguinte:

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

-ou-

“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.”

Resolução

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

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solucionar erros da AWS CLI. Além disso, verifique se você 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.

  • É uma prática recomendada conceder o privilégio mínimo apenas às permissões necessárias para a realização de uma tarefa. Para obter mais informações, consulte Aplique permissões de privilégio mínimo.

  • Se a fila do SQS estiver em uma conta diferente, tanto a política de acesso do SQS quanto a política do IAM devem permitir explicitamente o acesso.

    Importante: uma negação explícita em qualquer política 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 SCPs, verifique se o SCP não bloqueia o usuário ou a função.

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

aws sts get-caller-identity

Para obter mais informações sobre as permissões de acesso do Amazon SQS, consulte De que permissões preciso para acessar uma fila do Amazon SQS?

Permissões do AWS Key Management Service (AWS KMS)

Se sua fila do Amazon SQS tiver a criptografia do lado do servidor (SSE) ativada, as permissões deverão ser concedidas tanto aos produtores quanto aos consumidores. As permissões necessárias são fornecidas com uma chave do AWS KMS gerenciada pela AWS ou uma chave gerenciada pelo cliente. Uma política de chaves gerenciada pelo cliente deve incluir permissões de acesso para cada produtor e consumidor da fila. Ou atualize a política do IAM para incluir as permissões necessárias do AWS KMS para a chave do AWS KMS.

Para acessar uma fila do Amazon SQS com SSE a partir de uma conta diferente, a fila deve usar uma chave gerenciada pelo cliente. Você não pode usar uma chave gerenciada pela AWS, porque somente as políticas de chaves gerenciadas pelo cliente podem ser modificadas. A política de chaves do AWS KMS deve permitir o acesso entre contas à chave do AWS KMS. A política do IAM deve incluir permissões para acessar a chave do AWS KMS.

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

Política de endpoint 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.

Este exemplo de política de endpoint da VPC especifica que o usuário do IAM MyUser 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"
      }
    }
  ]
}

Observação: você só pode usar VPCs com endpoints HTTPS do Amazon SQS.

Permissões do console do SQS

Para visualizar as filas e os atributos do SQS no console do SQS, os usuários devem ter permissões para as ações ListQueues e GetQueueAttributes:

{
  "Sid": "Statement1",
  "Effect": "Allow",
  "Action": [
    "sqs:ListQueues",
    "sqs:GetQueueAttributes"
  ],
  "Resource": "*"
}

Observação: você não pode usar a ação de API ListQueues com filas específicas. A API ListQueues deve ser aplicada ao recurso “*" ou "arn:aws:sqs:region:account_id:*”.

Política de negação de todas as filas

Você pode perder o acesso à fila do SQS se uma política de negação total similar ao exemplo a seguir for adicionada:

{
  "Sid": "deny-sqs-actions",
  "Effect": "Deny",
  "Principal": "*",
  "Action": "SQS:*",
  "Resource": "queueName"
}

Se você perdeu o acesso à fila do SQS, use as credenciais do usuário raiz para acessar a fila e remover a política de negação total. Para obter mais informações, consulte Como soluciono e evito problemas de acesso à fila do Amazon SQS ao usar uma política de Negar fila?

Informações relacionadas

Tutorial: como enviar uma mensagem a uma fila do Amazon SQS pela Amazon Virtual Private Cloud

Permissões da API do Amazon SQS: referência de ações e recursos

AWS OFICIAL
AWS OFICIALAtualizada há 7 meses