使用CDK Deploy需要哪些IAM权限?

时间:2019-07-19 18:43:01

标签: amazon-cloudformation aws-cdk

我的团队有一个在执行IAM角色下运行的管道。我们希望通过CloudFormation或CDK将代码部署到AWS。

过去,在使用执行IAM角色创建/更新CloudFormation堆栈之前,我们会将一些工件上传到S3存储桶中。

我们最近改用了CDK,并尝试使用CDK Deploy来实现尽可能多的自动化,但是遇到了很多我们需要添加的权限项目,这些权限项目是我们以前没有的(例如cloudformation :GetTemplate)。

我们不想只授予*(我们希望遵循最低特权),但是我找不到任何明确的文档清单。

CDK Deploy依赖于标准权限列表吗?除了标准清单之外,还有什么“好事”?

3 个答案:

答案 0 :(得分:18)

我正在使用以下策略来部署CDK应用程序。除了CFN完全访问权限和S3完全访问CDK过渡存储段之外,它还授予通过CloudFormation执行一切的权限。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "cloudformation:*"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "aws:CalledVia": [
                        "cloudformation.amazonaws.com"
                    ]
                }
            },
            "Action": "*",
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::cdktoolkit-stagingbucket-*",
            "Effect": "Allow"
        }
    ]
}

您可能想为您不想允许的事情添加一些明确的拒绝。

此外,请注意,上述条件并不意味着委托人仅限于CloudFormation可能使用的方法。潜在的攻击媒介是创建由Lambda函数支持的自定义CFN资源。通过该自定义资源创建资源时,您可以在Lambda中执行任何操作,因为它是通过CloudFormation触发的。

答案 1 :(得分:3)

由于我在任何地方都找不到任何文档,因此我不得不进行反复试验才能使其正常工作。

除了需要创建在堆栈中定义的实际资源所需的权限外,还需要提供以下内容:

cloudformation:CreateChangeSet
cloudformation:DescribeChangeSet
cloudformation:ExecuteChangeSet
cloudformation:DescribeStackEvents
cloudformation:DeleteChangeSet

要创建的堆栈ARN以及引导程序堆栈:

arn:aws:cloudformation:${AWS::Region}:${AWS::AccountId}:stack/CDKToolkit/*

对于boostrap添加的存储桶,您还需要s3权限(否则,您将收到可怕的Forbidden: null错误):

s3:*Object
s3:ListBucket 

arn:aws:s3:::cdktoolkit-stagingbucket-*

答案 2 :(得分:-1)

我尝试提供完整的cloudformation权限

{
    "Sid": "VisualEditor1",
    "Effect": "Allow",
    "Action": "cloudformation:*",
    "Resource": "*"
}

但这还不够,这是使用codebuild的cdk deploy命令的输出。

dev-MyStack 
dev-MyStack: deploying... 

 ❌  dev-MyStack failed: Forbidden: null 
null 

我在atm上唯一的解决方法是授予管理员权限,这是不理想的