首页 > 解决方案 > 尝试添加到资源策略时解决循环依赖关系

问题描述

我正在使用 CDK,但我认为使用纯 CloudFormation 也会发生相同的问题(希望可以解决)

我正在创建一个带有 KMS 密钥的 S3 存储桶,如下所示:

key = aws_kms.Key(self, id="MasterKey"...)
bucket = aws_s3.Bucket(..., encryption_key=key, ...)

然后,我试图通过在不使用存储桶策略的任何内容上添加拒绝来收紧政策,就像这样,正如这个 aws 博客所建议的那样(这不是针对 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 问题?我想如果我们可以在部署期间更新资源,但在部署资源之后,那么这可以工作。

谢谢你的帮助。

标签: amazon-cloudformationaws-cdk

解决方案


推荐阅读