我想从跨账户 Amazon Elastic Compute Cloud (Amazon EC2) 实例发布到 Amazon Simple Notification Service (Amazon SNS) 主题。我想为使用公有子网的 EC2 实例使用 AWS Identity and Access Management (IAM) 角色来执行此操作。
解决方法
**注意:**如果您在运行 AWS Command Line Interface (AWS CLI) 命令时收到错误,请确保您运行的是最新版本的 AWS CLI。
使用 EC2 实例配置账户
1. 创建具有权限发布到 SNS 主题的 IAM 策略。例如:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid":
"VisualEditor0",
"Effect": "Allow",
"Action": "sns:Publish",
"Resource": "arn:aws:sns:us-east-2:123456789012:cross-account-ec2-sns"
}
]
}
2. 为您的 EC2 实例创建一个 IAM 角色。例如:cross-acc-ec2-sns-publish-role。然后,将策略附上您的 IAM 角色。
3. 在具有互联网访问权限的公有子网中创建 EC2 实例。
将新的 IAM 角色附上您的 EC2 实例
确认您的 EC2 实例正在运行,然后完成以下步骤:
1. 打开 Amazon EC2 控制台。
2. 在导航窗格中,选择 Instances(实例)。
3. 选择您的实例 (cross-acc-ec2-sns-publish-role),然后选择操作、安全性、修改 IAM 角色。
4. 选择先前创建的要附上实例的 IAM 角色,然后选择 Save(保存)。
**注意:**如果您的 EC2 实例无法使用互联网网关连接到互联网,请参阅为何我的 Amazon EC2 实例无法使用互联网网关连接到互联网?
使用 SNS 主题配置账户
1. 创建 SNS 主题,名称类似于:cross-account-ec2-sns
2. 根据您的使用案例为主题订阅端点,然后确认订阅。
3. 向 SNS 主题的访问策略添加权限。权限必须允许 EC2 IAM 角色执行 Amazon SNS 的发布 API 操作。
要编辑 SNS 主题访问策略并添加权限,请执行以下操作:
1. 打开 Amazon SNS 控制台。
2. 在导航窗格上,选择 Topics(主题),然后选择要发布到的 SNS 主题。
3. 选择 Access policy(访问策略)选项卡。
4. 在主题页面的 Details(详细信息)部分,选择 Edit(编辑)。
5. 展开访问策略部分,然后添加权限以允许 EC2 实例的 IAM 角色 (cross-acc-ec2-sns-publish-role) 发布到 SNS 主题。例如:
{
"Sid": "grant-65864586-publish",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::111122223333:role/cross-acc-ec2-sns-publish-role"
]
},
"Action": "sns:Publish",
"Resource": "arn:aws:sns:us-east-2:123456789012:cross-account-ec2-sns"
}
6. 选择 Save changes(保存更改)。
从 EC2 实例发布通知来测试配置
1. 使用您的 EC2 实例登录账户,然后连接到您的 EC2 实例。 对于 Windows 实例,请参阅连接到 Windows 实例。对于 Linux 实例,请参阅连接到 Linux 实例。
2. 在 EC2 终端中运行 Amazon SNS 发布命令,然后监控响应。例如,可以在 AWS CLI 中使用测试查询,类似于:
aws sns publish --topic-arn "arn:aws:sns:us-east-2:123456789012:cross-account-ec2-sns"
--message "test" --region us-east-2
{
"MessageId": "c72e7c2f-f95a-5c57-97c5-25448b2a7e71"
}