Come posso risolvere gli errori 400 con accesso negato per il testo criptato di AWS KMS in AWS Glue?

5 minuti di lettura
0

Ricevo un errore 400 quando eseguo un crawler AWS Glue o un processo ETL AWS Glue.

Breve descrizione

Durante l'utilizzo di AWS Glue, potresti ricevere questo errore quando provi ad accedere a risorse AWS come i bucket Amazon Simple Service Solution (Amazon S3):

"The ciphertext refers to a customer master key that does not exist, does not exist in this region, or you are not allowed to access." (Il testo criptato si riferisce a una chiave master del cliente non esistente, non esistente in questa regione o il cui accesso non è consentito.)

Ricevi questo errore quando accedi a qualsiasi servizio AWS crittografato con il servizio di gestione delle chiavi AWS (AWS KMS) utilizzando processi o crawler AWS Glue. È molto probabile che l'errore si verifichi per uno dei seguenti motivi:

  • Il principale che tenta di accedere alla chiave crittografata non dispone delle autorizzazioni AWS KMS richieste
  • La chiave AWS KMS non esiste o non esiste in una regione AWS specifica

Risoluzione

Nota: se ricevi un messaggio di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), assicurati di utilizzare la versione più recente di AWS CLI.

Verifica che la tua policy dei ruoli AWS Glue disponga delle autorizzazioni richieste

Innanzitutto, verifica che la policy dei ruoli AWS Glue che stai utilizzando disponga delle autorizzazioni necessarie per accedere alla chiave AWS KMS della risorsa.

Ad esempio, supponiamo che tu disponga di un ruolo AWS Glue chiamato AWSGlue-MyGlueCustomRole. Questo ruolo accede a un bucket S3 crittografato con la chiave AWS KMS arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07. La policy dei ruoli AWS Glue deve avere il seguente contesto oltre ad ulteriori autorizzazioni:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:GenerateDataKey"
            ],
            "Resource": "arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07"
        }
    ]
}

Verifica se la tua policy della chiave AWS KMS consente il ruolo AWS Glue

La policy della chiave AWS KMS deve consentire il ruolo AWS Glue come parte della sua entità consentita.

Considerando l'esempio precedente, la policy della chiave AWS KMS arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07 deve avere le seguenti autorizzazioni collegate:

{
    "Sid": "Allow use of the key",
    "Effect": "Allow",
    "Principal": {
        "AWS": [
            "arn:aws:iam::XXXXXXXX9645:role/AWSGlue-MyGlueCustomRole "
        ]
    },
    "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
    ],
    "Resource": "*"
}

Assicurati che la chiave AWS KMS esista nella stessa regione del processo AWS Glue

Per verificare la regione della tua chiave AWS KMS, segui questi passaggi:

1.    Apri la console AWS KMS.

2.    Scegli la regione in cui stai riscontrando l'errore.

3.    Nel pannello di navigazione, scegli AWS managed keys (Chiavi gestite da AWS) oppure Customer managed keys (Chiavi gestite dal cliente). Cerca poi la chiave AWS KMS che stai utilizzando. Puoi anche utilizzare AWS CLI per cercare la chiave AWS KMS. Se la chiave non esiste nella regione, il seguente comando restituisce un errore NotFoundException:

aws kms describe-key --key-id <Key-ID> --region <region-name>

Nota: assicurati di sostituire <Key-ID> e <region-name> in questo esempio con l'ID della chiave e il nome della regione che stai utilizzando.

4.    Verifica le chiamate API AWS CloudTrail kms:Decrypt e kms:Encrypt per verificare eventuali errori. In alternativa, puoi visualizzare tutti i log di eventi utilizzando kms.amazonaws.com come origine dell'evento.

Esempio di account incrociati

Se il ruolo AWS Glue e la chiave AWS KMS si trovano in account diversi, utilizza la chiave gestita dal cliente invece della chiave gestita da AWS. Le chiavi AWS KMS possono essere utilizzate solo quando i principali appartengono allo stesso account. Non puoi modificare la policy delle chiavi gestite da AWS. Quando accedi alla chiave AWS KMS nel secondo account, assicurati che le autorizzazioni siano presenti sia all'origine che alla destinazione.

Supponiamo di voler consentire a un utente X AWS Identity and Access Management (IAM) nell'account Y di accedere a una chiave AWS KMS nell'account Z. In questo caso, la policy IAM deve contenere le operazioni AWS KMS necessarie. Le stesse operazioni devono essere consentite dalla policy della chiave AWS KMS. Per ulteriori informazioni, consulta Consentire agli utenti di altri account di utilizzare una chiave AWS KMS.

Ecco i problemi più comuni che si verificano quando si accede a una chiave AWS KMS da un account incrociato.

Se il messaggio di errore è causato da una policy di controllo dei servizi, verifica tutti gli SCP applicati al tuo account. Questo ti aiuterà a identificare l'SCP che limita l'operazione kms:Decrypt. Aggiorna l'SCP in questione ed esegui nuovamente l'operazione. Per ulteriori informazioni, consulta Elenco di tutte le policy collegate a un root, un'UO o un account e Aggiornamento di una SCP. Consulta il seguente errore di esempio:

User: arn:aws:iam::XXXXXXXX9645:user/KMSDemO is not authorized to perform: kms:Decrypt on resource: arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07 with an explicit deny in a service control policy"

Se all'entità IAM è collegato un limite di autorizzazione, il limite imposta le autorizzazioni massime a disposizione dell'entità. Verifica il limite delle autorizzazioni sul principale IAM per assicurarti che sia consentita l'operazione di decrittografia AWS KMS richiesta. Prova poi a eseguire nuovamente l’operazione. Consulta il seguente errore di esempio:

User: arn:aws:iam::XXXXXXXX9645:user/KMSDemO is not authorized to perform: kms:Decrypt on resource: arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07 because no permissions boundary allows the kms:Decrypt action"

Se ti connetti ad AWS KMS utilizzando un endpoint VPC, verifica la policy dell'endpoint VPC collegata. Assicurati che l'operazione kms:Decrypt sia consentita nella policy. Consulta il seguente errore di esempio:

User: arn:aws:iam::XXXXXXXX9645:user/KMSDemO is not authorized to perform: kms:Decrypt on resource: arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07 because no VPC endpoint policy allows the kms:Decrypt action"

Informazioni correlate

Configurazione della crittografia in AWS Glue

Policy delle chiavi in AWS KMS

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa