Skip to content

Commit

Permalink
refactor(AWS SQS): Optimize IAM permissions generation (#11685)
Browse files Browse the repository at this point in the history
  • Loading branch information
ROSeaboyer committed Jan 18, 2023
1 parent 2f4de84 commit 99cd9e6
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 39 deletions.
38 changes: 19 additions & 19 deletions lib/plugins/aws/package/compile/events/sqs.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,16 @@ class AwsCompileSQSEvents {
}

compileSQSEvents() {
const sqsStatement = {
Effect: 'Allow',
Action: ['sqs:ReceiveMessage', 'sqs:DeleteMessage', 'sqs:GetQueueAttributes'],
Resource: [],
};

this.serverless.service.getAllFunctions().forEach((functionName) => {
const functionObj = this.serverless.service.getFunction(functionName);

if (functionObj.events) {
const sqsStatement = {
Effect: 'Allow',
Action: ['sqs:ReceiveMessage', 'sqs:DeleteMessage', 'sqs:GetQueueAttributes'],
Resource: [],
};

functionObj.events.forEach((event) => {
if (event.sqs) {
let EventSourceArn;
Expand Down Expand Up @@ -124,21 +124,21 @@ class AwsCompileSQSEvents {
);
}
});

// update the PolicyDocument statements (if default policy is used)
if (
this.serverless.service.provider.compiledCloudFormationTemplate.Resources
.IamRoleLambdaExecution
) {
const statement =
this.serverless.service.provider.compiledCloudFormationTemplate.Resources
.IamRoleLambdaExecution.Properties.Policies[0].PolicyDocument.Statement;
if (sqsStatement.Resource.length) {
statement.push(sqsStatement);
}
}
}
});

// update the PolicyDocument statements (if default policy is used)
if (
this.serverless.service.provider.compiledCloudFormationTemplate.Resources
.IamRoleLambdaExecution
) {
const statement =
this.serverless.service.provider.compiledCloudFormationTemplate.Resources
.IamRoleLambdaExecution.Properties.Policies[0].PolicyDocument.Statement;
if (sqsStatement.Resource.length) {
statement.push(sqsStatement);
}
}
}
}

Expand Down
24 changes: 4 additions & 20 deletions test/unit/lib/plugins/aws/package/compile/events/sqs.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -150,30 +150,14 @@ describe('test/unit/lib/plugins/aws/package/compile/events/sqs.test.js', () => {

it('should ensure necessary IAM statememnts', () => {
const iamRoleStatments = [
{
Effect: 'Allow',
Action: ['sqs:ReceiveMessage', 'sqs:DeleteMessage', 'sqs:GetQueueAttributes'],
Resource: ['arn:aws:sqs:region:account:some-queue-name'],
},
{
Effect: 'Allow',
Action: ['sqs:ReceiveMessage', 'sqs:DeleteMessage', 'sqs:GetQueueAttributes'],
Resource: ['arn:aws:sqs:region:account:MyQueue'],
},
{
Effect: 'Allow',
Action: ['sqs:ReceiveMessage', 'sqs:DeleteMessage', 'sqs:GetQueueAttributes'],
Resource: [{ 'Fn::GetAtt': ['SomeQueue', 'Arn'] }],
},
{
Effect: 'Allow',
Action: ['sqs:ReceiveMessage', 'sqs:DeleteMessage', 'sqs:GetQueueAttributes'],
Resource: [{ 'Fn::ImportValue': 'ForeignQueue' }],
},
{
Effect: 'Allow',
Action: ['sqs:ReceiveMessage', 'sqs:DeleteMessage', 'sqs:GetQueueAttributes'],
Resource: [
'arn:aws:sqs:region:account:some-queue-name',
'arn:aws:sqs:region:account:MyQueue',
{ 'Fn::GetAtt': ['SomeQueue', 'Arn'] },
{ 'Fn::ImportValue': 'ForeignQueue' },
{
'Fn::Join': [
':',
Expand Down

0 comments on commit 99cd9e6

Please sign in to comment.