Athena での CalledVia コンテキストキーの使用 - Amazon Athena

Athena での CalledVia コンテキストキーの使用

プリンシパルが AWS に対してリクエストを実行すると、AWS は、リクエストを評価して承認するリクエストコンテキストにリクエスト情報を収集します。JSON ポリシーの Condition 要素を使用して、リクエストコンテキストのキーを、ポリシーで指定したキー値と比較できます。グローバル条件コンテキストキーは、aws: プレフィックスを持つ条件キーです。

aws:CalledVia コンテキストキー

aws:CalledVia グローバル条件コンテキストキーを使用して、ポリシー内のサービスと、IAM プリンシパル (ユーザーまたはロール) に代わってリクエストを実行したサービスを比較します。プリンシパルが AWS サービス に対してリクエストを実行すると、そのサービスはプリンシパルの認証情報を使用して、他のサービスに対して後続のリクエストを実行することがあります。aws:CalledVia キーには、プリンシパルに代わってリクエストを実行したチェーン内の各サービスの順序付きリストが含まれます。

aws:CalledVia コンテキストキーにサービスプリンシパル名を指定することで、コンテキストキーを AWS サービス 固有のものにすることができます。例えば、リクエストを Athena から実行されるものだけに制限するには、aws:CalledVia 条件キーを使用できます。Athena のポリシーで aws:CalledVia 条件キーを使用するには、以下の例にあるように、Athena サービスプリンシパル名 athena.amazonaws.com を指定します。

... "Condition": { "ForAnyValue:StringEquals": { "aws:CalledVia": "athena.amazonaws.com" } } ...

aws:CalledVia コンテキストキーを使用して、発信者が Athena からのリソース (Lambda 関数など) を呼び出す場合に、発信者のアクセス権がそのリソース限定であることを確実にすることができます。

注記

aws:CalledVia コンテキストキーは、信頼できる ID 伝達機能と互換性がありません。

Lambda 関数へのきめ細かなアクセス権のためにオプションの CalledVia コンテキストキーを追加する

Athena は、発信者がクエリに関連付けられた Lambda 関数を呼び出すには、lambda:InvokeFunction 許可を持っていることを必須としています。以下のステートメントは、Lambda 関数に対するきめ細かなアクセス許可を可能にして、ユーザーが Lambda 関数の呼び出しに Athena しか使用できないようにします。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor3", "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-1:111122223333:function:OneAthenaLambdaFunction", "Condition": { "ForAnyValue:StringEquals": { "aws:CalledVia": "athena.amazonaws.com" } } } ] }

以下の例は、ユーザーが横串検索を実行して読み取ることができるようにするポリシーに対する、上記ステートメントの追加を示しています。これらのアクションの実行が許可されているプリンシパルは、フェデレーティッドデータソースに関連付けられた Athena カタログを指定するクエリを実行できますが、関連付けられた Lambda 関数が Athena 経由で呼び出される場合を除き、この関数にはアクセスできません。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "athena:GetWorkGroup", "s3:PutObject", "s3:GetObject", "athena:StartQueryExecution", "s3:AbortMultipartUpload", "athena:StopQueryExecution", "athena:GetQueryExecution", "athena:GetQueryResults", "s3:ListMultipartUploadParts" ], "Resource": [ "arn:aws:athena:*:111122223333:workgroup/WorkGroupName", "arn:aws:s3:::MyQueryResultsBucket/*", "arn:aws:s3:::MyLambdaSpillBucket/MyLambdaSpillPrefix*" ] }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "athena:ListWorkGroups", "Resource": "*" }, { "Sid": "VisualEditor2", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::MyLambdaSpillBucket" }, { "Sid": "VisualEditor3", "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": [ "arn:aws:lambda:*:111122223333:function:OneAthenaLambdaFunction", "arn:aws:lambda:*:111122223333:function:AnotherAthenaLambdaFunction" ], "Condition": { "ForAnyValue:StringEquals": { "aws:CalledVia": "athena.amazonaws.com" } } } ] }

CalledVia 条件キーの詳細については、IAM ユーザーガイドの「AWS グローバル条件コンテキストキー」を参照してください。