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

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

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

委托人使得请求到Amazon、Amazon将请求信息收集到请求上下文,用于评估和授权请求。您可以使用 JSON 策略的 Condition 元素将请求上下文中的键与您在策略中指定的键值进行比较。全局条件上下文键是带有aws:prefix.

这些区域有:aws:CalledVia上下文键

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

通过指定用于aws:CalledVia上下文键,您可以将上下文键设置为Amazon特定于服务的。例如,您可以使用aws:CalledVia条件键将请求限制为仅从 Athena 发出的请求。使用aws:CalledVia条件键,您可以指定 Athena 服务主体名称athena.amazonaws.com,如以下示例所示。

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

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

添加一个可选的 CalledVia 的上下文密钥,用于对 Lambda 函数进行细粒度访问

Athena 要求调用者有lambda:InvokeFunction权限,以调用与查询关联的 Lambda 函数。以下语句允许对 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条件键,请参阅Amazon全局条件上下文键中的IAM 用户指南.