允许 CodeBuildAction 更新 SSM 参数
Allow CodeBuildAction to update SSM parameter
我目前正在尝试通过 CodeBuildAction 设置 SSM Parameter Store 值。我的第一次尝试产生了 254
return 代码,我猜这是因为请求未被授权。然后,我尝试将托管策略附加到与 CodeBuildAction 关联的角色,但 cdk deploy
失败:
Policy arn:aws:iam::aws:policy/AWSServiceRoleForAmazonSSM does not exist or is not attachable. (Service: AmazonIdentityManagement; Status Code: 404; Error Code: NoSuchEntity; Request ID: 2f65f8db-64a5-4173-ac45-de4c56bffa44; Proxy: nu
ll)
角色设置如下:
this.codeBuildRole = new Role(this, "application-build-project-role", {
assumedBy: new ServicePrincipal("codebuild.amazonaws.com"),
managedPolicies: [
ManagedPolicy.fromAwsManagedPolicyName(
"AmazonEC2ContainerRegistryPowerUser"
),
ManagedPolicy.fromAwsManagedPolicyName("AWSServiceRoleForAmazonSSM"), // THIS IS THE NEW PART
],
});
我明白这意味着我使用了错误的政策,但我正在努力寻找替代方案。
是否有适用于此处的托管策略?如果没有,我将如何设置内联策略来实现我想要做的事情?
我能够让它与这个一起工作:
this.codeBuildRole = new Role(this, "application-build-project-role", {
assumedBy: new ServicePrincipal("codebuild.amazonaws.com"),
managedPolicies: [
ManagedPolicy.fromAwsManagedPolicyName(
"AmazonEC2ContainerRegistryPowerUser"
),
],
inlinePolicies: {
SSMPutItem: new PolicyDocument({
statements: [
new PolicyStatement({
resources: ["*"],
actions: ["ssm:*"],
effect: Effect.ALLOW,
}),
],
}),
},
});
它可能比需要的更放松,但这确实解决了问题。
解决这个问题的惯用方法是使用 CDK 的抽象来修改角色,而不是创建自己的角色。
假设您要更新特定参数,这就是它的样子。您将为拥有的每个参数执行此操作。
mySsmParameter.grantWrite(myCodeBuildAction.actionProperties.role);
或者,您可以授予对操作项目的访问权限:
mySsmParameter.grantWrite(myCodeBuildProject);
仅此而已,CDK 将在后台处理所需的语句。
我目前正在尝试通过 CodeBuildAction 设置 SSM Parameter Store 值。我的第一次尝试产生了 254
return 代码,我猜这是因为请求未被授权。然后,我尝试将托管策略附加到与 CodeBuildAction 关联的角色,但 cdk deploy
失败:
Policy arn:aws:iam::aws:policy/AWSServiceRoleForAmazonSSM does not exist or is not attachable. (Service: AmazonIdentityManagement; Status Code: 404; Error Code: NoSuchEntity; Request ID: 2f65f8db-64a5-4173-ac45-de4c56bffa44; Proxy: nu
ll)
角色设置如下:
this.codeBuildRole = new Role(this, "application-build-project-role", {
assumedBy: new ServicePrincipal("codebuild.amazonaws.com"),
managedPolicies: [
ManagedPolicy.fromAwsManagedPolicyName(
"AmazonEC2ContainerRegistryPowerUser"
),
ManagedPolicy.fromAwsManagedPolicyName("AWSServiceRoleForAmazonSSM"), // THIS IS THE NEW PART
],
});
我明白这意味着我使用了错误的政策,但我正在努力寻找替代方案。
是否有适用于此处的托管策略?如果没有,我将如何设置内联策略来实现我想要做的事情?
我能够让它与这个一起工作:
this.codeBuildRole = new Role(this, "application-build-project-role", {
assumedBy: new ServicePrincipal("codebuild.amazonaws.com"),
managedPolicies: [
ManagedPolicy.fromAwsManagedPolicyName(
"AmazonEC2ContainerRegistryPowerUser"
),
],
inlinePolicies: {
SSMPutItem: new PolicyDocument({
statements: [
new PolicyStatement({
resources: ["*"],
actions: ["ssm:*"],
effect: Effect.ALLOW,
}),
],
}),
},
});
它可能比需要的更放松,但这确实解决了问题。
解决这个问题的惯用方法是使用 CDK 的抽象来修改角色,而不是创建自己的角色。
假设您要更新特定参数,这就是它的样子。您将为拥有的每个参数执行此操作。
mySsmParameter.grantWrite(myCodeBuildAction.actionProperties.role);
或者,您可以授予对操作项目的访问权限:
mySsmParameter.grantWrite(myCodeBuildProject);
仅此而已,CDK 将在后台处理所需的语句。