Amazon S3 イベント通知の設定 - Amazon Simple Storage Service

Amazon S3 イベント通知の設定

Amazon S3 通知機能により、バケット内で特定のイベントが発生したときに、通知を受けることができます。通知を有効にするには、まず通知設定を追加します。この設定で、Amazon S3 から発行するイベントと、Amazon S3 から通知を送信する先を指定します。この設定は、バケットに関連付けられた通知サブリソースに保存します詳細については、「バケット設定オプション」を参照してください。Amazon S3 には、このサブリソースを管理するための API が用意されています。

重要

Amazon S3 イベント通知は、少なくとも 1 回配信されるように設計されています。通常、イベント通知は数秒で配信されますが、1 分以上かかる場合もあります。

バージョン管理されていない単一のオブジェクトに同時に 2 つの書き込みを行うと、イベント通知が 1 つしか送信されない場合があります。バケットのバージョニングを有効にすると、正常な書き込みごとにイベント通知を受信できます。バージョニングでは、正常な書き込みごとにオブジェクトの新しいバージョンが作成され、イベント通知が送信されます。

通知の概要

現在、Amazon S3 は次のイベントの通知を発行できます。

  • 新しいオブジェクトの作成イベント — Amazon S3 ではオブジェクトを作成するための複数の API をサポートしています。特定の API (s3:ObjectCreated:Put) が使用されたときのみ通知をリクエストするか、ワイルドカード (s3:ObjectCreated:* など) を使用して、使用された API にかかわらず、オブジェクトが作成されたときに通知をリクエストできます。

  • オブジェクト削除イベント — Amazon S3 は、バージョニングが有効なオブジェクトとバージョニングが無効なオブジェクトの削除をサポートしています。オブジェクトのバージョニングについては、「オブジェクトのバージョニング」と「バージョニングの使用」を参照してください。

    s3:ObjectRemoved:Delete イベントタイプを使用することで、オブジェクトが削除されたとき、またはバージョニングが有効なオブジェクトが完全に削除されたときに通知が送信されるようにリクエストできます。または、s3:ObjectRemoved:DeleteMarkerCreated を使用することで、バージョニングが有効なオブジェクトに対して削除マーカーが作成されたとき通知が送信されるようにリクエストできます。ワイルドカードとして s3:ObjectRemoved:* を使用することで、オブジェクトが削除されるたびに通知が送信されるようにリクエストできます。バージョニングが有効なオブジェクトの削除については、「オブジェクトバージョンの削除」を参照してください。

  • オブジェクト復元イベント — Amazon S3 は、S3 Glacier ストレージクラスにアーカイブされたオブジェクトの復元をサポートしています。s3:ObjectRestore:Completed を使用して、オブジェクトの復元完了の通知をリクエストできます。s3:ObjectRestore:Post を使用して、復元の開始の通知をリクエストできます。

  • 低冗長化ストレージ (RRS) オブジェクト消失イベント — Amazon S3 は RRS ストレージクラスのオブジェクトが消失したことを検出すると、通知メッセージを送信します。

  • レプリケーションイベント — Amazon S3 は S3 Replication Time Control (S3 RTC) が有効になっているレプリケーション設定に関するイベント通知を送信します。これらの通知が送信されるのは、オブジェクトがレプリケーションに失敗した場合、オブジェクトが 15 分のしきい値を超えた場合、オブジェクトが 15 分のしきい値の後でレプリケートされた場合、およびオブジェクトがレプリケーションメトリクスによって追跡されなくなった場合です。オブジェクトがレプリケート先リージョンにレプリケートされると、2 つ目のイベントが発行されます。

サポートされるイベントタイプのリストについては、「サポートされるイベントタイプ」を参照してください。

Amazon S3 は、次の宛先に対してイベントを発行できます。

  • Amazon Simple Notification Service (Amazon SNS) トピック

    Amazon SNS は、柔軟性に優れたフルマネージド型のプッシュメッセージングサービスです。このサービスを使用すると、モバイルデバイスまたは分散サービスにメッセージをプッシュすることができます。SNS を使用すれば、一度メッセージを発行するだけで、何回も配信できます。SNS の詳細については、Amazon SNS の製品詳細ページを参照してください。

  • Amazon Simple Queue Service (Amazon SQS) キュー

    Amazon SQS は、スケーラブルな、フルマネージド型のメッセージキューサービスです。SQS を使用すると、どのような量のデータでも転送することができ、他のサービスが常に利用可能である必要もありません。通知設定で、Amazon S3 から SQS キューにイベントを発行するようリクエストできます。

    現在、Amazon S3 イベント通知の送信先として、スタンダード SQS キューのみ許可されており、FIFO SQS キューは許可されていません。Amazon SQS の詳細については、Amazon SQS の製品詳細ページを参照してください。

  • AWS Lambda

    AWS Lambda は、新しい情報に迅速に対応できるアプリケーションを容易に構築できるコンピューティングサービスです。AWS Lambda は、イメージのアップロード、アプリ内のアクティビティ、ウェブサイトのクリックや接続したデバイスからの出力などのイベントに応答してコードを実行します。

    AWS Lambda を使用して、AWS の他のサービスをカスタムロジックで拡張したり、AWS のスケール、パフォーマンス、セキュリティで動作する独自のバックエンドを作成したりすることができます。AWS Lambda を使用すると、必要なときだけ実行される個別のイベント駆動型アプリケーションを簡単に作成し、1 日あたり数回のリクエストから 1 秒あたり数千のリクエストまで自動的にスケールできます。

    AWS Lambda は、Amazon S3 バケットのイベントに対する応答としてカスタムコードを実行できます。カスタムコードを AWS Lambda にアップロードして、いわゆる Lambda 関数を作成します。Amazon S3 は特定のタイプのイベント (たとえば、オブジェクトが作成したイベント) を検出すると、そのイベントを AWS Lambda に発行し、Lambda で関数を呼び出します。それに応じて、AWS Lambda が関数を実行します。

警告

通知をトリガーするバケットへの書き込みで通知が終わっていると、実行ループが発生する可能性があります。たとえば、オブジェクトがアップロードされるたびにバケットで Lambda 関数をトリガーし、その関数によってオブジェクトがバケットにアップロードされると、その関数によって間接的にその関数自体がトリガーされます。これを回避するには、2 つのバケットを使用するか、受信オブジェクトで使用されるプレフィックスにのみ適用されるようにトリガーを設定します。

AWS Lambda で Amazon S3 通知を使用する詳細と例については、AWS Lambda Developer Guide の「Amazon S3 での AWS Lambda の使用」を参照してください。

イベント通知を有効にする方法

通知の有効化はバケットレベルのオペレーションです。つまり、通知設定情報は、バケットに関連付けられた notification サブリソースに保存します。次のいずれかの方法を使用して通知設定の管理を行います。

  • Amazon S3 コンソールの使用

    コンソール UI では、コードを記述しなくても、バケットの通知設定を指定できます。詳細については、Amazon Simple Storage Service コンソールユーザーガイド の「S3 バケットのイベント通知を有効化および設定する方法」を参照してください。

  • プログラムで AWS SDK を使用する

    注記

    必要に応じて、コードから直接 Amazon S3 REST API を呼び出すこともできます。ただし、この方法は、リクエストを認証するためのコードを作成する必要があるため面倒な場合もあります。

    内部的には、コンソールも SDK も Amazon S3 REST API を呼び出して、バケットに関連付けられた notification サブリソースを管理します。AWS SDK を使用した通知の設定例については、「演習 通知 (SNS トピックまたは SQS キュー) のバケットを設定する」を参照してください。

    使用する方法を問わず、Amazon S3 は通知設定を XML として、バケットに関連付けられた通知サブリソースに保存します。バケットのサブリソースの詳細については、「バケット設定オプション」を参照してください。

    デフォルトでは、通知はどのタイプのイベントにも有効になりません。したがって、最初は notification サブリソースに空の設定が格納されています。

    <NotificationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> </NotificationConfiguration>

    特定のタイプのイベントに対して通知を有効にするには、XML を、Amazon S3 が公開するイベントのタイプと公開先を識別する適切な設定に置き換えます。各宛先には、対応する XML 設定を追加します。次に例を示します。

    • イベントメッセージを SQS キューに発行する — SQS キューを 1 つ以上のイベントタイプの通知先として設定するには、QueueConfiguration を追加します。

      <NotificationConfiguration> <QueueConfiguration> <Id>optional-id-string</Id> <Queue>sqs-queue-arn</Queue> <Event>event-type</Event> <Event>event-type</Event> ... </QueueConfiguration> ... </NotificationConfiguration>
    • SNS トピックにイベントメッセージを発行する — SNS トピックを特定のイベントタイプの通知先として設定するには、TopicConfiguration を追加します。

      <NotificationConfiguration> <TopicConfiguration> <Id>optional-id-string</Id> <Topic>sns-topic-arn</Topic> <Event>event-type</Event> <Event>event-type</Event> ... </TopicConfiguration> ... </NotificationConfiguration>
    • AWS Lambda 関数を呼び出してイベントメッセージを引数として渡す — Lambda 関数を、特定のイベントタイプの通知先として設定するには、CloudFunctionConfiguration を追加します。

      <NotificationConfiguration> <CloudFunctionConfiguration>    <Id>optional-id-string</Id>    <CloudFunction>cloud-function-arn</CloudFunction>         <Event>event-type</Event>       <Event>event-type</Event>       ...   </CloudFunctionConfiguration> ... </NotificationConfiguration>

    バケットに設定されたすべての通知を削除するには、notification サブリソースに空の <NotificationConfiguration/> エレメントを保存します。

    Amazon S3 は、特定のタイプのイベントを検出すると、そのイベント情報を含むメッセージを公開します。詳細については、「イベントメッセージの構造」を参照してください。

イベント通知のタイプおよび送信先

このセクションでは、Amazon S3 でサポートされているイベント通知のタイプと、通知を公開できる宛先のタイプについて説明します。

サポートされるイベントタイプ

Amazon S3 は、次のタイプのイベントを発行できます。通知設定で、これらのイベントタイプを指定します。

イベントタイプ 説明

s3:ObjectCreated:*

s3:ObjectCreated:Put

s3:ObjectCreated:Post

s3:ObjectCreated:Copy

s3:ObjectCreated:CompleteMultipartUpload

PUT、POST、COPY などの Amazon S3 API はオブジェクトを作成できます。これらのイベントタイプを使用すると、特定の API を使用してオブジェクトが作成されたときに通知を有効化できます。また、s3:ObjectCreated:* イベントタイプを使用すると、オブジェクトを作成するために使用された API にかかわらず通知をリクエストすることができます。

失敗したオペレーションについてはイベント通知が送信されません。

s3:ObjectRemoved:*

s3:ObjectRemoved:Delete

s3:ObjectRemoved:DeleteMarkerCreated

[ObjectRemoved] イベントタイプを使用することで、オブジェクトまたはオブジェクトのバッチがバケットから削除されたときに通知を有効にできます。

[s3:ObjectRemoved:Delete] イベントタイプを使用することで、オブジェクトが削除されたとき、またはバージョニングが有効なオブジェクトが完全に削除されたときに通知が送信されるようにリクエストできます。または、[s3:ObjectRemoved:DeleteMarkerCreated] を使用することで、バージョニングが有効なオブジェクトに対して削除マーカーが作成されたとき通知が送信されるようにリクエストできます。バージョニングが有効なオブジェクトの削除については、「オブジェクトバージョンの削除」を参照してください。ワイルドカードとして s3:ObjectRemoved:* を使用することで、オブジェクトが削除されるたびに通知が送信されるようにリクエストできます。

ライフサイクルポリシーからの自動削除や失敗したオペレーションについては、イベント通知が送信されません。

s3:ObjectRestore:Post

s3:ObjectRestore:Completed

オブジェクトイベントタイプの復元を使用して、S3 Glacier ストレージクラスからオブジェクトを復元する際の開始および完了の通知を受け取ることができます。

s3:ObjectRestore:Post を使用して、オブジェクトの復元開始の通知をリクエストできます。s3:ObjectRestore:Completed を使用して、復元完了の通知をリクエストできます。

s3:ReducedRedundancyLostObject このイベントタイプを使用して、Amazon S3 が RRS ストレージクラスのオブジェクトが失われたことを検出したときに、通知メッセージを送信するように Amazon S3 にリクエストできます。
s3:Replication:OperationFailedReplication Amazon S3 レプリケーション時間コントロールを使用したレプリケーションの対象であったオブジェクトがレプリケートに失敗すると、この通知イベントが送信されます。
s3:Replication:OperationMissedThreshold Amazon S3 レプリケーション時間コントロールを使用したレプリケーションの対象であったオブジェクトが、レプリケーションの 15 分のしきい値を超えると、この通知イベントが送信されます。
s3:Replication:OperationReplicatedAfterThreshold Amazon S3 レプリケーション時間コントロール機能を使用したレプリケーションの対象であったオブジェクトが、15 分のしきい値の後でレプリケートされると、この通知イベントが送信されます。
s3:Replication:OperationNotTracked Amazon S3 レプリケーション時間コントロールを使用したレプリケーションの対象であったオブジェクトが、レプリケーションメトリクスによって追跡されなくなると、この通知イベントが送信されます。

サポートされる宛先

Amazon S3 は、次の宛先にイベントの通知メッセージを送信できます。通知設定でこれらの宛先の ARN 値を指定します。

  • イベントメッセージを Amazon Simple Notification Service (Amazon SNS) トピックに発行する

  • イベントメッセージを Amazon Simple Queue Service (Amazon SQS) キューに発行する

    注記

    送信先キューまたはトピックで SSE が有効になっている場合、Amazon S3 はメッセージの暗号化を有効にするために関連付けられた AWS Key Management Service (AWS KMS) カスタマーマスターキーにアクセスする必要があります。

  • Lambda 関数を呼び出し、引数としてイベントメッセージを指定することによって、イベントメッセージを AWS Lambda に発行する

Amazon SNS トピックまたは Amazon SQS キューにメッセージを投稿するためのアクセス許可を Amazon S3 に付与する必要があります。また、代わりに AWS Lambda 関数を呼び出す場合も Amazon S3 アクセス許可を付与する必要があります。これらのアクセス許可の付与については、「宛先にイベント通知メッセージを発行するアクセス許可の付与」を参照してください。

オブジェクトキー名によるフィルタ処理を使用した通知の設定

通知がオブジェクトのキー名のプレフィックスまたはサフィックスでフィルタリングされるように設定できます。たとえば、ファイル名の拡張子が .jpg であるイメージファイルがバケットに追加されたときにのみ通知が送信されるように設定できます。または、images/ というプレフィックスの付いたオブジェクトがバケットに追加されたときに Amazon SNS トピックに通知が送信されるように設定したり、同じバケット内にある「logs/」というプレフィックスの付いたオブジェクトが AWS Lambda 関数に渡されたときに通知が送信されるように設定したりできます。

Amazon S3 コンソールで、AWS SDK で Amazon S3 API を使用して、または直接 REST API を使用し、オブジェクトキー名によるフィルタリングを使用する通知設定をセットアップできます。コンソール UI を使用してバケットでの通知を設定する方法については、Amazon Simple Storage Service コンソールユーザーガイド の「S3 バケットのイベント通知を有効化および設定する方法」を参照してください。

Amazon S3 は、「イベント通知を有効にする方法 」で説明されているように、バケットに関連付けられている notification サブリソースに通知設定を XML 形式で保存します。Filter XML 構造を使用して、オブジェクトキー名のプレフィックスまたはサフィックスでフィルタリングされる通知のルールを定義します。Filter XML の構造の詳細については、Amazon Simple Storage Service API Reference の「PUT Bucket 通知」を参照してください。

Filter を使用する通知設定では、プレフィックスの重複、サフィックスの重複、またはプレフィックスとサフィックスの重複があるフィルタリングルールを定義できません。以下のセクションでは、オブジェクトキー名フィルタリングを使用した有効な通知設定の例を示します。また、プレフィックス/サフィックスが重複しているために無効である通知設定の例も示します。

オブジェクトキー名によるフィルタ処理を使用した有効な通知設定の例

次の通知設定には、Amazon SQS キューを識別するキュー設定が含まれており、これにより Amazon S3 は s3:ObjectCreated:Put タイプのイベントを発行できます。イベントは、images/ というプレフィックスと jpg というサフィックスの付いたオブジェクトがバケットに PUT (作成) されるたびにパブリッシュされます。

<NotificationConfiguration> <QueueConfiguration> <Id>1</Id> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images/</Value> </FilterRule> <FilterRule> <Name>suffix</Name> <Value>jpg</Value> </FilterRule> </S3Key> </Filter> <Queue>arn:aws:sqs:us-west-2:444455556666:s3notificationqueue</Queue> <Event>s3:ObjectCreated:Put</Event> </QueueConfiguration> </NotificationConfiguration>

次の通知設定には、複数の重複していないプレフィックスがあります。この設定では、images/ フォルダ内の PUT リクエストの通知を queue-A に送信し、logs/ フォルダ内の PUT リクエストの通知を queue-B に送信するように定義しています。

<NotificationConfiguration> <QueueConfiguration> <Id>1</Id> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images/</Value> </FilterRule> </S3Key> </Filter> <Queue>arn:aws:sqs:us-west-2:444455556666:sqs-queue-A</Queue> <Event>s3:ObjectCreated:Put</Event> </QueueConfiguration> <QueueConfiguration> <Id>2</Id> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>logs/</Value> </FilterRule> </S3Key> </Filter> <Queue>arn:aws:sqs:us-west-2:444455556666:sqs-queue-B</Queue> <Event>s3:ObjectCreated:Put</Event> </QueueConfiguration> </NotificationConfiguration>

次の通知設定には、複数の重複していないサフィックスがあります。この設定では、バケットに新しく追加したすべての .jpg イメージを Lambda cloud-function-A で処理し、すべての新しく追加した .png イメージを cloud-function-B で処理するように定義しています。サフィックスの .png.jpg は、末尾の 1 文字が同じであっても、重複していません。文字列が両方のサフィックスで終わる可能性がある場合には、2 つのサフィックスは、重複していると見なされます。文字列が .png.jpg の両方で終わることはないので、この設定例の 2 つのサフィックスは重複していません。

<NotificationConfiguration> <CloudFunctionConfiguration> <Id>1</Id> <Filter> <S3Key> <FilterRule> <Name>suffix</Name> <Value>.jpg</Value> </FilterRule> </S3Key> </Filter> <CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-A</CloudFunction> <Event>s3:ObjectCreated:Put</Event> </CloudFunctionConfiguration> <CloudFunctionConfiguration> <Id>2</Id> <Filter> <S3Key> <FilterRule> <Name>suffix</Name> <Value>.png</Value> </FilterRule> </S3Key> </Filter> <CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-B</CloudFunction> <Event>s3:ObjectCreated:Put</Event> </CloudFunctionConfiguration> </NotificationConfiguration>

Filter を使用する通知設定では、同じイベントタイプのプレフィックスが重複しているフィルタリングルールを定義できません。プレフィックスが重複していても、サフィックスが重複していない場合は、これに該当しません。次の設定例は、プレフィックスは重複しており、サフィックスは重複していないオブジェクトがどのように別々の場所に送られるかを示しています。

<NotificationConfiguration> <CloudFunctionConfiguration> <Id>1</Id> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images</Value> </FilterRule> <FilterRule> <Name>suffix</Name> <Value>.jpg</Value> </FilterRule> </S3Key> </Filter> <CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-A</CloudFunction> <Event>s3:ObjectCreated:Put</Event> </CloudFunctionConfiguration> <CloudFunctionConfiguration> <Id>2</Id> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images</Value> </FilterRule> <FilterRule> <Name>suffix</Name> <Value>.png</Value> </FilterRule> </S3Key> </Filter> <CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-B</CloudFunction> <Event>s3:ObjectCreated:Put</Event> </CloudFunctionConfiguration> </NotificationConfiguration>

無効なプレフィックス/サフィックスの重複がある通知設定の例

Filter を使用する通知設定では、通常、同じイベントタイプに対してプレフィックスが重複したり、サフィックスが重複したり、プレフィックスとサフィックスの組み合わせが重複したりするフィルタリングルールは定義できません。(サフィックスが重複していなければ、プレフィックスが重複していても問題ありません。その例については、「オブジェクトキー名によるフィルタ処理を使用した通知の設定」を参照してください。)

イベントタイプが異なれば、重複しているオブジェクトキー名フィルターを使用できます。たとえば、image/ イベントタイプにプレフィックス ObjectCreated:Put を使用すると同時に、image/ イベントタイプにプレフィックス ObjectRemoved:* を使用する通知設定を作成できます。

Amazon S3 コンソールまたは API の使用時に、同じイベントタイプに対して名前が重複する無効なフィルターを使用する通知設定を保存しようとすると、エラーが発生します。このセクションでは、名前が重複するフィルターを使用しているために無効である通知設定の例を示します。

既存の通知設定ルールのデフォルトのプレフィックスまたはサフィックスが、他のプレフィックスまたはサフィックスとそれぞれ一致する可能性があります。次の通知設定は、重複するプレフィックスがあり、ルートプレフィックスが他の任意のプレフィックスと重複するため、無効です。(この例でプレフィックスではなくサフィックスを使用すた場合も無効です。ルートサフィックスが他のサフィックスと重複します。)

<NotificationConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-notification-one</Topic> <Event>s3:ObjectCreated:*</Event> </TopicConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-notification-two</Topic> <Event>s3:ObjectCreated:*</Event> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images</Value> </FilterRule> </S3Key> </Filter> </TopicConfiguration> </NotificationConfiguration>

次の通知設定は、重複するサフィックスがあるために無効です。文字列が両方のサフィックスで終わる可能性がある場合には、2 つのサフィックスは、重複していると見なされます。文字列が jpgpg の両方で終わる可能性があるため、サフィックスが重複しています。(これはプレフィックスについても同じであり、文字列が両方のプレフィックスで始まる可能性があれば、2 つのプレフィックスは重複していると見なされます。)

<NotificationConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-one</Topic> <Event>s3:ObjectCreated:*</Event> <Filter> <S3Key> <FilterRule> <Name>suffix</Name> <Value>jpg</Value> </FilterRule> </S3Key> </Filter> </TopicConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-two</Topic> <Event>s3:ObjectCreated:Put</Event> <Filter> <S3Key> <FilterRule> <Name>suffix</Name> <Value>pg</Value> </FilterRule> </S3Key> </Filter> </TopicConfiguration> </NotificationConfiguration

次の通知設定は、重複するプレフィックスとサフィックスがあるために無効です。

<NotificationConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-one</Topic> <Event>s3:ObjectCreated:*</Event> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>images</Value> </FilterRule> <FilterRule> <Name>suffix</Name> <Value>jpg</Value> </FilterRule> </S3Key> </Filter> </TopicConfiguration> <TopicConfiguration> <Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-two</Topic> <Event>s3:ObjectCreated:Put</Event> <Filter> <S3Key> <FilterRule> <Name>suffix</Name> <Value>jpg</Value> </FilterRule> </S3Key> </Filter> </TopicConfiguration> </NotificationConfiguration>

宛先にイベント通知メッセージを発行するアクセス許可の付与

Amazon S3 が宛先にメッセージを発行できるようにするには、関連する API を呼び出して、SNS トピック、SQS キュー、または Lambda 関数にメッセージを発行するために必要なアクセス許可を事前に Amazon S3 プリンシパルに付与しておく必要があります。

AWS Lambda 関数を呼び出すアクセス許可の付与

Amazon S3 は Lambda 関数を呼び出してイベントメッセージを AWS Lambda にイベントメッセージを発行し、そのイベントメッセージを引数として指定します。

Amazon S3 コンソールで Lambda 関数用のイベント通知を Amazon S3 バケットで設定する場合、バケットから関数を呼び出すためのアクセス許可を Amazon S3 に持たせるために、コンソールは必要なアクセス許可を Lambda で設定します。詳細については、Amazon Simple Storage Service コンソールユーザーガイド の「S3 バケットのイベント通知を有効化および設定する方法」を参照してください。

AWS Lambda から Amazon S3 アクセス許可を付与して、Lambda 関数を呼び出すこともできます。詳細については、AWS Lambda Developer Guide の「チュートリアル: Amazon S3 で AWS Lambda を使用する」を参照してください。

SNS トピックまたは SQS キューにメッセージを発行するアクセス許可の付与

SNS トピックや SQS キューにメッセージを発行するためのアクセス許可を Amazon S3 に付与するには、AWS Identity and Access Management (IAM) ポリシーを発行先の SNS トピックや SQS キューにアタッチします。

SNS トピックや SQS キューにポリシーをアタッチする方法の例については、「演習 通知 (SNS トピックまたは SQS キュー) のバケットを設定する」を参照してください。アクセス許可の詳細については、次のトピックを参照してください。

発行先の SNS トピックの IAM ポリシー

発行先の SNS トピックにアタッチする IAM ポリシーの例を次に示します。

{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "SNS:Publish" ], "Resource": "arn:aws:sns:Region:account-id:topic-name", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::awsexamplebucket1" }, "StringEquals": { "aws:SourceAccount": "bucket-owner-account-id" } } } ] }

発行先の SQS キューの IAM ポリシー

発行先の SQS キューにアタッチする IAM ポリシーの例を次に示します。

{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "SQS:SendMessage" ], "Resource": "arn:aws:sqs:Region:account-id:queue-name", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:awsexamplebucket1" }, "StringEquals": { "aws:SourceAccount": "bucket-owner-account-id" } } } ] }

Amazon SNS および Amazon SQS IAM ポリシーの両方について、ArnLike 条件の代わりに StringLike 条件をポリシーで指定できます。

"Condition": {        "StringLike": { "aws:SourceArn": "arn:aws:s3:*:*:bucket-name" } }

AWS KMS キーポリシー

SQS キューまたは SNS トピックが AWS Key Management Service (AWS KMS) カスタマー管理のカスタマーマスターキー (CMK) で暗号化されている場合は、暗号化されたトピックまたはキューを操作するためのアクセス許可を Amazon S3 サービスプリンシパルに付与する必要があります。Amazon S3 サービスプリンシパルにアクセス許可を付与するには、カスタマー管理 CMK のキーポリシーに次のステートメントを追加します。

{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*" } ] }

AWS KMS キーポリシーの詳細については、『AWS Key Management Service Developer Guide』の「AWS KMS のキーポリシーを使用する」を参照してください。Amazon SQS および Amazon SNS での、AWS KMS によるサーバー側の暗号化の使用に関する詳細については、以下を参照してください。