Come risolvo gli errori di AccessDenied sulle chiamate API di Amazon SQS?

Ultimo aggiornamento: 03-09-2021

Quando eseguo una chiamata API Amazon Simple Queue Service (Amazon SQS), viene visualizzato un errore AccessDenied simile a uno dei seguenti:

“Si è verificato un errore (AccessDenied) durante la chiamata dell'operazione SendMessage: l'accesso alla risorsa https://sqs.us-east-1.amazonaws.com/ è negato.”

“Si è verificato un errore (kms.AccessDeniedException) durante la chiamata dell'operazione SendMessage: l’utente: arn:aws:iam። xxxxx:user/xxxx non è autorizzato a eseguire: kms:GenerateDataKey sulla risorsa: arn:aws:kms:us-east-1:xxxx:key/xxxx con una negazione esplicita”

In che modo posso risolvere il problema?

Risoluzione

Policy di accesso di Amazon SQS e policy IAM

Nota: se ricevi degli errori durante l’esecuzione di AWS Command Line Interface (AWS CLI), assicurati di utilizzare la versione più recente di AWS CLI.

  • La policy di accesso SQS o la policy di AWS Identity and Access Management (IAM) devono includere autorizzazioni per consentire esplicitamente l'accesso all'operazione.
  • Se la coda SQS si trova in un altro account, sia la policy di accesso SQS che la policy IAM devono consentire esplicitamente l'accesso.
    Importante
    : un rifiuto esplicito in entrambe le policy sostituisce un'autorizzazione esplicita.
  • Se la policy utilizza un elemento di condizione, verifica se la condizione limita l'accesso.
  • Se l'utente o il ruolo si trova in un'organizzazione AWS Organizations che utilizza una policy di controllo dei servizi (SCP), verifica che SCP non stia bloccando l'utente o il ruolo.

Per confermare l'identità IAM utilizzata per effettuare chiamate API, esegui il seguente comando AWS CLI get-caller-identity:

aws sts get-caller-identity

Per ulteriori informazioni sulle autorizzazioni di accesso di Amazon SQS, consulta Quali autorizzazioni sono necessarie per accedere a una coda Amazon SQS?

Autorizzazioni KMS

Se nella coda Amazon SQS è attivata la crittografia lato server (SSE), le autorizzazioni devono essere concesse sia ai produttori che ai consumatori. Le autorizzazioni richieste possono essere fornite da una chiave AWS KMS gestita da AWS o da una chiave gestita dal cliente. Una policy delle chiavi gestite dal cliente deve includere le autorizzazioni di accesso per ogni produttore e consumatore di code. In alternativa, puoi aggiornare la policy IAM affinché includa le autorizzazioni KMS richieste per la chiave KMS.

  • Autorizzazioni del produttore obbligatorie: kms:GenerateDataKey and kms:Decrypt
  • Autorizzazioni consumatore obbligatorie: kms:Decrypt

Per accedere a una coda SSE Amazon SQS da un altro account, la coda deve utilizzare una chiave gestita dal cliente. Non è possibile utilizzare una chiave gestita di AWS perché è possibile modificare solo le policy delle chiavi gestite dal cliente. La policy delle chiavi KMS deve consentire l'accesso tra account della chiave KMS e la policy IAM deve includere le autorizzazioni per accedere alla chiave KMS.

Per ulteriori informazioni, consulta Gestione delle chiavi.

Policy dell'endpoint VPC

Se accedi a SQS tramite un endpoint Amazon Virtual Private Cloud (Amazon VPC), la policy degli endpoint VPC SQS deve consentire l'accesso.

Il seguente esempio di policy endpoint VPC specifica che l'utente IAM MyUser è autorizzato a inviare messaggi alla coda SQS MyQueue. Per altre operazioni, agli utenti IAM e alle risorse SQS viene negato l'accesso tramite l'endpoint VPC.

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

Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?