Skip to content
GitHubXDiscord

QueueInlinePolicy

The QueueInlinePolicy resource allows you to attach inline IAM policies to Amazon SQS queues, providing fine-grained access control for the queue. For more information, refer to the AWS SQS QueueInlinePolicys documentation.

Create a basic inline policy for an SQS queue that allows sending messages:

import AWS from "alchemy/aws/control";
const queueInlinePolicy = await AWS.SQS.QueueInlinePolicy("basicPolicy", {
PolicyDocument: {
Version: "2012-10-17",
Statement: [
{
Effect: "Allow",
Action: "SQS:SendMessage",
Resource: "arn:aws:sqs:us-west-2:123456789012:MyQueue",
Principal: "*"
}
]
},
Queue: "MyQueue"
});

Attach a more complex inline policy that allows multiple actions on the SQS queue:

const advancedPolicy = await AWS.SQS.QueueInlinePolicy("advancedPolicy", {
PolicyDocument: {
Version: "2012-10-17",
Statement: [
{
Effect: "Allow",
Action: [
"SQS:SendMessage",
"SQS:ReceiveMessage",
"SQS:DeleteMessage"
],
Resource: "arn:aws:sqs:us-west-2:123456789012:MyQueue",
Principal: {
AWS: "arn:aws:iam::123456789012:user/MyUser"
}
}
]
},
Queue: "MyQueue",
adopt: true // Adopt existing resource if it already exists
});

Demonstrate how to add conditions to the policy for additional security:

const conditionalPolicy = await AWS.SQS.QueueInlinePolicy("conditionalPolicy", {
PolicyDocument: {
Version: "2012-10-17",
Statement: [
{
Effect: "Allow",
Action: "SQS:SendMessage",
Resource: "arn:aws:sqs:us-west-2:123456789012:MyQueue",
Principal: "*",
Condition: {
"StringEquals": {
"aws:SourceAccount": "123456789012"
}
}
}
]
},
Queue: "MyQueue"
});

Create inline policies for multiple SQS queues in a single deployment:

const firstQueuePolicy = await AWS.SQS.QueueInlinePolicy("firstQueuePolicy", {
PolicyDocument: {
Version: "2012-10-17",
Statement: [
{
Effect: "Allow",
Action: "SQS:SendMessage",
Resource: "arn:aws:sqs:us-west-2:123456789012:FirstQueue",
Principal: "*"
}
]
},
Queue: "FirstQueue"
});
const secondQueuePolicy = await AWS.SQS.QueueInlinePolicy("secondQueuePolicy", {
PolicyDocument: {
Version: "2012-10-17",
Statement: [
{
Effect: "Allow",
Action: [
"SQS:ReceiveMessage",
"SQS:DeleteMessage"
],
Resource: "arn:aws:sqs:us-west-2:123456789012:SecondQueue",
Principal: {
AWS: "arn:aws:iam::123456789012:user/AnotherUser"
}
}
]
},
Queue: "SecondQueue"
});