Quando avvio la mia istanza con i volumi crittografati collegati, l'istanza si arresta immediatamente con l'errore "errore del client all'avvio".

5 minuti di lettura
0

Ho avviato un'istanza Amazon Elastic Compute Cloud (Amazon EC2) a cui sono collegati volumi crittografati, ma l'istanza non si avvia. L'istanza passa immediatamente da uno stato di sospensione all'arresto e quindi a uno stato di terminazione. Ho eseguito il comando AWS Command Line Interface (AWS CLI) describe-instances sull'istanza terminata e ho ottenuto il seguente errore: .... "StateReason": { "Code": "Client.InternalError" "Message": "Client.InternalError: Client error on launch" }, .... Come posso risolvere questo problema?

Breve descrizione

Questo problema si verifica nelle istanze EC2 con volumi crittografati collegati se:

  • L'utente AWS Key Management Service (AWS KMS) o AWS Identity and Access Management (IAM) che avvia le istanze non dispone delle autorizzazioni richieste.
  • L'utilizzo della chiave KMS è limitato dalla chiave di condizione SourceIP.

L'utente IAM deve disporre dell'autorizzazione AWS KMS per decrittografare la chiave AWS KMS.

Per consentire l'accesso alla decrittografia di una chiave KMS, è necessario utilizzare la policy della chiave con le policy o le concessioni IAM. Le policy IAM da sole non sono sufficienti per consentire l'accesso a una chiave KMS, ma è possibile utilizzarle in combinazione con una policy della chiave KMS.

Per impostazione predefinita, le chiavi KMS concedono l'accesso solo all'account root. Se si fornisce a un utente o ruolo IAM un privilegio completo EC2, le autorizzazioni AWS KMS devono concedere esplicitamente l'accesso alla policy delle chiavi KMS.

Risoluzione

Creazione di una policy IAM per consentire al principale IAM di richiamare le API AWS KMS

Nota: Se si verificano errori durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS,assicurati di utilizzare la versione più recente di AWS CLI.

1.    Apri la console IAM, scegli Policy, quindi scegli Crea policy.

2.    Scegli la scheda JSON, quindi copia e incolla questa policy utilizzando la tua chiave ARN per la Risorsa:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:Encrypt",
        "kms:GenerateDataKey*",
        "kms:DescribeKey",
        "kms:CreateGrant"
      ],
      "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    }
  ]
}

3.    Scegli Rivedi policy.

4.    In Nome, inserisci un nome significativo, quindi scegli Crea policy.

5.    Scegli la policy che hai creato al passaggio 4.

6.    Scegli la scheda Utilizzo della policy, quindi scegli Collega.

7.    In Nome, scegli l'entità IAM a cui desideri concedere l'autorizzazione alla chiave KMS, quindi scegli Collega policy.

Concessione al principale IAM dell'accesso esplicito a una chiave KMS

1.    Apri la console KMS AWS e scegli Chiavi gestite dal cliente.

2.    In ID della chiave, scegli il tuo ID della chiave.

3.    In Utente delle chiavi, scegli Aggiungi.

4.    In Nome, scegli l'utente o il ruolo IAM, quindi scegli Aggiungi.

Nota: se utilizzi una policy della chiave personalizzata anziché quella predefinita, la chiave KMS deve concedere esplicitamente le seguenti autorizzazioni:

{
      "Sid": "Allow use of the key",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
        "arn:aws:iam::123456789012:role/MyRoleName",
          "arn:aws:iam::123456789012:user/MyUserName"
        ]
      },
      "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
      ],
      "Resource": "*"
    },
    {
      "Sid": "Allow attachment of persistent resources",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
      "arn:aws:iam::123456789012:role/MyRoleName",
          "arn:aws:iam::123456789012:user/MyUserName"
        ]
      },
      "Action": [
        "kms:CreateGrant",
        "kms:ListGrants",
        "kms:RevokeGrant"
      ],
      "Resource": "*",
      "Condition": {
        "Bool": {
          "kms:GrantIsForAWSResource": "true"
        }
      }
    }

Uso della condizione dell'indirizzo IP

Se utilizzi AWS KMS per proteggere i dati in un servizio integrato, fai attenzione quando specifichi gli operatori della condizione dell'indirizzo IP o la chiave di condizione aws:SourceIp nella stessa istruzione della policy di accesso. Se colleghi un volume Amazon Elastic Block Store (Amazon EBS) crittografato a un'istanza Amazon EC2, Amazon EC2 invia una richiesta ad AWS KMS. La richiesta esegue la decrittografia della chiave dati crittografata del volume. Questa richiesta proviene da un indirizzo IP associato all'istanza EC2 e non dall'indirizzo IP dell'utente. Ciò significa che la richiesta di decrittografia viene rifiutata se è impostata una condizione SourceIP e l'istanza ha esito negativo.

Usa la chiave di condizione kms:ViaService. AWS KMS consente le interazioni da quel servizio per tuo conto. Assicurati che i principali abbiano il permesso di utilizzare la chiave KMS e il servizio integrato. Per ulteriori informazioni, consulta kms:ViaService condition key limits.

Nota: Le istanze EC2 con utenti connessi non possono interagire con questa condizione: solo il servizio per tuo conto può farlo. Questa interazione viene registrata nei log di AWS CloudTrail, in modo da poterla esaminare.

Nell'esempio seguente, la voce CloudTrail di una chiamata API viene creata in AWS KMS. Tale voce viene richiamata dall'infrastruttura Amazon EC2, non da un indirizzo IP specifico. Per completare la chiamata API, è necessario aggiungere a un utente una policy che consenta ad AWS KMS di interagire con Amazon EC2.

"userIdentity": {
  "sessionContext": {
  "sessionIssuer": {
    "accountId": "450822418798",
    "principalId": "450822418798:aws:ec2-infrastructure",
    "userName": "aws:ec2-infrastructure",
    "arn": "arn:aws:iam::450822418798:role/aws:ec2-infrastructure",
    "type": "Role"
   },
...
  "eventType": "AwsApiCall",
  "@log_group": "CloudTrail/AllRegionLogGroup",
  "awsRegion": "eu-west-1",
  "requestParameters": {
    "encryptionContext": {
    "aws:ebs:id": "vol-0ca158925aa9c1883"
    }
}

Informazioni correlate

Utilizzo delle condizioni dei criteri con AWS KMS

Come posso essere sicuro che venga utilizzata la crittografia autenticata con la crittografia dei dati associata quando chiamo le API di AWS KMS?

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa