Wie skaliere ich EC2-Instanzen mit einem verschlüsselten Root-Volume automatisch?

Wie skaliere ich EC2-Instanzen mit einem verschlüsselten Root-Volume automatisch?

Ich versuche, ein Autoscaling-Setup in AWS zu konfigurieren, bei dem die Node Launch-Vorlage die Verschlüsselung des Stammvolumes (EBS) beinhaltet. Ich habe eine Service Linked Role und einen CMK in Amazon KMS mit einer IAM-Richtlinie gemäß derDokumentation.

Wenn die ASG jedoch versucht, die Instanzen zu erstellen, wird mir folgende Fehlermeldung angezeigt:

Launching a new EC2 instance: i-0123456789xxx. Status Reason: Instance became unhealthy while waiting for instance to be in InService state. Termination Reason: Client.InternalError: Client error on launch

DerDokumentation zur Fehlerbehebungverweist lediglich auf die Originaldokumentation und legt nahe, dass die IAM-Richtlinie nicht richtig konfiguriert ist. Ich habe allerdings Schwierigkeiten herauszufinden, was nicht stimmt.

Die dienstverknüpfte Rolle wird auf der ASG konfiguriert:SLR auf ASG, und der SLR verfügt in der IAM-Richtlinie über die richtigen Berechtigungen für den Schlüssel, der zum Verschlüsseln des Volumes verwendet wurde:

{
        "Sid": "Allow use of the key",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::0123456789:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling"
        },
        "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::0123456789:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling"
        },
        "Action": [
            "kms: CreateGrant",
            "kms: ListGrants",
            "kms: RevokeGrant"
        ],
        "Resource": "*",
        "Condition": {
            "Bool": {
                "kms:GrantIsForAWSResource": "true"
            }
        }
    }

Beachten Sie, dass das manuelle Starten desselben AMI unter Angabe, dass das Stammvolume mit demselben Schlüssel verschlüsselt ist, funktioniert. Dies deutet möglicherweise auf ein Problem mit dem SLR hin?

Oder muss ich ein AMI erstellen, bei dem das Stammvolume bereits verschlüsselt ist?

AKTUALISIERUNG 11/05/2020:

Es stellte sich heraus, dass ein Formatierungsfehler aufgetreten ist – im Abschnitt „Aktionen“ steht nach jedem Doppelpunkt ein Leerzeichen. Durch das Entfernen dieses Fehlers wurde das Problem behoben und jetzt funktioniert alles wie erwartet.

{
        "Sid": "Allow use of the key",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::0123456789:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling"
        },
        "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::0123456789:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling"
        },
        "Action": [
            "kms:CreateGrant",
            "kms:ListGrants",
            "kms:RevokeGrant"
        ],
        "Resource": "*",
        "Condition": {
            "Bool": {
                "kms:GrantIsForAWSResource": "true"
            }
        }
    }

Antwort1

Es stellte sich heraus, dass ein Formatierungsfehler aufgetreten ist – im Abschnitt „Aktionen“ steht nach jedem Doppelpunkt ein Leerzeichen. Durch das Entfernen dieses Fehlers wurde das Problem behoben und jetzt funktioniert alles wie erwartet.

{
        "Sid": "Allow use of the key",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::0123456789:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling"
        },
        "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::0123456789:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling"
        },
        "Action": [
            "kms:CreateGrant",
            "kms:ListGrants",
            "kms:RevokeGrant"
        ],
        "Resource": "*",
        "Condition": {
            "Bool": {
                "kms:GrantIsForAWSResource": "true"
            }
        }
    }

Antwort2

Ich hatte das gleiche Problem und habe es gelöst durchHinzufügen der serviceverknüpften Rolle für Auto Scaling zumWichtige Richtliniedes entsprechenden Schlüssels(AWS-Konsole -> KMS -> Vom Kunden verwaltete Schlüssel -> IHR_SCHLÜSSEL -> „Bearbeiten“ unter der Registerkarte „Schlüsselrichtlinie“) wie folgt:

{
    "Version": "2012-10-17",
    "Id": "key-default-1",
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::READCTED:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling",
                    "arn:aws:iam::REDACTED:root"
                ]
            },
            "Action": "kms:*",
            "Resource": "*"
        }
    ]
}

verwandte Informationen