Perché il mio utente o ruolo IAM con autorizzazioni Amazon EC2 complete non può avviare un'istanza EC2?

Ultimo aggiornamento: 18/05/2022

La mia entità AWS Identity and Access Management (IAM) (utenti, gruppi, ruoli) dispone di autorizzazioni complete per un'istanza Amazon Elastic Compute Cloud (Amazon EC2). Ho provato ad avviare l'istanza Amazon EC2, ma è passata dallo stato In sospeso allo stato Arrestato.

Breve descrizione

Verifica se all'istanza è associato un Amazon Elastic Block Store (Amazon EBS). Se il volume Amazon EBS è stato crittografato utilizzando una chiave AWS Key Management Service (AWS KMS), potrebbe esserci un problema di autorizzazione. L'entità IAM che chiama l'operazione API StartInstances deve disporre delle autorizzazioni per creare una concessione per il servizio Amazon EC2. La concessione consente ad Amazon EC2 di decrittografare la chiave AWS KMS (chiave KMS).

I volumi Amazon EBS inviano una richiesta di chiamata API GenerateDataKeyWithoutPlaintext a AWS KMS che crea una nuova chiave dati e la crittografa nella chiave KMS. La chiave dati crittografata viene rinviata al volume Amazon EBS e quindi collegata all'istanza Amazon EC2. In questo scenario, la chiave KMS è presente nello stesso account AWS per l'istanza EC2 e la chiave KMS.

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi di AWS Command Line Interface (AWS CLI), assicurati di utilizzare la versione più recente di AWS CLI.

1. Per confermare il motivo per cui l'istanza di Amazon EC2 si trova in uno stato Arrestato, esegui il comando di AWS CLI come riportato di seguito:

aws ec2 describe-instances --instance-id your-instance_ID --query "Reservations[*].Instances[*].StateReason"

Output di esempio:

[
  [
    {
      "Message": "Client.InternalError: Client error on launch",
      "Code": "Client.InternalError"
    }
  ]
]

Questo errore indica che il volume root o i volumi collegati aggiuntivi sono crittografati. Non disponi dell'autorizzazione ad accedere alla chiave AWS KMS per la decrittografia.

2. (Facoltativo) Segui le istruzioni per filtrare gli eventi di AWS CloudTrail per il nome dell'evento CreateGrant.

Output di esempio:

"errorMessage": "User: arn:aws:iam::123456789012:user/test is not authorized to perform: kms:CreateGrant on resource: arn:aws:kms:eu-west-1:123456789012:key/8e3426b8-87b4-434c-ae74-8e63dadf354a"

Questo errore indica che l'entità IAM non dispone dell'autorizzazione CreateGrant per Amazon EC2 per decrittografare la chiave dati pertanto l'istanza non possa essere avviata.

Risoluzione

Per trovare il tipo di chiave, attenersi alla seguente procedura:

1.    Apri la console Amazon EC2 e scegli Avvia istanza.

2.    In ID istanza, scegli l'ID istanza Amazon EC2, quindi scegli la scheda Archiviazione.

3.    In ID volume, scegli l'ID volume per il volume crittografato.

4.    In ID chiave KMS, copia l'ID della chiave.

5.    Apri la console AWS KMS nella stessa regione AWS.

6.    In Chiavi gestite da AWS e Chiavi gestite dal cliente, incolla l'ID della chiave KMS dal passaggio 4.

7.    Scegli l'ID della chiave.

8.    In Configurazione generale in Descrizione, prendi nota del tipo di chiave KMS.

Allega una policy IAM all'entità IAM come riportato di seguito:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:CreateGrant"
      ],
      "Resource": [
        "arn:aws:kms:eu-west-1:123456789012:key/8e3426b8-87b4-434c-ae74-8e63dadf354a"
      ],
      "Condition": {
        "Bool": {
          "kms:GrantIsForAWSResource": true
        }
      }
    }
  ]
}

La chiave di condizione kms:GrantIsForAWSResource assicura che l'entità IAM sia in grado di creare concessioni per la chiave KMS solo con risorse AWS come le istanze EC2. Questa policy non consente all'entità IAM di creare concessioni per un'altra entità IAM.

(Facoltativo) Concedi all'utente root dell'account AWS l'accesso completo alla chiave KMS come riportato di seguito:

{
  "Sid": "Enable IAM User Permissions",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::123456789012:root"},
  "Action": "kms:*",
  "Resource": "*"
}

Puoi anche aggiungere l'entità IAM nella policy della chiave KMS per consentire l'operazione API CreateGrant.

Nota:


Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?