Skip to content

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.

Minimal Example ​

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

ts
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"
});

Advanced Configuration ​

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

ts
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
});

Policy with Conditions ​

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

ts
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"
});

Multi-Queue Management ​

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

ts
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"
});