ある AWS アカウントのイベントから別のアカウントのターゲットに通知を送信するように Amazon EventBridge ルールを設定したいと考えています。
解決策
ソースアカウントでルールを作成する
別のアカウントにイベントを送信するためのルールを作成します。
注: EventBridge のルールとターゲットは同じ AWS リージョンにある必要があります。クロスアカウントターゲットは、次のターゲットにのみ設定できます。
- Amazon API Gateway API
- Amazon Kinesis Data Streams アプリケーション
- AWS Lambda 関数
- Amazon Simple Notification Service (Amazon SNS) トピック
- Amazon Simple Queue Service (Amazon SQS) キュー
ソースアカウントの IAM アクセス許可を設定する
EventBridge ルールターゲットに割り当てた AWS Identity and Access Management (IAM) 実行ロールが EventBridge と信頼関係にあるようにします。信頼ポリシーには、信頼できるエンティティとして events.amazonaws.com を含める必要があります。また、実行ロールの IAM ポリシーに、ターゲットへの発行に必要なアクセス許可が含まれるようにします。
信頼関係の例:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
IAM ポリシーの例:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sns:Publish"
],
"Resource": [
"arn:aws:sns:Region:Account-ID-of-SNS-Topic:test"
]
}
]
}
注: sns:Publish をターゲットに必要なアクセス許可に、arn:aws:sns:Region:Account-ID-of-SNS-Topic:test をターゲットリソースの Amazon リソースネーム (ARN) に置き換えます。
ターゲットアカウントの IAM アクセス許可を設定する
ターゲットのリソースベースのポリシーで、ターゲットへのアクセスに必要なアクセス許可を EventBridge に付与する必要があります。ターゲットリソースの IAM ポリシーを参照して、必要なアクセス許可があることを確認します。
Amazon SNS トピックの IAM ポリシーの例:
{
"Sid": "AWSEvents_ArticleEvent_Id4950650036948",
"Effect": "Allow",
"Principal": {
"AWS": "IAMRole"
},
"Action": "sns:Publish",
"Resource": "arn:aws:sns:Region:Account-ID-of-SNS-topic:test"
}
注: IAMRole をソースアカウント内の実行ロールの ARN に、arn:aws:sns:Region:Account-ID-of-SNS-topic:test を SNS トピックの ARN に置き換えます。
(SSE が有効なトピックの場合) ターゲットに必要な AWS KMS アクセス許可があることを確認する
ターゲットは AWS Key Management Service (AWS KMS) のカスタマーマネージドキーを使用する必要があります。この AWS KMS キーには、EventBridge がキーを使用するためのアクセス許可を付与するカスタムキーポリシーが必要です。
必要な AWS KMS アクセス許可を設定するには、次の手順を実行します。
- ターゲットリソースと同じアカウントで新しいカスタマーマネージドキーを作成します。AWS KMS キーポリシーに、EventBridge がカスタマーマネージドキーにアクセスするために必要なアクセス許可が含まれるようにします。
ポリシーの例:
{
"Sid": "AWSEvents_ArticleEvent_Id4950650036948",
"Effect": "Allow",
"Principal": {
"AWS": "IAMRole"
},
"Action": ["kms:Decrypt", "kms:GenerateDataKey"],
"Resource": "KMS-key-arn"
}
注: IAMRole を IAM 実行ロールの ARN に、KMS-key-ARN を AWS KMS キーの ARN に置き換えます。
- カスタマーマネージドキーを使用してサーバー側の暗号化 (SSE) を設定します。
注: SSE を設定する手順は、すべてのターゲットタイプで同じです。
- EventBridge ルールの実行ロールに kms:Decrypt API アクションを許可するポリシーが含まれるようにします。
ポリシーの例:
{ "Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": ["kms:Decrypt", "kms:GenerateDataKey"],
"Resource": "KMS-key-arn"
}
]
}
注: KMS-key-arn を AWS KMS キーの ARN に置き換えます。
問題をトラブルシューティングする
SNS トピックがイベント通知を受け取らない場合は、「Amazon SNS トピックが EventBridge 通知を受信できなかった原因を教えてください」を参照してください。
Lambda 関数がイベント通知を受け取らない場合は、「Lambda 関数が EventBridge ルールによってトリガーされなかった理由を知りたいです」を参照してください。
Amazon SQS キューがイベント通知を受け取らない場合は、「Amazon SQS キューが EventBridge 通知を受信していない理由を知りたいです」を参照してください。
その他のトラブルシューティング手順については、「クロスアカウントまたはクロスリージョンの EventBridge ルールに関する問題をトラブルシューティングする方法を教えてください」を参照してください。