クロスアカウントの 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 インスタンスを作成します。
EC2 インスタンスに新しい IAM ロールを添付する
EC2 インスタンスが実行中であることを確認してから、以下のステップを実行します。
1. Amazon EC2 コンソールを開きます。
2. ナビゲーションペインで、[インスタンス] を選択します。
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. ナビゲーションパネルで、[トピック] を選択してから、公開先にしたい SNS トピックを選択します。
3. [アクセスポリシー] タブを選択します。
4. トピックページの [詳細] セクションで、[編集] を選択します。
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. [変更を保存する] を選択します。
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"
}