我正在使用CDK,但我认为使用纯CloudFormation也会发生同样的问题(希望可以解决)
我正在使用KMS密钥创建S3存储桶 像这样的东西:
key = aws_kms.Key(self, id="MasterKey"...)
bucket = aws_s3.Bucket(..., encryption_key=key, ...)
然后,我试图通过在所有未使用存储桶策略的内容上添加“拒绝”来加强该策略,例如this aws blog(这不是针对KMS,而是针对一个S3存储桶,但想法是一样的) 像这样:
key_policy = iam.PolicyStatement(
actions=["kms:Encrypt"],
effect=iam.Effect.DENY,
resources=['*'], # In a key policy, "*" means "this CMK"
principals=[iam.ServicePrincipal(service="*")],
conditions={
"StringNotLike": {
"aws:userId": f"{bucket_role_id}:*",
},
}
)
key.add_to_resource_policy(key_policy)
当我尝试部署时,出现循环依赖错误,这是有道理的,因为 S3创建需要KMS,而KMS创建使用使用S3角色ID的策略。
是否有解决此问题的方法(在事实或类似情况之后不求助于使用boto3)?这是CDK还是CloudFormation问题? 我可以想象,如果我们可以在部署过程中更新资源,但是在部署资源之后,那可以工作。
感谢您的帮助。