In che modo è possibile risolvere gli errori "AccessDenied" o "AccessDeniedException" nelle chiamate API di Amazon SQS?

4 minuti di lettura
0

Ho eseguito una chiamata API di Amazon Simple Queue Service (Amazon SQS) e ho ricevuto un errore "AccessDenied".

Breve descrizione

Quando eseguo una chiamata API di Amazon SQS, ricevo un errore "AccessDenied" o "AccessDeniedException" simile al seguente:

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

-oppure-

"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."

Risoluzione

Policy di accesso ad Amazon SQS e policy IAM

Nota: se ricevi errori durante l'esecuzione dei comandi dell'interfaccia a riga di comando di AWS (AWS CLI), consulta la sezione Risolvere gli errori AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

  • La policy di accesso di SQS o di AWS Identity and Access Management (IAM) devono includere le autorizzazioni per consentire esplicitamente l'accesso all'azione.

  • È consigliabile concedere il privilegio minimo solo per le autorizzazioni necessarie per eseguire un'attività. Per ulteriori informazioni, consulta la sezione Assegna le autorizzazioni con privilegi minimi.

  • Se la coda SQS si trova in un account diverso, sia la policy di accesso di SQS che la policy IAM devono consentire esplicitamente l'accesso.

    Importante: una negazione esplicita in ciascuna delle policy sovrascrive un permesso esplicito.

  • Se la policy utilizza un elemento di condizione, verifica che la condizione limiti l'accesso.

  • Se l'utente o il ruolo fa parte di un'organizzazione AWS Organizations che utilizza SCP, verifica che la policy SCP non blocchi l'utente o il ruolo.

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

aws sts get-caller-identity

Per ulteriori informazioni sulle autorizzazioni di accesso di Amazon SQS, consulta la sezione Quali autorizzazioni mi occorrono per accedere alla coda Amazon SQS?

Autorizzazioni del Sistema AWS di gestione delle chiavi (AWS KMS)

Se la tua coda Amazon SQS ha la crittografia lato server (SSE) attivata, le autorizzazioni devono essere concesse sia ai produttori che ai consumatori. Le autorizzazioni richieste vengono fornite con una chiave AWS KMS gestita da AWS o una chiave gestita dal cliente. La policy della chiave gestita dal cliente deve includere le autorizzazioni di accesso per ogni produttore e consumatore della coda. In alternativa, aggiorna la policy IAM per includere le autorizzazioni AWS KMS richieste per la chiave AWS KMS.

Per accedere a una coda con crittografia lato server di Amazon SQS da un account diverso, la coda deve utilizzare una chiave gestita dal cliente. Non puoi usare una chiave gestita da AWS, perché è possibile modificare solo le policy delle chiavi gestite dai clienti. La policy delle chiavi AWS KMS deve consentire l'accesso da più account alla chiave AWS KMS. La policy IAM deve includere le autorizzazioni per accedere alla chiave AWS KMS.

Per ulteriori informazioni consulta la sezione Gestione delle chiavi.

Policy degli 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.

Questo esempio di policy degli endpoint VPC specifica che l'utente IAM MyUser è autorizzato a inviare messaggi alla coda SQS MyQueue. Ad altre azioni, utenti IAM e 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"
      }
    }
  ]
}

Nota: puoi usare solo VPC con endpoint HTTPS Amazon SQS.

Autorizzazioni della console SQS

Per visualizzare le code e gli attributi SQS dalla console SQS, gli utenti devono disporre delle autorizzazioni per effettuare le azioni ListQueues e GetQueueAttributes:

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

Nota: non è possibile utilizzare l'azione API ListQueues con specifiche code. L'API ListQueues deve essere applicata alla risorsa "*" o "arn:aws:sqs:region:account_id:*".

Negare tutte le policy di coda

Potresti perdere l'accesso alla coda SQS se viene aggiunta una policy di negazione di tutte le code simile a questo esempio:

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

Se hai perso l'accesso alla coda SQS, utilizza le credenziali dell'utente root per accedere alla coda e rimuovere la policy di negazione totale. Per ulteriori informazioni, consulta la sezione Come posso risolvere e prevenire i problemi di accesso alla coda di Amazon SQS quando utilizzo una policy di negazione di coda?

Informazioni correlate

Tutorial: Invio di un messaggio a una coda Amazon SQS da Amazon Virtual Private Cloud

Autorizzazioni API Amazon SQS: azioni e riferimento alle risorse