AWS CDK - 停止生成策略
AWS CDK - Stop Generating Policies
以下CDK代码
const queue = new sqs.Queue(this, 'my-sqs-queue', {
visibilityTimeout: cdk.Duration.seconds(300)
});
const role = iam.Role.fromRoleArn(this, "myrole", "arn:aws:iam::1234:role/myrole")
const evtHandler = new lambda.Function(this, 'MyLambda', {
code: lambda.Code.fromInline(`
exports.handler = async function(event, context) {
console.log("EVENT: \n" + JSON.stringify(event, null, 2))
return context.logStreamName
}`),
handler: 'index.handler',
runtime: lambda.Runtime.NODEJS_8_10,
role
});
evtHandler.addEventSource(new SqsEventSource(queue, {
batchSize: 10 // default
}));
将设置轮询 SQS 的 lambda。惊人的!但是,它也会生成此 CF
myrolePolicy99283C52:
Type: AWS::IAM::Policy
Properties:
PolicyDocument:
Statement:
- Action:
- sqs:ReceiveMessage
- sqs:ChangeMessageVisibility
- sqs:GetQueueUrl
- sqs:DeleteMessage
- sqs:GetQueueAttributes
Effect: Allow
Resource:
Fn::GetAtt:
- sqseventloaderusw2tstF27FC9C7
- Arn
Version: "2012-10-17"
PolicyName: snssqslambdaPolicy16AEE704
Roles:
- myrole
问题是,myrole
已经有允许这些事情的政策。这也意味着执行此脚本的东西需要具有 create/update Policies/Roles 的权限:(
我组织的安全人员不会非常乐意允许这种事情发生。有没有办法阻止它生成策略并将它们附加到角色?
当我进行开发时,我通常会在工作区的另一个 window 中设置文档。您只需要将 属性 autoCreatePolicy
设置为 false。
根据文档:https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-sqs.Queue.html#autocreatepolicy
对于后来遇到此问题的任何人,将选项 mutable
设置为 false 为我解决了这个问题。
因此,在 OP 的示例中,角色将更改为:
const role = iam.Role.fromRoleArn(this, "myrole", "arn:aws:iam::1234:role/myrole", {mutable: false})
以下CDK代码
const queue = new sqs.Queue(this, 'my-sqs-queue', {
visibilityTimeout: cdk.Duration.seconds(300)
});
const role = iam.Role.fromRoleArn(this, "myrole", "arn:aws:iam::1234:role/myrole")
const evtHandler = new lambda.Function(this, 'MyLambda', {
code: lambda.Code.fromInline(`
exports.handler = async function(event, context) {
console.log("EVENT: \n" + JSON.stringify(event, null, 2))
return context.logStreamName
}`),
handler: 'index.handler',
runtime: lambda.Runtime.NODEJS_8_10,
role
});
evtHandler.addEventSource(new SqsEventSource(queue, {
batchSize: 10 // default
}));
将设置轮询 SQS 的 lambda。惊人的!但是,它也会生成此 CF
myrolePolicy99283C52:
Type: AWS::IAM::Policy
Properties:
PolicyDocument:
Statement:
- Action:
- sqs:ReceiveMessage
- sqs:ChangeMessageVisibility
- sqs:GetQueueUrl
- sqs:DeleteMessage
- sqs:GetQueueAttributes
Effect: Allow
Resource:
Fn::GetAtt:
- sqseventloaderusw2tstF27FC9C7
- Arn
Version: "2012-10-17"
PolicyName: snssqslambdaPolicy16AEE704
Roles:
- myrole
问题是,myrole
已经有允许这些事情的政策。这也意味着执行此脚本的东西需要具有 create/update Policies/Roles 的权限:(
我组织的安全人员不会非常乐意允许这种事情发生。有没有办法阻止它生成策略并将它们附加到角色?
当我进行开发时,我通常会在工作区的另一个 window 中设置文档。您只需要将 属性 autoCreatePolicy
设置为 false。
根据文档:https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-sqs.Queue.html#autocreatepolicy
对于后来遇到此问题的任何人,将选项 mutable
设置为 false 为我解决了这个问题。
因此,在 OP 的示例中,角色将更改为:
const role = iam.Role.fromRoleArn(this, "myrole", "arn:aws:iam::1234:role/myrole", {mutable: false})