Amazon EventBridge のリソースベースのポリシーを使用する
Eventbridge でルールが実行されると、このルールに関連付けられているすべてのターゲットが呼び出されます。ルールは、AWS Lambda 関数を呼び出す、Amazon SNS トピックを発行する、または Kinesis ストリームにイベントを中継することができます。所有しているリソースに対して API コールを行うには、Eventbridge に適切なアクセス許可が必要です。Lambda、Amazon SNS、Amazon SQS、および Amazon CloudWatch Logs リソースの場合、EventBridge はリソースベースのポリシーを使用します。Kinesis ストリームの場合、EventBridge はアイデンティティベースのポリシーを使用します。
AWS CLI を使用して、ターゲットにアクセス許可を追加します。AWS CLI をインストールして設定する方法については、『AWS Command Line Interface ユーザーガイド』の「AWS Command Line Interface でのセットアップ」を参照してください。
トピック
Amazon API Gateway のアクセス許可
EventBridge ルールを使用して Amazon API Gateway エンドポイントを呼び出すには、API Gateway エンドポイントのポリシーに以下のアクセス許可を追加します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "execute-api:Invoke", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:events:
region
:account-id
:rule/rule-name
" } }, "Resource": [ "execute-api:/stage/GET/api" ] } ] }
CloudWatch Logs のアクセス許可
CloudWatch Logs がルールのターゲットである場合、EventBridge がログストリームを作成し、CloudWatch Logs がログエントリとしてイベントからテキストを保存します。EventBridge がログストリームを作成してイベントを記録するためには、EventBridge が CloudWatch Logs に書き込むことを可能にするリソースベースポリシーを CloudWatch Logs に含める必要があります。
AWS Management Console を使用して、CloudWatch Logs をルールのターゲットとして追加する場合、リソースベースのポリシーは自動的に作成されます。AWS CLI を使用してターゲットを追加し、ポリシーがまだ存在しない場合は、作成する必要があります。
次の例では、Eventbridge が、/aws/events/
で始まる名前を持つすべてのロググループに書き込むことができます。これらのタイプのログに別の命名ポリシーを使用する場合は、それに応じて例を調整します。
{ "Statement": [ { "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Effect": "Allow", "Principal": { "Service": ["events.amazonaws.com", "delivery.logs.amazonaws.com"] }, "Resource": "arn:aws:logs:
region
:account
:log-group:/aws/events/*:*", "Sid": "TrustEventsToStoreLogEvent" } ], "Version": "2012-10-17" }
詳細については、Amazon CloudWatch Logs API リファレンスガイドの「PutResourcePolicy」を参照してください。
AWS Lambda のアクセス許可
EventBridge ルールを使用して AWS Lambda 関数を呼び出すには、Lambda 関数のポリシーに次のアクセス許可を追加します。
{ "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:
region
:account-id
:function:function-name
", "Principal": { "Service": "events.amazonaws.com" }, "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:events:region
:account-id
:rule/rule-name
" } }, "Sid": "InvokeLambdaFunction" }
EventBridge が AWS CLI を使用して Lambda 関数を呼び出せるように上記のパーミッションを追加するには
-
コマンドプロンプトで、次のコマンドを入力します。
aws lambda add-permission --statement-id "InvokeLambdaFunction" \ --action "lambda:InvokeFunction" \ --principal "events.amazonaws.com" \ --function-name "arn:aws:lambda:
region
:account-id
:function:function-name
" \ --source-arn "arn:aws:events:region
:account-id
:rule/rule-name
"
EventBridge が Lambda 関数を呼び出せるようにするアクセス許可の詳細な設定方法については、[AWS Lambda 開発者ガイド』の「AddPermission」と「スケジュールされたイベントでの Lambda の使用」を参照してください。
Amazon SNS のアクセス許可
EventBridge が Amazon SNS トピックを発行できるようにするには、aws sns
get-topic-attributes
および aws sns set-topic-attributes
コマンドを使用します。
注記
EventBridge の Amazon SNS トピックポリシーでは、Condition
ブロックを使用できません。
Eventbridge に SNS トピックの発行を可能にするアクセス許可を追加するには
-
SNS トピックの属性を一覧表示するには、次のコマンドを使用します。
aws sns get-topic-attributes --topic-arn "arn:aws:sns:
region
:account-id
:topic-name
"次の例は、新しい SNS トピックの結果を示しています。
{ "Attributes": { "SubscriptionsConfirmed": "0", "DisplayName": "", "SubscriptionsDeleted": "0", "EffectiveDeliveryPolicy": "{\"http\":{\"defaultHealthyRetryPolicy\":{\"minDelayTarget\":20,\"maxDelayTarget\":20,\"numRetries\":3,\"numMaxDelayRetries\":0,\"numNoDelayRetries\":0,\"numMinDelayRetries\":0,\"backoffFunction\":\"linear\"},\"disableSubscriptionOverrides\":false}}", "Owner": "
account-id
", "Policy": "{\"Version\":\"2012-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:ListSubscriptionsByTopic\",\"SNS:Publish\"],\"Resource\":\"arn:aws:sns:region
:account-id
:topic-name
\",\"Condition\":{\"StringEquals\":{\"AWS:SourceOwner\":\"account-id
\"}}}]}", "TopicArn": "arn:aws:sns:region
:account-id
:topic-name
", "SubscriptionsPending": "0" } } -
JSON から文字列へのコンバーター
を使用して、次のステートメントを文字列に変換します。 { "Sid": "PublishEventsToMyTopic", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:
region
:account-id
:topic-name
" }文字列に変換したステートメントは、次の例のようになります。
{\"Sid\":\"PublishEventsToMyTopic\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"events.amazonaws.com\"},\"Action\":\"sns:Publish\",\"Resource\":\"arn:aws:sns:
region
:account-id
:topic-name
\"} -
前のステップで作成した文字列を、
"Policy"
属性の中の"Statement"
コレクションに追加します。 -
新しいポリシーを設定するには、
aws sns set-topic-attributes
コマンドを使用します。aws sns set-topic-attributes --topic-arn "arn:aws:sns:
region
:account-id
:topic-name
" \ --attribute-name Policy \ --attribute-value "{\"Version\":\"2012-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:ListSubscriptionsByTopic\",\"SNS:Publish\"],\"Resource\":\"arn:aws:sns:region
:account-id
:topic-name
\",\"Condition\":{\"StringEquals\":{\"AWS:SourceOwner\":\"account-id
\"}}}, {\"Sid\":\"PublishEventsToMyTopic\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"events.amazonaws.com\"},\"Action\":\"sns:Publish\",\"Resource\":\"arn:aws:sns:region
:account-id
:topic-name
\"}]}"
詳細については、『Amazon Simple Notification Service API リファレンス』の「SetTopicAttributes アクション」を参照してください。
Amazon SQS のアクセス許可
EventBridge ルールに Amazon SQS キューの呼び出しを許可するには、aws sqs
get-queue-attributes
コマンドと aws sqs set-queue-attributes
コマンドを使用します。
SQS キューのポリシーが空の場合は、まずポリシーを作成してから、それに許可ステートメントを追加する必要があります。新しい SQS キューには空のポリシーがあります。
SQS キューに既にポリシーがある場合は、元のポリシーをコピーして、新しいステートメントと組み合わせ、そこに許可ステートメントを追加する必要があります。
EventBridge ルールに SQS キューの呼び出しを可能にするアクセス許可を追加するには
-
SQS キューの属性を一覧表示するには、コマンドプロンプトで、次のコマンドを入力します。
aws sqs get-queue-attributes \ --queue-url https://sqs.
region
.amazonaws.com/account-id
/queue-name
\ --attribute-names Policy -
次のステートメントを追加します。
{ "Sid": "AWSEvents_custom-eventbus-ack-sqs-rule_dlq_sqs-rule-target", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:
region
:account-id
:queue-name
", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:events:region
:account-id
:rule/bus-name
/rule-name
" } } } -
JSON から文字列へのコンバーター
を使用して、上のステートメントを文字列に変換します。文字列に変換したポリシーは、次のようになります。 {\"Sid\": \"EventsToMyQueue\", \"Effect\": \"Allow\", \"Principal\": {\"Service\": \"events.amazonaws.com\"}, \"Action\": \"sqs:SendMessage\", \"Resource\": \"arn:aws:sqs:
region
:account-id
:queue-name
\", \"Condition\": {\"ArnEquals\": {\"aws:SourceArn\": \"arn:aws:events:region
:account-id
:rule/rule-name
\"}} -
set-queue-attributes.json
というファイルを次の内容で作成します。{ "Policy": "{\"Version\":\"2012-10-17\",\"Id\":\"arn:aws:sqs:
region
:account-id
:queue-name
/SQSDefaultPolicy\",\"Statement\":[{\"Sid\": \"EventsToMyQueue\", \"Effect\": \"Allow\", \"Principal\": {\"Service\": \"events.amazonaws.com\"}, \"Action\": \"sqs:SendMessage\", \"Resource\": \"arn:aws:sqs:region
:account-id
:queue-name
\", \"Condition\": {\"ArnEquals\": {\"aws:SourceArn\": \"arn:aws:events:region
:account-id
:rule/rule-name
\"}}}]}" } -
次のコマンドに示すように、先ほど作成した
set-queue-attributes.json
ファイルを入力として使用して、ポリシー属性を設定します。aws sqs set-queue-attributes \ --queue-url https://sqs.
region
.amazonaws.com/account-id
/queue-name
\ --attributes file://set-queue-attributes.json
詳細については、『Amazon Simple Queue サービスデベロッパーガイド』の「Amazon SQS ポリシーの例」を参照してください。
EventBridge Pipes の詳細
EventBridge Pipes は、リソースベースのポリシーをサポートしていません。また、リソースベースのポリシー条件をサポートする API もありません。
ただし、インターフェイス VPC エンドポイントを介してパイプアクセスを設定すると、その VPC エンドポイントは EventBridge Pipe API へのアクセスを管理できるリソースポリシーをサポートします。詳細については、「インターフェイス VPC エンドポイントでの Amazon EventBridge の使用」を参照してください。