%3F.png)
Recientemente "rompí" Control Tower al agregar manualmente una clave KMS a los temas SNS de Control Tower. Esto no funcionó muy bien cuando Control Tower realizó una verificación o actualización en las pilas. Tuve que quitar la clave y empujar algunas pilas para que estuviera en buen estado, pero ahora los temas de SNS no están cifrados y Security Hub no está contento.
Anteriormente implementé una clave KMS para usar en temas SNS en todas las cuentas de la organización (una en cada una), pero ahora entiendo que Control Tower puede hacer esto por mí si le doy una clave al crear o modificar la zona de aterrizaje. Por lo que tengo entendido esta clave tiene que ser una clave única en la cuenta de administración y con una política que permita al menos los servicios Config y CloudTrail, pero también esté disponible para usar en todas mis cuentas.
Si alguien pudiera proporcionarme una plantilla de cómo quedaría, se lo agradecería mucho. Por favor y gracias. :)
Respuesta1
No podía dejar pasar esto, así que fui a probar y descubrí que la siguiente probablemente sea una buena solución.
Puntos clave que aprendí:
- Parece que los servicios solo necesitan permisos "kms:GenerateDataKey".
- Utilice la condición "StringLike", no "StringEquals" si desea *-comodín
Estedocumentaciónfue bastante útil. No logré elaborar una política que utilizara "aws:SourceArn" o "aws:SourceAccount", pero sí lo logré con "kms:EncryptionContext:context".
Aquí está mi política, el número de cuenta está redactado:
{
"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": "*"
}
]
}
Espero que alguien encuentre esto útil. Tenga en cuenta que sospecho que podría y tal vez debería utilizar condiciones para limitar la última declaración. No logré que eso funcionara yo mismo.
Respuesta2
Pude hacer que esto funcionara mediante una combinación de la respuesta anterior, además de permitir que los siguientes roles de servicio de AWS usen la clave:
"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"
No sé si todo esto es necesario o no, solo lo supuse.