Warum kann mein IAM-Benutzer oder meine IAM-Rolle mit vollen Amazon-EC2-Berechtigungen keine EC2-Instance starten?

Letzte Aktualisierung: 18.05.2022

Meine AWS Identity and Access Management (IAM)-Entität (Benutzer, Gruppen, Rollen) hat volle Berechtigungen für eine Amazon Elastic Compute Cloud (Amazon EC2)-Instance. Ich habe versucht, die Amazon-EC2-Instance zu starten, aber sie wurde vom Status Ausstehend in Angehalten geändert.

Kurzbeschreibung

Prüfen Sie, ob an die Instance ein Amazon Elastic Block Store (Amazon EBS) angehängt ist. Wenn das Amazon-EBS-Volume mit einem AWS Key Management Service (AWS KMS)-Schlüssel verschlüsselt ist, liegt möglicherweise ein Berechtigungsproblem vor. Die IAM-Entität, die die StartInstances-API-Aktion aufruft, muss über Berechtigungen zum Erstellen einer Berechtigung für den Amazon EC2-Service verfügen. Die Berechtigung erlaubt Amazon EC2, den AWS-KMS-Schlüssel (KMS-Schlüssel) zu entschlüsseln.

Amazon-EBS-Volumes senden eine GenerateDataKeyWithoutPlaintext-API-Aufrufanforderung an AWS KMS, die einen neuen Datenschlüssel erstellt und ihn im KMS-Schlüssel verschlüsselt. Der verschlüsselte Datenschlüssel wird an das Amazon-EBS-Volume zurückgesendet und dann an die Amazon-EC2-Instance angehängt. In diesem Szenario ist der KMS-Schlüssel im selben AWS-Konto für die EC2-Instance und den KMS-Schlüssel vorhanden.

Hinweis: Wenn Sie beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhalten, stellen Sie sicher, dass Sie die neueste AWS-CLI-Version verwenden.

1. Um zu überprüfen, warum sich die Amazon-EC2-Instance im Status Angehalten befindet, führen Sie den AWS-CLI-Befehl aus, der dem Folgenden ähnelt:

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

Beispielausgabe:

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

Dieser Fehler bedeutet, dass das Root-Volume oder zusätzliche angehängte Volumes verschlüsselt sind. Sie haben keine Berechtigung, auf den AWS-KMS-Schlüssel zur Entschlüsselung zuzugreifen.

2. (Optional) Folgen Sie den Anweisungen zum Filtern von AWS-CloudTrail-Ereignissen für den Ereignisnamen CreateGrant.

Beispielausgabe:

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

Dieser Fehler bedeutet, dass die IAM-Entität nicht über die CreateGrant-Berechtigung für Amazon EC2 verfügt, den Datenschlüssel zu entschlüsseln, sodass die Instance nicht gestartet werden kann.

Auflösung

Gehen Sie folgendermaßen vor, um den Schlüsseltyp zu finden:

1.    Öffnen Sie die Amazon-EC2-Konsole und wählen Sie dann Instances aus.

2.    Wählen Sie unter Instance-ID die Amazon-EC2-Instance-ID und dann die Registerkarte Speicher aus.

3.    Wählen Sie unter Volume-ID die Volume-ID für das verschlüsselte Volume aus.

4.    Kopieren Sie unter KMS-Schlüssel-ID die Schlüssel-ID.

5.    Öffnen Sie die AWS-KMS-Konsole in derselben AWS-Region.

6.    Fügen Sie in von AWS verwaltete Schlüssel und vom Kunden verwaltete Schlüssel die KMS-Schlüssel-ID aus Schritt 4 ein.

7.    Wählen Sie die Schlüssel-ID.

8.    Notieren Sie sich in Allgemeine Konfiguration unter Beschreibung den KMS-Schlüsseltyp.

Fügen Sie der IAM-Entität eine IAM-Richtlinie hinzu, die der folgenden ähnelt:

{
  "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
        }
      }
    }
  ]
}

Der Bedingungsschlüssel kms:GrantIsForAWSResource stellt sicher, dass die IAM-Entität nur Berechtugungen für den KMS-Schlüssel mit AWS-Ressourcen wie EC2-Instances erstellen kann. Diese Richtlinie erlaubt es der IAM-Entität nicht, Berechtigungen für eine andere IAM-Entität zu erstellen.

(Optional) Ermöglichen Sie dem Root-Benutzerkonto des AWS-Kontos vollen Zugriff auf den KMS-Schlüssel, ähnlich dem Folgenden:

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

Sie können die IAM-Entität auch in der KMS-Schlüsselrichtlinie hinzufügen, um die CreateGrant-API-Aktion zuzulassen.

Hinweis:


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?