S3 Object Lambda アクセスポイントのセキュリティに関する考慮事項 - Amazon Simple Storage Service

S3 Object Lambda アクセスポイントのセキュリティに関する考慮事項

Amazon S3 Object Lambda では、コンピューティングプラットフォームとして AWS Lambda のスケールと柔軟性を利用して、Amazon S3 を離れたデータに対してカスタム変換を実行できます。S3 と Lambda はデフォルトで安全なままですが、この安全性を維持するためには、Lambda 関数の作成者による特別な考慮が必要です。S3 Object Lambda では、すべてのアクセスが、認証されたプリンシパル (匿名アクセスなし) により、HTTPS 経由で行われる必要があります。

セキュリティリスクを軽減するために、以下を推奨します。

  • Lambda 実行ロールの範囲を、可能な限り最小の権限セットに設定します。

  • 可能な限り、提供された署名付き URL を通じて Lambda 関数が Amazon S3 にアクセスするようにしてください。

IAM ポリシーの設定

S3 アクセスポイントは AWS Identity and Access Management (IAM) リソースポリシーをサポートしています。これにより、リソース、ユーザー、その他の条件別にアクセスポイントの使用を制御できます。詳細については、Object Lambda アクセスポイントの IAM ポリシーの設定 を参照してください。

暗号化動作

Object Lambda アクセスポイントは Amazon S3 と AWS Lambda の両方を使用するため、暗号化の動作には違いがあります。デフォルトの S3 暗号化の動作の詳細については、Amazon S3 バケット向けのサーバー側のデフォルトの暗号化動作の設定 を参照してください。

  • Object Lambda アクセスポイントで S3 サーバー側の暗号化を使用している場合、オブジェクトは Lambda に送信される前に復号化されます。オブジェクトが Lambda に送信されると、暗号化されずに処理されます (GET または HEAD リクエストの場合)。

  • 暗号化キーがログに記録されないようにするため、S3 は、お客様が指定したキーを使用したサーバー側の暗号化 (SSE-C) で暗号化されたオブジェクトに対する GET および HEAD リクエストを拒否します。ただし、Lambda 関数は、クライアントが指定したキーにアクセスできる場合、これらのオブジェクトを取得する可能性があります。

  • Object Lambda アクセスポイントで S3 クライアント側の暗号化を使用する際は、Lambda がオブジェクトを復号および再暗号化するための暗号化キーにアクセスできることを確認してください。

アクセスポイントセキュリティ

S3 Object Lambda は、Object Lambda アクセスポイントと、サポートアクセスポイントと呼ばれる、標準の S3 アクセスポイントの 2 つのアクセスポイントを使用します。Object Lambda アクセスポイントにリクエストを行うと、S3 は S3 Object Lambda の設定に応じて、ユーザーに代わって Lambda を呼び出すか、サポートアクセスポイントにリクエストを委任します。Lambda がリクエストに対して呼び出されると、S3 は、サポートアクセスポイントを通じて、ユーザーに代わってオブジェクトへの署名付き URL を生成します。Lambda 関数は、関数が呼び出されたときにこの URL を入力として受け取ります。

S3 を直接呼び出すのではなく、この署名付き URL を使用して元のオブジェクトを取得するように Lambda 関数を設定できます。このモデルを使用することで、より優れたセキュリティ境界をオブジェクトに適用できます。S3 バケットまたは S3 アクセスポイント経由のオブジェクト直接アクセスを、限定された IAM ロールまたはユーザーのセットに制限できます。このアプローチにより、Lambda 関数が「混乱した代理問題」のターゲットになることを防げます。これは、呼び出し元とは異なるアクセス許可を持つ誤って設定された関数が、本来は許可または拒否すべきでないオブジェクトへのアクセスを許可または拒否する可能性があるというものです。

Object Lambda アクセスポイントのパブリックアクセス

S3 Object Lambda は匿名またはパブリックアクセスを許可しません。これは、Amazon S3 が S3 Object Lambda リクエストを完了するために ID を承認する必要があるためです。Object Lambda アクセスポイントを介してリクエストを呼び出す際には、設定された Lambda 関数の lambda:InvokeFunction 許可が必要となります。同様に、Object Lambda アクセスポイントを介して他の API オペレーションを呼び出す際には、必須の s3:* 許可が必要となります。

これらのアクセス許可がないと、Lambda の呼び出しまたは S3 への委任のリクエストは HTTP 403 (Forbidden) エラーとして失敗します。すべてのアクセスは、認証されたプリンシパルによって行われる必要があります。パブリックアクセスが必要な場合は、Lambda@Edge を代替として使用できます。詳細については、Amazon CloudFront 開発者ガイドLambda@Edge を使用したエッジでのカスタマイズを参照してください。

Object Lambda アクセスポイント IP アドレス

describe-managed-prefix-lists サブネットはゲートウェイ仮想プライベートクラウド (VPC) エンドポイントをサポートしており、VPC エンドポイントのルーティングテーブルに関連しています。Object Lambda アクセスポイントはゲートウェイ VPC をサポートしていないため、その IP 範囲は欠落しています。欠落している範囲は Amazon S3 に属しますが、ゲートウェイ VPC エンドポイントではサポートされていません。describe-managed-prefix-lists の詳細については、「Amazon EC2 API リファレンス」の「DescribeManagedPrefixLists」と「AWS 全般のリファレンス」の「AWS IP アドレスの範囲」を参照してください。

Object Lambda アクセスポイントの CORS サポート

S3 Object Lambda がブラウザからリクエストを受信するか、リクエストに Origin ヘッダーが含まれている場合、S3 Object Lambda は常に “AllowedOrigins":"*" ヘッダーフィールドを追加します。

詳細については、「Cross−Origin Resource Sharing (CORS) の使用」を参照してください。