

# Usar chaves de contexto CalledVia para o Athena
<a name="security-iam-athena-calledvia"></a>

Quando uma [entidade principal](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-principal) faz uma [solicitação](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-request) à AWS, a AWS reúne as informações da solicitação em um *contexto de solicitação* que a avalia e autoriza a solicitação. É possível usar o elemento `Condition` de uma política JSON para comparar chaves no contexto da solicitação com os valores de chave especificados em sua política. As *chaves de contexto de condição global* são chaves de condição com um prefixo `aws:`.

## Sobre a chave de contexto aws:CalledVia
<a name="security-iam-athena-calledvia-the-awscalledvia-context-key"></a>

Você pode usar a chave de contexto de condição global [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) para comparar os serviços na política com os serviços que fazem solicitações em nome do principal do IAM (usuário ou função). Quando uma entidade principal faz uma solicitação a um AWS service (Serviço da AWS), esse serviço pode usar as credenciais do principal para fazer solicitações subsequentes a outros serviços. A chave `aws:CalledVia` contém uma lista ordenada de cada serviço na cadeia que fez solicitações em nome do principal.

Ao especificar um nome de elemento principal de serviço para a chave de contexto `aws:CalledVia`, você pode tornar a chave de contexto específica do AWS service (Serviço da AWS). Por exemplo, você pode usar a chave de condição `aws:CalledVia` para limitar as solicitações somente àquelas feitas pelo Athena. Para usar a chave de condição `aws:CalledVia` em uma política com o Athena, especifique o nome do principal do serviço do Athena `athena.amazonaws.com`, como mostrado no exemplo a seguir.

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

Você pode usar a chave de contexto `aws:CalledVia` para garantir que os autores da chamada só tenham acesso a um recurso (como uma função do Lambda) se o chamarem pelo Athena.

**nota**  
A chave de contexto `aws:CalledVia` não é compatível com o recurso de propagação de identidade confiável.

## Adicionar uma chave de contexto CalledVia para acesso às funções do Lambda
<a name="security-iam-athena-calledvia-example-policy-to-add-an-optional-calledvia-context-key-for-fine-grained-access-to-a-lambda-function"></a>

O Athena exige que o autor da chamada tenha as permissões `lambda:InvokeFunction` para invocar a função do Lambda associada à consulta. A Instrução a seguir especifica que o usuário só pode invocar as funções do Lambda no 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"
                }
            }
        }
    ]
}
```

------

O exemplo a seguir mostra a adição da instrução anterior a uma política que permite a um usuário executar e ler uma consulta federada. Os principais com permissão para realizar essas ações podem executar consultas que especificam catálogos do Athena associados a uma origem dos dados federada. No entanto, o principal não pode acessar a função do Lambda associada, a menos que ela seja invocada pelo 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"
                }
            }
        }            
    ]
}
```

------

Para obter mais informações sobre as chaves de condição `CalledVia`, consulte [Chaves de contexto de condição global AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) no *Manual do usuário do IAM*.