Estoy creando recursos de S3, SQS y KMS con aws cdk. Habilité el cifrado en los recursos de S3 y SQS. Cuando habilité la notificación de S3 a SQS, recibo un error de dependencia circular. Cuando elimino la configuración de KMS de mi código, funciona.
Repositorio de GitHub: https://github.com/techcoderunner/s3-sqs-kms-sample
from aws_cdk import aws_kms as kms from aws_cdk import aws_s3 as s3 from aws_cdk import aws_sqs as sqs from aws_cdk import aws_s3_notifications as s3notif kms_key = kms.Key(self, 'ssl_s3_sqs_kms_key', alias='sslS3SqsKmsKey', description='This is kms key', enabled=True, enable_key_rotation=True, policy=kms_policy_document, ) # Create the S3 bucket bucket = s3.Bucket( self, "ssl_s3_bucket_raw_kms", bucket_name="ssl-s3-bucket-kms-raw", encryption=s3.BucketEncryption.KMS, encryption_key=kms_key, ) # Create the SQS queue queue = sqs.Queue( self, "ssl_sqs_event_queue", queue_name="ssl-sqs-kms-event-queue", encryption=sqs.QueueEncryption.KMS, encryption_master_key=kms_key, ) # Create S3 notification object which points to SQS notification = s3notif.SqsDestination(queue) filter1 = s3.NotificationKeyFilter(prefix="home/") # Attach notificaton event to S3 bucket bucket.add_event_notification(s3.EventType.OBJECT_CREATED,notification,filter1)Abrí un informe de error de GitHub para esto.
Parece que el problema raíz es que se agrega la siguiente condición a la clave KMS:
Plantilla de salida de CDK ssls3sqskmskey83E47315.Properties.KeyPolicy.Statement[1] :
{ "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*" ], "Condition": { "ArnLike": { "aws:SourceArn": { "Fn::GetAtt": [ "ssls3bucketrawkms4B1E1122", "Arn" ] } } }, },El depósito de S3 depende de la clave de KMS para el cifrado, y la clave de KMS tiene una condición que depende del depósito de S3.
Pude implementar la pila después de usar escotillas de escape para eliminar la condición:
# Delete the circular reference cfn_kms_key = kms_key.node.default_child cfn_kms_key.add_property_deletion_override("KeyPolicy.Statement.1")