跳至內容

如何使用 IAM 角色從跨帳戶 Amazon EC2 執行個體發佈 Amazon SNS 主題?

2 分的閱讀內容
0

我想從另一個 AWS 帳戶中的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體發佈 Amazon Simple Notification Service (Amazon SNS) 主題。我想將 AWS Identity and Access Management (IAM) 角色用於使用公共子網路的 EC2 執行個體。

解決方法

**注意:**如果您在執行 AWS Command Line Interface (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 console (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 console (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 console (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 年前