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関数 を呼び出せるのは 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 グローバル条件コンテキストキー」を参照してください。