Skip to content
GitHubXDiscord

TopicPolicy

The TopicPolicy resource allows you to manage access policies for Amazon Simple Notification Service (SNS) topics. This resource is essential for controlling permissions and ensuring secure access to your SNS topics. For more information, refer to the AWS SNS TopicPolicys documentation.

Create a basic SNS TopicPolicy that allows publishing from a specific AWS service.

import AWS from "alchemy/aws/control";
const snsTopicPolicy = await AWS.SNS.TopicPolicy("myTopicPolicy", {
Topics: ["arn:aws:sns:us-east-1:123456789012:myTopic"],
PolicyDocument: {
Version: "2012-10-17",
Statement: [
{
Effect: "Allow",
Principal: {
Service: "lambda.amazonaws.com"
},
Action: "SNS:Publish",
Resource: "arn:aws:sns:us-east-1:123456789012:myTopic"
}
]
},
adopt: false // Default is false; adopt existing resource if true
});

Configure a TopicPolicy with an additional statement for allowing a specific IAM role to publish to the SNS topic.

const advancedSnsTopicPolicy = await AWS.SNS.TopicPolicy("advancedTopicPolicy", {
Topics: ["arn:aws:sns:us-east-1:123456789012:myAdvancedTopic"],
PolicyDocument: {
Version: "2012-10-17",
Statement: [
{
Effect: "Allow",
Principal: {
Service: "lambda.amazonaws.com"
},
Action: "SNS:Publish",
Resource: "arn:aws:sns:us-east-1:123456789012:myAdvancedTopic"
},
{
Effect: "Allow",
Principal: {
AWS: "arn:aws:iam::123456789012:role/MyPublishRole"
},
Action: "SNS:Publish",
Resource: "arn:aws:sns:us-east-1:123456789012:myAdvancedTopic"
}
]
}
});

Manage policies for multiple SNS topics using a single TopicPolicy resource.

const multiTopicPolicy = await AWS.SNS.TopicPolicy("multiTopicPolicy", {
Topics: [
"arn:aws:sns:us-east-1:123456789012:myFirstTopic",
"arn:aws:sns:us-east-1:123456789012:mySecondTopic"
],
PolicyDocument: {
Version: "2012-10-17",
Statement: [
{
Effect: "Allow",
Principal: {
Service: "s3.amazonaws.com"
},
Action: "SNS:Publish",
Resource: [
"arn:aws:sns:us-east-1:123456789012:myFirstTopic",
"arn:aws:sns:us-east-1:123456789012:mySecondTopic"
]
}
]
}
});