スキップしてコンテンツを表示

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. SNS トピックに公開するアクセス許可を持つ IAM ポリシーを作成します。ポリシー例:
    {  "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. インスタンスに、cross-acc-ec2-sns-publish-role のような名前の IAM ロールを作成します。次に、ポリシーを IAM ロールにアタッチします。
  3. インターネットにアクセスできるパブリックサブネットインスタンスを起動します。

インスタンスに IAM ロールをアタッチします。

次の手順を実行します。

  1. Amazon EC2 コンソールを開きます。
  2. ナビゲーションペインで [インスタンス] をクリックします。
  3. cross-acc-ec2-sns-publish-role などのインスタンスを選択してから、[アクション] をクリックします。
  4. [セキュリティ] をクリックし、[IAM ロールの変更] を選択します。
  5. 作成した IAM ロールを選択し、[保存] をクリックします。

注: インスタンスのインターネット接続に関する問題のトラブルシューティング方法については、「Amazon EC2 インスタンスがインターネットゲートウェイ経由でインターネットにアクセスできない理由を知りたいです」を参照してください。

SNS トピックでアカウントを設定する

次のステップを実行して SNS トピックを作成し、Amazon EC2 IAM ロールが [公開] アクションを実行できるようにするアクセス許可を追加します。

  1. cross-account-ec2-sns のような名前の SNS トピックを作成します。
  2. エンドポイントをトピックにサブスクライブし、サブスクリプションを確認します。
  3. Amazon SNS コンソールを開きます。
  4. ナビゲーションペインで [トピック] をクリックし、公開する SNS トピックを選択します。
  5. [アクセスポリシー] タブをクリックします。
  6. [詳細][編集] を選択します。
  7. [アクセスポリシー] セクションを展開し、次の 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. [変更を保存] をクリックします。

インスタンスから通知を発行し、設定をテストする。

次の手順を実行します。

  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年前
コメントはありません

関連するコンテンツ