我正在和两个CDK栈一起工作。
iam.ManagedPolicyIManagedPolicy),导入角色(IRole),然后使用IRole.addManagedPolicy(IManagedPolicy)将托管策略附加到角色// Stack B
const iam = require("@aws-cdk/aws-iam");
const ec2InstanceRole = iam.Role.fromRoleArn(this, 'my-role', 'the-arn-of-the-role');
const managedPolicy = iam.ManagedPolicy.fromManagedPolicyName(this, 'my-managed-policy', 'name-of-the-policy');
ec2InstanceRole.addManagedPolicy(managedPolicy);当我部署Stack B时,没有错误。但是,角色也没有被修改。如果我没有这样做,我做的是:
IRole)IRole.attachInlinePolicy(iam.Policy)并在iam.Policy中定义与Stack A在托管策略中定义的权限相同的权限,可以修改堆栈B中的角色。// Stack B
const iam = require("@aws-cdk/aws-iam");
const ec2InstanceRole = iam.Role.fromRoleArn(this, 'my-role', 'the-arn-of-the-role');
ec2InstanceRole.attachInlinePolicy(
new iam.Policy(this, 'test-policy', {
policyName: 'test-policy-name',
statements: [
new iam.PolicyStatement({
effect: iam.Effect.ALLOW,
actions: ['product:capability'],
resources: ['arn-of-resource']
})
]
})
);这是可行的。通过添加包含定义的权限的新内联策略来修改角色。
一些额外的背景信息..。
为什么第一种方法失败而第二种方法成功?是否认为将内联策略附加到静态导入的角色是“更安全的”,因为我必须显式定义在策略中添加的权限,而不是从另一个堆栈中提取托管策略?这仅仅是在执行附加操作时在同一个堆栈中定义策略的问题(同样是某种安全措施)吗?我想做的事情有什么更根本的错误吗?
任何想法都将不胜感激。
发布于 2021-08-31 18:12:03
发布于 2021-11-19 01:47:47
我找到的解决办法如下。它并不完美,但它很好:
示例
const statement = new PolicyStatement({
effect: Effect.ALLOW,
actions: ['execute-api:Invoke'],
resources: [
//SOME RESOURCE
]
})
this.cloudAuthAccessPolicy = new ManagedPolicy(this, 'FOO', {
managedPolicyName: 'FOO',
description: "BAR",
statements: [
statement
]
})
const role = Role.fromRoleArn(this, `name`, `arn:aws:iam::${props.account}:role/SOME_ROLE_NAME`)
role.addToPolicy(statement)发布于 2021-07-21 17:11:38
这很有趣。如果您还没有获得有关托管/内联策略的其他信息,我建议您阅读policies.html。
另外,您是否尝试过在stack B中创建ManagedPolicy并应用它,而不是从不同的堆栈导入它?可能是进口失败或诸如此类的事情。
https://stackoverflow.com/questions/68472867
复制相似问题