

# 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 서비스별로 지정할 수 있습니다. 예를 들어, `aws:CalledVia` 조건 키를 사용해 Athena에서 수행된 요청으로만 요청을 제한할 수 있습니다. 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` 권한이 있어야 합니다. 다음 문은 사용자가 Athena에서만 Lambda 함수를 간접적으로 호출할 수 있도록 지정합니다.

------
#### [ 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 카탈로그를 지정하는 쿼리를 실행할 수 있습니다. 그러나 보안 주체는 Athena를 통해 함수가 호출되지 않는 한 연결된 Lambda 함수에 액세스할 수 없습니다.

------
#### [ 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)를 참조하세요.