%20aus%3F.png)
Ich habe kürzlich Control Tower „kaputt gemacht“, indem ich den SNS-Themen von Control Tower manuell einen KMS-Schlüssel hinzugefügt habe. Das hat nicht besonders gut funktioniert, als Control Tower eine Überprüfung oder ein Upgrade der Stapel durchführte. Ich musste den Schlüssel entfernen und einige Stapel anstoßen, um sie in einen gesunden Zustand zu versetzen, aber jetzt sind die SNS-Themen unverschlüsselt und Security Hub ist unglücklich.
Zuvor habe ich einen KMS-Schlüssel für die Verwendung bei SNS-Themen für alle Org-Konten bereitgestellt (jeweils einen), aber ich verstehe jetzt, dass Control Tower dies für mich tun kann, wenn ich ihm beim Erstellen oder Ändern der Landing Zone einen Schlüssel gebe. Soweit ich weiß, muss dieser Schlüssel ein einzelner Schlüssel im Verwaltungskonto sein und mit einer Richtlinie versehen sein, die mindestens Config- und CloudTrail-Dienste zulässt, aber auch für die Verwendung in allen meinen Konten verfügbar ist.
Wenn mir jemand eine Vorlage dafür geben könnte, wie das aussehen würde, wäre ich sehr dankbar. Bitte und danke. :)
Antwort1
Ich konnte das nicht auf sich beruhen lassen, also begann ich mit Tests und kam zu dem Schluss, dass das Folgende wahrscheinlich eine gute Lösung ist.
Wichtige Punkte, die ich gelernt habe:
- Es sieht so aus, als ob die Dienste nur „kms:GenerateDataKey“-Berechtigungen benötigen.
- Verwenden Sie die Bedingung „StringLike“ und nicht „StringEquals“, wenn Sie das Platzhalterzeichen * verwenden möchten.
DasDokumentationwar ziemlich nützlich. Es gelang mir nicht, eine Richtlinie zu erstellen, die „aws:SourceArn“ oder „aws:SourceAccount“ verwendete, aber mit „kms:EncryptionContext:context“ war ich erfolgreich.
Hier ist meine Police, Kontonummern redigiert:
{
"Version": "2012-10-17",
"Id": "SNS-KMS-Key",
"Statement": [
{
"Sid": "Key admin in mgmt account",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::112211221122:root"
},
"Action": "kms:*",
"Resource": "*"
},
{
"Sid": "AWS-services permissions in all accounts",
"Effect": "Allow",
"Principal": {
"Service": [
"config.amazonaws.com",
"cloudtrail.amazonaws.com"
]
},
"Action": [
"kms:GenerateDataKey",
"kms:Encrypt",
"kms:Decrypt",
"kms:DescribeKey",
"kms:ReEncrypt*"
],
"Resource": "*"
}
]
}
Ich hoffe, jemand findet das nützlich. Bitte beachten Sie, dass ich vermute, dass Sie Bedingungen verwenden könnten und vielleicht sollten, um die letzte Anweisung einzuschränken. Ich habe das selbst nicht zum Laufen gebracht.
Antwort2
Ich konnte dies zum Laufen bringen, indem ich die obige Antwort kombinierte und den folgenden AWS-Servicerollen die Verwendung des Schlüssels erlaubte:
"arn:aws:iam::112211221122:role/service-role/AWSControlTowerConfigAggregatorRoleForOrganizations",
"arn:aws:iam::112211221122:role/service-role/AWSControlTowerStackSetRole",
"arn:aws:iam::112211221122:role/service-role/AWSControlTowerAdmin",
"arn:aws:iam::112211221122:role/service-role/AWSControlTowerCloudTrailRole"
Ich weiß nicht, ob das alles nötig ist oder nicht, ich habe nur geraten.