med*_*y56 6 amazon-web-services amazon-iam aws-cdk
我正在设置一个 CDK 应用程序,以便可以将其部署到多个 AWS 账户(开发和生产)。该产品帐户是在几周前由另一位开发人员启动的,但通过使用在带有附加策略的CDKDeployUser组中调用的用户来按预期工作。使用的策略(适用于产品帐户中与 CDK 相关的所有日常功能)是:CDKDeployUsersCDKDeployPolicy
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Resource": [
"arn:aws:iam::*:role/cdk-*"
]
},
{
"Effect": "Allow",
"Action": [
"cloudformation:*"
],
"Resource": [
"arn:aws:cloudformation:us-west-2:*:*"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
当我设置开发帐户时,我创建了一个完全相同的用户、组、策略并尝试运行,cdk bootstrap但出现了关于能够承担cdk-*新创建的帐户中尚不存在的相关角色的错误。我假设 Cloudformation 会像在产品帐户中一样创建这些角色,但同样,我也不确切知道该帐户是如何引导的。
为了“让它工作”,我向CDKDeployUsers组添加了管理员策略并运行cdk bootstrap,当然引导程序确实创建了以前无法使用的必要角色。
那么,引导必须由管理员完成,即使后续 CDK 操作可以用少得多的权限执行,这是众所周知的事情吗?
我在任何地方都找不到它的记录。期望我们每次需要引导时都添加管理策略(或从 CDK v2 升级引导模板),然后再分离它们,这似乎很疯狂。
因此,我一直在研究同样的问题,并且必须基本上只是运行会吐出的错误cdk bootstrap,同时逐步向角色添加权限。
真的很烦人/麻烦的过程,正如你所说,我真的希望 AWS 能够发布权限,即使只是针对默认的引导配置。
我已成功完成以下角色/权限配置,成功为我引导了帐户。
通过更具体地确定资源范围,可能需要进行一些改进,但希望这会对您的工作有所帮助。
我一直在使用引导模板 v122.20.0上的CDK 版本。
如果使用不同版本的模板,完全有可能不需要其中一些权限。例如,我最初在某个版本上进行测试v10,发现ecr:SetRepositoryPolicy该版本不需要。
{
"Statement": [
{
"Action": [
"cloudformation:DescribeStackEvents",
"cloudformation:DeleteStack",
"cloudformation:CreateChangeSet",
"cloudformation:DescribeChangeSet",
"cloudformation:ExecuteChangeSet",
"cloudformation:DescribeStacks",
"cloudformation:GetTemplate"
],
"Effect": "Allow",
"Resource": [
"arn:aws:cloudformation:*:{account number}:stack/CDKToolkit/*"
]
},
{
"Action": [
"iam:GetRole",
"iam:UntagRole",
"iam:GetPolicy",
"iam:TagRole",
"iam:CreateRole",
"iam:DeleteRole",
"iam:AttachRolePolicy",
"iam:PutRolePolicy",
"iam:TagPolicy",
"iam:DetachRolePolicy",
"iam:DeleteRolePolicy",
"iam:UntagPolicy",
"iam:UpdateRole",
"iam:GetRolePolicy"
],
"Effect": "Allow",
"Resource": [
"arn:aws:iam::{account number}:policy/*",
"arn:aws:iam::{account number}:role/cdk-*"
]
},
{
"Action": [
"s3:PutEncryptionConfiguration",
"s3:PutBucketPublicAccessBlock",
"s3:PutBucketPolicy",
"s3:CreateBucket",
"s3:DeleteBucketPolicy",
"s3:DeleteBucket",
"s3:GetBucketPolicy",
"s3:PutBucketVersioning"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::cdk-*"
]
},
{
"Action": [
"ssm:PutParameter",
"ssm:DeleteParameter",
"ssm:GetParameters",
"ssm:GetParameter"
],
"Effect": "Allow",
"Resource": [
"arn:aws:ssm:*:{account number}:parameter/cdk-bootstrap/*"
]
},
{
"Action": [
"ecr:DeleteRepository",
"ecr:DescribeRepositories",
"ecr:SetRepositoryPolicy"
],
"Effect": "Allow",
"Resource": [
"arn:aws:ecr:*:{account number}:repository/cdk-*"
]
},
{
"Action": [
"ecr:CreateRepository"
],
"Effect": "Allow",
"Resource": [
"*"
]
}
],
"Version": "2012-10-17"
}
Run Code Online (Sandbox Code Playgroud)
希望这对您有帮助。
编辑:添加是"cloudformation:GetTemplate"因为我刚刚发现需要针对已经引导的帐户重新运行引导程序-.-
| 归档时间: |
|
| 查看次数: |
1507 次 |
| 最近记录: |