Uso de Athena con claves de contexto CalledVia - Amazon Athena

Uso de Athena con claves de contexto CalledVia

Cuando una entidad principal hace una solicitud 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:.

La clave de contexto aws:CalledVia

Puede utilizar la clave de contexto de condición global aws: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.

Agregar una clave de contexto CalledVia opcional para el acceso detallado a una función de Lambda

Athena requiere que la persona que llama tenga permisos lambda:InvokeFunction para invocar la función de Lambda asociada a la consulta. La siguiente instrucción permite el acceso detallado a una función de Lambda de modo que el usuario puede utilizar solo Athena para invocar la función de Lambda.

{ "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.

{ "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 en la Guía del usuario de IAM.