使用适用于 Athena 的 CalledVia 上下文密钥 - Amazon Athena

使用适用于 Athena 的 CalledVia 上下文密钥

主体 向 AWS 提交请求时,AWS 会将请求信息收集到请求上下文,以评估并授权该请求。您可以使用 JSON 策略的 Condition 元素将请求上下文中的键与您在策略中指定的键值进行比较。全局条件上下文键是带 aws: 前缀的条件键。

关于 aws:CalledVia 上下文密钥

您可以使用 aws: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 上下文键与可信身份传播功能不兼容。

添加可选的 CalledVia 上下文密钥,用于访问 Lambda 函数

Athena 要求调用者有 lambda:InvokeFunction 权限,以便调用与查询关联的 Lambda 函数。以下语句指定用户只能通过 Athena 调用 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" } } } ] }

下例说明了将前一语句添加到策略中以允许用户运行和读取联合查询。允许执行这些操作的委托人可以运行指定与联合数据源关联的 Athena 目录的查询。但是,除非通过 Athena 调用该函数,否则委托人无法访问关联的 Lambda 函数。

{ "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 全局条件上下文键