Usar chaves de contexto CalledVia para o Athena
Quando uma entidade principal faz uma solicitação para a AWS, a AWS reúne as informações da solicitação em um contexto de solicitação que 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
Você pode usar a chave de contexto de condição global aws: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
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.
{ "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.
{ "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 no Manual do usuário do IAM.