Ala*_*Kay 24 aws-cloudformation amazon-iam aws-cdk
我的团队有一个在执行 IAM 角色下运行的管道。我们希望通过 CloudFormation 或 CDK 将代码部署到 AWS。
过去,我们会在创建/更新 CloudFormation 堆栈之前使用执行 IAM 角色将一些工件上传到 S3 存储桶。
我们最近切换到 CDK,并试图通过使用 CDK Deploy 获得尽可能多的自动化,但遇到了许多我们需要添加的权限项,而我们之前没有这些项(例如,cloudformation:GetTemplate) .
我们不想只授予 * (我们想遵循最小权限),但我找不到任何明确的记录列表。
CDK Deploy 是否有标准的权限列表?除了标准列表之外,还有什么“值得拥有的”吗?
udo*_*dan 29
我正在使用以下策略来部署 CDK 应用程序。除了对 CDK 临时存储桶的 CFN 完全访问权限和 S3 完全访问权限之外,它还授予通过 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"
}
]
}
Run Code Online (Sandbox Code Playgroud)
您可能想要为您不想允许的事情添加一些明确的拒绝。
另外,请注意,上述条件并不意味着委托人仅限于 CloudFormation 可能发生的事情。潜在的攻击媒介是创建自定义 CFN 资源,由 Lambda 函数支持。通过该自定义资源创建资源时,您可以在 Lambda 中执行任何操作,因为它是通过 CloudFormation 触发的。
jis*_*shi 21
由于我在任何地方都找不到任何文档,因此我不得不进行一些反复试验才能使其正常工作。
除了创建您在堆栈中定义的实际资源所需的权限外,您还需要提供以下内容:
cloudformation:DescribeStacks
cloudformation:CreateChangeSet
cloudformation:DescribeChangeSet
cloudformation:ExecuteChangeSet
cloudformation:DescribeStackEvents
cloudformation:DeleteChangeSet
Run Code Online (Sandbox Code Playgroud)
对于您正在创建的堆栈 ARN 以及引导程序堆栈:
arn:aws:cloudformation:${AWS::Region}:${AWS::AccountId}:stack/CDKToolkit/*
Run Code Online (Sandbox Code Playgroud)
您还需要对 boostrap 添加的存储桶的 s3 权限(否则您会遇到可怕的Forbidden: null错误):
s3:*Object
s3:ListBucket
s3:GetBucketLocation
Run Code Online (Sandbox Code Playgroud)
到
arn:aws:s3:::cdktoolkit-stagingbucket-*
Run Code Online (Sandbox Code Playgroud)
CDK 有两个阶段:引导阶段和合成/部署阶段。
在引导的情况下,使用的 IAM 角色或配置文件必须具有以下策略权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "StsAccess",
"Effect": "Allow",
"Action": [
"sts:AssumeRole",
"iam:*Role*"
],
"Resource": [
"arn:aws:iam::${AWS_ACCOUNT_ID}:role/cdk-*"
]
},
{
"Action": [
"cloudformation:*"
],
"Resource": [
"arn:aws:cloudformation:${AWS_REGION}:${AWS_ACCOUNT_ID}:stack/CDKToolkit/*"
],
"Effect": "Allow"
},
{
"Sid": "S3Access",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"*"
]
},
{
"Sid": "ECRAccess",
"Effect": "Allow",
"Action": [
"ecr:SetRepositoryPolicy",
"ecr:GetLifecyclePolicy",
"ecr:PutImageScanningConfiguration",
"ecr:DescribeRepositories",
"ecr:CreateRepository",
"ecr:DeleteRepository"
],
"Resource": [
"arn:aws:ecr:${AWS_REGION}:${AWS_ACCOUNT_ID}:repository/cdk-*"
]
},
{
"Effect": "Allow",
"Action": [
"ssm:GetParameter*",
"ssm:PutParameter*",
"ssm:DeleteParameter*"
],
"Resource": "arn:aws:ssm:${AWS_REGION}:${AWS_ACCOUNT_ID}:parameter/cdk-bootstrap/*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
在部署的情况下,角色或配置文件必须具有以下强制权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iam:PassRole"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Resource": [
"arn:aws:iam::*:role/cdk-*"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
加上您正在部署的基础设施所需的所有权限。
我可以建议的是使用两个不同的角色,以便您拥有更高的安全性,并且万一您使用 GitHub 工作流程来利用 OpenIdConnect。
引导策略可以通过限制权限来改进,但缺乏文档,所以我不深入研究具体方面(例如 s3)
| 归档时间: |
|
| 查看次数: |
6365 次 |
| 最近记录: |