Object Lambda アクセスポイントの IAM ポリシーの設定 - Amazon Simple Storage Service

Object Lambda アクセスポイントの IAM ポリシーの設定

Amazon S3 アクセスポイントは AWS Identity and Access Management (IAM) リソースポリシーをサポートしています。これにより、リソース、ユーザー、またはその他の条件別にアクセスポイントの使用を制御できます。Object Lambda アクセスポイントのオプションリソースポリシー、またはサポートアクセスポイントのリソースポリシーを使用してアクセスを制御できます。詳細な例については、チュートリアル: S3 Object Lambda を使用したアプリケーションのデータの変換 および チュートリアル: S3 Object Lambda と Amazon Comprehend を使用した PII データの検出と編集 を参照してください。

次の 4 つのリソースに Object Lambda アクセスポイントを使用するための許可が付与されている必要があります。

  • ユーザーやロールなどの IAM ID。IAM ID およびベストプラクティスの詳細については、IAM ユーザーガイドの「IAM ID (ユーザー、ユーザーグループ、ロール)」を参照してください。

  • バケットおよび関連する標準アクセスポイント。Object Lambda アクセスポイントを使用する場合、この標準アクセスポイントはサポートアクセスポイントと呼ばれます。

  • Object Lambda アクセスポイント。

  • AWS Lambda 関数。

重要

ポリシーを保存する前に、AWS Identity and Access Management Access Analyzer からの セキュリティ警告、エラー、一般的な警告、および提案を解決してください。IAM Access Analyzer は、IAM ポリシーの文法ベストプラクティスに照らしてポリシーチェックを行います。これらのチェックにより、機能的でセキュリティのベストプラクティスに準拠したポリシーを作成するのに、役立つ結果と実行可能なレコメンデーションが示されます。

IAM Access Analyzer を使用したポリシーの検証の詳細については、「IAM ユーザーガイド」の「IAM Access Analyzer のポリシーの検証」を参照してください。IAM Access Analyzer によって返される警告、エラー、および提案のリストを表示するには、「IAM Access Analyzer ポリシーチェックリファレンス」を参照してください。

以下のポリシーは、次のリソースがあることを前提としています。

  • 次の Amazon リソースネーム (ARN) を持つ Amazon S3 バケット:

    arn:aws:s3:::amzn-s3-demo-bucket1

  • このバケット上の Amazon S3 Standard アクセスポイントに次の ARN があること。

    arn:aws:s3:us-east-1:111122223333:accesspoint/my-access-point

  • Object Lambda アクセスポイントに次の ARN があること。

    arn:aws:s3-object-lambda:us-east-1:111122223333:accesspoint/my-object-lambda-ap

  • AWS Lambda 関数に次の ARN があること。

    arn:aws:lambda:us-east-1:111122223333:function:MyObjectLambdaFunction

注記

アカウントから Lambda 関数を使用する場合は、ポリシーステートメントに特定の関数のバージョンを含める必要があります。次の ARN の例では、バージョンは 1 で示されています。

arn:aws:lambda:us-east-1:111122223333:function:MyObjectLambdaFunction:1

Lambda は、バージョン $LATEST への IAM ポリシーの追加をサポートしていません。Lambda 関数のバージョンの詳細については、「AWS Lambda 開発者ガイド」の「Lambda 関数のバージョン」を参照してください。

例 - アクセスコントロールを標準アクセスポイントに委任するバケットポリシー

次の S3 バケットポリシーの例は、バケットのアクセスコントロールをバケットの標準アクセスポイントに委任します。このポリシーでは、バケット所有者のアカウントが所有するすべてのアクセスポイントへのフルアクセスを許可しています。したがって、このバケットへのすべてのアクセスは、そのアクセスポイントにアタッチされているポリシーによってコントロールされます。ユーザーはアクセスポイントを介してのみバケットから読み取ることができます。つまり、オペレーションは、アクセスポイントを介してのみ呼び出すことができます。詳細については、「アクセスポイントへのアクセスコントロールの委任」を参照してください。

{ "Version": "2012-10-17", "Statement" : [ { "Effect": "Allow", "Principal" : { "AWS":"account-ARN"}, "Action" : "*", "Resource" : [ "arn:aws:s3:::amzn-s3-demo-bucket1", "arn:aws:s3:::amzn-s3-demo-bucket1/*" ], "Condition": { "StringEquals" : { "s3:DataAccessPointAccount" : "Bucket owner's account ID" } } }] }
例 — Object Lambda アクセスポイントを使用するために必要なアクセス許可をユーザーに付与する IAM ポリシー

次の IAM ポリシーは、Lambda 関数、標準アクセスポイント、および Object Lambda アクセスポイントに対するアクセス許可をユーザーに付与します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowLambdaInvocation", "Action": [ "lambda:InvokeFunction" ], "Effect": "Allow", "Resource": "arn:aws:lambda:us-east-1:111122223333:function:MyObjectLambdaFunction:1", "Condition": { "ForAnyValue:StringEquals": { "aws:CalledVia": [ "s3-object-lambda.amazonaws.com" ] } } }, { "Sid": "AllowStandardAccessPointAccess", "Action": [ "s3:Get*", "s3:List*" ], "Effect": "Allow", "Resource": "arn:aws:s3:us-east-1:111122223333:accesspoint/my-access-point/*", "Condition": { "ForAnyValue:StringEquals": { "aws:CalledVia": [ "s3-object-lambda.amazonaws.com" ] } } }, { "Sid": "AllowObjectLambdaAccess", "Action": [ "s3-object-lambda:Get*", "s3-object-lambda:List*" ], "Effect": "Allow", "Resource": "arn:aws:s3-object-lambda:us-east-1:111122223333:accesspoint/my-object-lambda-ap" } ] }

Lambda 実行ロールの許可を有効化する

Object Lambda アクセスポイントに GET リクエストが行われた場合、Lambda 関数には、S3 Object Lambda アクセスポイントにデータを送信する許可が必要です。このアクセス許可は、Lambda 関数の実行ロールで s3-object-lambda:WriteGetObjectResponse 許可を有効にすることで提供されます。新しい実行ロールを使作成することも、既存のロールを更新することもできます。

注記

関数に s3-object-lambda:WriteGetObjectResponse 許可が必要なのは、GET リクエストを行う場合のみです。

IAM コンソールで実行ロールを作成するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. 左のナビゲーションペインで、[ロール] を選択します。

  3. [ロールの作成] を選択します。

  4. [一般的なユースケース] で、[Lambda] を選択します。

  5. [Next] を選択します。

  6. [Add permissions] (許可の追加) ページで、AWS マネージドポリシー AmazonS3ObjectLambdaExecutionRolePolicy を検索し、ポリシー名の横にあるチェックボックスをオンにします。

    このポリシーには s3-object-lambda:WriteGetObjectResponse アクションを含める必要があります。

  7. [Next] を選択します。

  8. [Name, review, and create] (名前、確認、作成) ページで、[Role name] (ロール名) に s3-object-lambda-role と入力します。

  9. (オプション) このロールの説明とタグを追加します。

  10. [ロールの作成] を選択します。

  11. 新しく作成した s3-object-lambda-role を Lambda 関数の実行ロールとして適用します。これは、Lambda コンソールで Lambda 関数の作成中または作成後に実行できます。

実行ロールの詳細については、「AWS Lambda デベロッパーガイド」の「Lambda 実行ロール」を参照してください。

Object Lambda アクセスポイントでのコンテキストキーの使用

S3 Object Lambda は、リクエストの接続や署名に関連する s3-object-lambda:TlsVersions3-object-lambda:AuthType などのコンテキストキーを評価します。s3:prefix など、他のすべてのコンテキストキーは、Amazon S3 によって評価されます。