

# Uso de las claves de contexto CalledVia para Athena
<a name="security-iam-athena-calledvia"></a>

Cuando una [entidad principal](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-principal) hace una [solicitud](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-request) a AWS, AWS recopila la información de la solicitud en un *contexto de solicitud* que la evalúa y la autoriza. Puede utilizar el elemento `Condition` de una política JSON para comparar las claves de la solicitud de contexto con los valores de claves que especifique en su política. *Las claves de contexto de condición globales* son claves de condición con un prefijo `aws:`.

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

Puede utilizar la clave de contexto de condición 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 los servicios de la política con los servicios que realizaron solicitudes en nombre de la entidad principal de IAM (usuario o rol). Cuando una entidad principal hace una solicitud a un Servicio de AWS, ese servicio puede utilizar las credenciales de la entidad principal para hacer solicitudes posteriores a otros servicios. La clave `aws:CalledVia` contiene una lista ordenada de cada servicio de la cadena que realizó solicitudes en nombre de la entidad principal.

Al especificar el nombre de una entidad principal del servicio para la clave de contexto `aws:CalledVia`, puede hacer que la clave de contexto sea específica del Servicio de AWS. Por ejemplo, puede utilizar la clave de condición `aws:CalledVia` para limitar las solicitudes únicamente a las realizadas desde Athena. Para utilizar la clave de condición `aws:CalledVia` en una política con Athena, especifica el nombre de la entidad principal de servicio de Athena `athena.amazonaws.com`, como en el siguiente ejemplo.

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

Puede utilizar la clave de contexto `aws:CalledVia` para asegurarse de que las personas que llaman solo tengan acceso a un recurso (como una función de Lambda) si llaman al recurso desde Athena.

**nota**  
La clave de contexto `aws:CalledVia` no es compatible con la característica de propagación de identidades fiables.

## Incorporación de una clave de contexto CalledVia para el acceso a las funciones de 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>

Athena requiere que la persona que llama tenga permisos `lambda:InvokeFunction` para invocar la función de Lambda asociada a la consulta. La siguiente declaración especifica que el usuario solo puede invocar funciones de Lambda desde 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"
                }
            }
        }
    ]
}
```

------

En el siguiente ejemplo, se muestra la adición de la instrucción anterior a una política que permite a un usuario ejecutar y leer una consulta federada. Las entidades principales a las que se les permite realizar estas acciones pueden ejecutar consultas que especifican catálogos de Athena asociados a un origen de datos federado. Sin embargo, la entidad principal no puede acceder a la función de Lambda asociada a menos que la función se invoque través de 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 obtener más información acerca de las claves de condición `CalledVia`, consulte [claves de contexto de condición globales de AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) en la *Guía del usuario de IAM*.