Wenn ich meine Instance mit angehängten verschlüsselten Volumes starte, stoppt die Instance sofort mit der Fehlermeldung „Client-Fehler beim Start“.

Lesedauer: 5 Minute
0

Ich habe eine Amazon Elastic Compute Cloud (Amazon EC2)-Instance gestartet, an die verschlüsselte Volumes angehängt sind, aber die Instance wird nicht gestartet. Die Instanz wechselt sofort vom Status „ausstehend“ in den Status „Herunterfahren“ und schließlich in den Status „Beendet“. Ich habe den Befehl describe-instances (AWS CLI) von AWS Command Line Interface (AWS CLI) auf der beendeten Instance ausgeführt und die folgende Fehlermeldung erhalten:... „stateReason“: {„Code“: „client.internalError“ „Nachricht“: „client.internalFehler: Client-Fehler beim Start“},... Wie kann ich das lösen?

Kurzbeschreibung

Dieses Problem tritt bei EC2-Instances mit angehängten verschlüsselten Volumes auf, wenn:

  • Der Benutzer von AWS Key Management Service (AWS KMS) oder AWS Identity and Access Management (IAM), der die Instances startet, verfügt nicht über die erforderlichen Berechtigungen.
  • Die Verwendung des KMS-Schlüssels wird durch den SourceIP-Bedingungsschlüssel eingeschränkt.

Der IAM-Benutzer muss über die Erlaubnis von AWS KMS verfügen, den AWS KMS-Schlüssel zu entschlüsseln.

Um den Zugriff auf die Entschlüsselung eines KMS-Schlüssels zu ermöglichen, müssen Sie die Schlüsselrichtlinie zusammen mit IAM-Richtlinien oder -Grants verwenden. IAM-Richtlinien allein reichen nicht aus, um den Zugriff auf einen KMS-Schlüssel zu ermöglichen, aber Sie können sie in Kombination mit der Richtlinie eines KMS-Schlüssels verwenden.

KMS-Schlüssel gewähren standardmäßig nur Zugriff auf das Root-Konto. Wenn einem IAM-Benutzer oder einer IAM-Rolle volle EC2-Rechte gewährt werden, müssen AWS-KMS-Berechtigungen explizit Zugriff auf die KMS-Schlüsselrichtlinie gewähren.

Behebung

Erstellen Sie eine IAM-Richtlinie, die es dem IAM-Prinzipal ermöglicht, AWS KMS-APIs aufzurufen

**Hinweis:**Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten,stellen Sie sicher, dass Sie die neueste Version der AWS-CLI verwenden.

1.Öffnen Sie die IAM-Konsole, wählen Sie Richtlinien und dann Richtlinie erstellen aus.

2.Wählen Sie den JSON-Tab und kopieren Sie dann diese Richtlinie und fügen Sie sie ein. Verwenden Sie dabei Ihren Schlüssel-ARN für Ressource:

{
  "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.Wählen Sie Richtlinie überprüfen aus.

4.Geben Sie im Feld Name einen Namen ein, der für Sie aussagekräftig ist, und wählen Sie dann Richtlinie erstellen aus.

5.Wählen Sie die Richtlinie aus, die Sie in Schritt 4 erstellt haben.

6.Wählen Sie den Tab Richtliniennutzung und dann Anhängen.

7.Wählen Sie unter Name die IAM-Entität aus, der Sie die Berechtigung für den KMS-Schlüssel erteilen möchten, und wählen Sie dann Richtlinie anhängen aus.

Gewähren Sie dem IAM-Prinzipal expliziten Zugriff auf einen KMS-Schlüssel

1.Öffnen Sie die AWS KMS-Konsole und wählen Sie kundenverwaltete Schlüssel aus.

2.Wählen Sie unter Schlüssel-ID Ihre Schlüssel-ID aus.

3.Wählen Sie unter Schlüsselbenutzer die Option Hinzufügen aus.

4.Wählen Sie unter Name den IAM-Benutzer oder die IAM-Rolle aus und klicken Sie dann auf Hinzufügen.

**Hinweis:**Wenn Sie eine benutzerdefinierte Schlüsselrichtlinie anstelle der Schlüsselindustrie verwenden, muss der KMS-Schlüssel ausdrücklich die folgenden Berechtigungen gewähren:

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

Bedingung IP-Adresse verwenden

Wenn Sie AWS KMS verwenden, um Ihre Daten in einem integrierten Service zu schützen, sollten Sie vorsichtig sein, wenn Sie die Bedingungsoperatoren für IP-Adressen oder den Bedingungsschlüssel aws:SourceIP in derselben Erklärung zur Zugriffsrichtlinie angeben. Wenn ein verschlüsseltes Amazon Elastic Block Store (Amazon EBS)-Volume an eine Amazon EC2-Instance angehängt wird, sendet Amazon EC2 eine Anfrage an AWS KMS. Die Anfrage entschlüsselt den verschlüsselten Datenschlüssel des Volumes. Diese Anfrage stammt von einer IP-Adresse, die der EC2-Instance zugeordnet ist, und nicht von der IP-Adresse des Benutzers. Das bedeutet, dass die Entschlüsselungsanfrage abgelehnt wird, wenn Sie eine SourceIP-Bedingung festgelegt haben und die Instance fehlschlägt.

Verwenden Sie den Bedingungsschlüssel kms:viaService. AWS KMS ermöglicht Interaktionen von diesem Service aus in Ihrem Namen. Stellen Sie sicher, dass der Prinzipal berechtigt sind, den KMS-Schlüssel und den integrierten Dienst zu verwenden. Weitere Informationen finden Sie unter kms:ViaService condition key limits.

**Hinweis:**EC2-Instances mit angemeldeten Benutzern können mit dieser Bedingung nicht interagieren — das kann nur der Service in Ihrem Namen. Diese Interaktion wird in den AWS CloudTrail-Protokollen protokolliert, damit Sie sie überprüfen können.

Im folgenden Beispiel wird der CloudTrail-Eintrag für einen API-Aufruf an AWS KMS vorgenommen. Dies wird von der Amazon EC2-Infrastruktur aufgerufen, nicht von einer bestimmten IP-Adresse aus. Wenn Sie einem Benutzer eine Richtlinie hinzufügen, die es AWS KMS ermöglicht, mit Amazon EC2 zu interagieren, kann der API-Aufruf abgeschlossen werden.

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

Verwandte Informationen

Verwendung der Richtlinienbedingungen mit AWS KMS

Wie kann ich sicher sein, dass authentifizierte Verschlüsselung mit zugehöriger Datenverschlüsselung verwendet wird, wenn ich die AWS KMS-APIs aufrufe?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren