

# Athena に CalledVia コンテキスト キーを使用する
<a name="security-iam-athena-calledvia"></a>

[プリンシパル](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-principal)が AWS に対して[リクエスト](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-request)を実行すると、AWS は、リクエストを評価して承認する*リクエストコンテキスト*にリクエスト情報を収集します。JSON ポリシーの `Condition` 要素を使用して、リクエストコンテキストのキーを、ポリシーで指定したキー値と比較できます。グローバル条件コンテキストキーは、`aws:` プレフィックスを持つ条件キーです。

## aws:CalledVia コンテキストキーについて
<a name="security-iam-athena-calledvia-the-awscalledvia-context-key"></a>

[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-calledvia](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-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 コンテキスト キーを追加しする
<a name="security-iam-athena-calledvia-example-policy-to-add-an-optional-calledvia-context-key-for-fine-grained-access-to-a-lambda-function"></a>

Athena は、発信者がクエリに関連付けられた Lambda 関数を呼び出すには、`lambda:InvokeFunction` 許可を持っていることを必須としています。次のステートメントでは、ユーザーが Lambda関数 を呼び出せるのは Athena からのみに限定します。

------
#### [ JSON ]

****  

```
{
    "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 経由で呼び出される場合を除き、この関数にはアクセスできません。

------
#### [ JSON ]

****  

```
{
    "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 グローバル条件コンテキストキー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)」を参照してください。