将 Athena 与 CalledVia 上下文键结合使用 - Amazon Athena
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将 Athena 与 CalledVia 上下文键结合使用

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

aws:CalledVia 上下文键

您可以使用 aws:CalledVia 全局条件上下文键,将策略中的服务与代表 IAM 委托人(用户或角色)发出请求的服务进行比较。当委托人向 AWS 服务发出请求时,该服务可能会使用委托人的凭证向其他服务发出后续请求。键包含链中代表委托人发出请求的每个服务的有序列表。aws:CalledVia

通过为 aws:CalledVia 上下文键指定服务委托人名称,您可以使上下文键特定于 AWS 服务。例如,您可以使用 aws:CalledVia 条件键将请求限制为仅由 Athena 发出的请求。要在策略中将 aws:CalledVia 条件键与 Athena 结合使用,请指定 Athena 服务委托人名称 athena.amazonaws.com,如以下示例所示。

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

您可以使用 aws:CalledVia 上下文键来确保在调用 Lambda 中的资源时,调用方只能访问资源(如 Athena 函数)。

添加可选的 CalledVia 上下文键以将精细访问添加到 Lambda 函数

Athena 需要调用方具有 lambda:InvokeFunction 权限才能调用与查询关联的 Lambda 函数。以下语句允许对 Lambda 函数进行精细访问,以便用户只能使用 Athena 调用 Lambda 函数。

{ "Sid": "VisualEditor3", "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-1:MyAWSAcctId:function:OneAthenaLambdaFunction", "Condition": { "ForAnyValue:StringEquals": { "aws:CalledVia": "athena.amazonaws.com" } } }

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

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "athena:GetWorkGroup", "s3:PutObject", "s3:GetObject", "athena:StartQueryExecution", "s3:AbortMultipartUpload", "athena:CancelQueryExecution", "athena:StopQueryExecution", "athena:GetQueryExecution", "athena:GetQueryResults", "s3:ListMultipartUploadParts" ], "Resource": [ "arn:aws:athena:*:MyAWSAcctId: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:*:MyAWSAcctId:function:OneAthenaLambdaFunction", "arn:aws:lambda:*:MyAWSAcctId:function:AnotherAthenaLambdaFunction" ], "Condition": { "ForAnyValue:StringEquals": { "aws:CalledVia": "athena.amazonaws.com" } } } ] }

有关 CalledVia 条件键的更多信息,请参阅 用户指南 中的 AWS 全局条件上下文键IAM。