我的团队有一个在执行IAM角色下运行的管道。我们希望通过CloudFormation或CDK将代码部署到AWS。
过去,在使用执行IAM角色创建/更新CloudFormation堆栈之前,我们会将一些工件上传到S3存储桶中。
我们最近改用了CDK,并尝试使用CDK Deploy来实现尽可能多的自动化,但是遇到了很多我们需要添加的权限项目,这些权限项目是我们以前没有的(例如cloudformation :GetTemplate)。
我们不想只授予*(我们希望遵循最低特权),但是我找不到任何明确的文档清单。
CDK Deploy依赖于标准权限列表吗?除了标准清单之外,还有什么“好事”?
答案 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上唯一的解决方法是授予管理员权限,这是不理想的