跳至内容

如何使用 IAM 角色从跨账户 Amazon EC2 实例发布 Amazon SNS 主题?

2 分钟阅读
0

我想从另一个 AWS 账户中的 Amazon Elastic Compute Cloud (Amazon EC2) 实例发布 Amazon Simple Notification Service (Amazon SNS) 主题。我想为使用公有子网的 EC2 实例使用 AWS Identity and Access Management (IAM) 角色。

解决方法

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。

使用您的实例配置账户

完成以下步骤:

  1. 创建 IAM 策略,其中包含向您的 SNS 主题发布内容的权限。策略示例:
    {  "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "VisualEditor0",
          "Effect": "Allow",
          "Action": "sns:Publish",
          "Resource": "arn:aws:sns:us-east-1:123456789012:cross-account-ec2-sns"
        }
      ]
    }
    **注意:**将 us-east-1 替换为您的 AWS 区域,将 123456789012 替换为您的账户 ID。
  2. 为您的实例创建 IAM 角色,名称类似于 cross-acc-ec2-sns-publish-role。然后,将该策略附加到您的 IAM 角色。
  3. 在具有互联网访问权限的公有子网中启动实例。

将 IAM 角色附加到您的实例

完成以下步骤:

  1. 打开 Amazon EC2 控制台。
  2. 在导航窗格中,选择 Instances(实例)。
  3. 选择您的实例,例如 cross-acc-ec2-sns-publish-role,然后选择 Actions(操作)。
  4. 选择 Security(安全),然后选择 Modify IAM role(修改 IAM 角色)。
  5. 选择您已创建的 IAM 角色,然后选择 Save(保存)。

**注意:**要对实例的互联网连接问题进行故障排除,请参阅为什么我的 Amazon EC2 实例无法通过互联网网关访问互联网?

使用您的 SNS 主题配置账户

完成以下步骤,创建 SNS 主题并添加权限,允许 Amazon EC2 IAM 角色执行 Publish(发布)操作:

  1. 创建 SNS 主题,名称类似于 cross-account-ec2-sns。
  2. 将端点订阅到您的主题,然后确认订阅
  3. 打开 Amazon SNS 控制台。
  4. 在导航窗格中,选择 Topics(主题),然后选择要发布到的 SNS 主题。
  5. 选择 Access policy(访问策略)选项卡。
  6. 在 Details(详细信息)下,选择 Edit(编辑)。
  7. 展开 Access policy(访问策略)部分,然后输入以下 SNS 访问策略:
    {
        "Version": "2008-10-17",
        "Id": "__default_policy_ID",
        "Statement": [
            {
                "Sid": "__default_statement_ID",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "*"
                },
                "Action": [
                    "SNS:GetTopicAttributes",
                    "SNS:SetTopicAttributes",
                    "SNS:AddPermission",
                    "SNS:RemovePermission",
                    "SNS:DeleteTopic",
                    "SNS:Subscribe",
                    "SNS:Publish",
                    "SNS:Receive"
                ],
                "Resource": "arn:aws:sns:us-east-1: 123456789012:cross-account-ec2-sns",
                "Condition": {
                    "StringEquals": {
                        "AWS:SourceOwner": "123456789012"
                    }
                }
            },
            {
                "Sid": "grant-65864586-publish-and-listsubscriptionsbytopic",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam:: 111122223333:role/cross-acc-ec2-sns-role"
                },
                "Action": [
                    "sns:Publish",
                    "sns:ListSubscriptionsByTopic"
                ],
                "Resource": "arn:aws:sns:us-east-1:123456789012:cross-account-ec2-sns"
            }
        ]
    }
    **注意:**将 us-east-1 替换为您的区域,将 123456789012 替换为您的账户 ID,将 111122223333 替换为 IAM 用户 ID。
  8. 选择 Save changes(保存更改)。

从实例发布通知并测试配置

完成以下步骤:

  1. 使用拥有您实例的账户打开 Amazon EC2 控制台。
  2. 连接到您的实例。对于 Windows 实例,请参阅使用 RDP 连接到 Windows 实例。对于 Linux 实例,请参阅使用 SSH 连接到 Linux 实例。
  3. 运行以下 publish AWS CLI 命令来运行测试查询:
    aws sns publish --topic-arn "arn:aws:sns:us-east-1:123456789012:cross-account-ec2-sns" --message "test" --region us-east-1
    
    **注意:**将 us-east-1 替换为您的区域,将 123456789012 替换为您的账户 ID。
AWS 官方已更新 1 年前