转发访问会话 - Amazon Identity and Access Management
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

转发访问会话

转发访问会话(FAS)是一种 IAM 技术,当 Amazon 服务代表您发出请求时,Amazon 服务使用该技术来传递您的身份、权限和会话属性。FAS 使用调用 Amazon 服务的身份的权限以及 Amazon 服务的身份向下游服务发出请求。只有在服务收到需要与其他 Amazon 服务或资源交互才能完成的请求后,才会代表 IAM 主体向 Amazon 服务发出 FAS 请求。当发出 FAS 请求时:

  • 接收 IAM 主体初始请求的服务会检查 IAM 主体的权限。

  • 接收 FAS 后续请求的服务也会检查同一 IAM 主体的权限。

例如,当使用 SSE-KMS 加密对象时,Amazon S3 使用 FAS 调用 Amazon Key Management Service 以解密该对象。下载 SSE-KMS 加密对象时,名为 data-reader 的角色会针对 Amazon S3 在对象上调用 GetObject,并且不会直接调用 Amazon KMS。在收到 GetObject 请求并授权 data-reader 后,Amazon S3 会向 Amazon KMS 发出 FAS 请求以解密 Amazon S3 对象。当 KMS 收到 FAS 请求时,它会检查角色的权限,并且只有在 data-reader 对 KMS 密钥具有正确权限的情况下才会授权解密请求。对 Amazon S3 和 Amazon KMS 的请求均使用角色的权限进行授权,并且只有当 data-reader 同时拥有对 Amazon S3 对象和 Amazon KMS 密钥的权限时,请求才会成功。

将 IAM 角色作为主体传递给 Amazon S3,然后传递给 Amazon KMS 的流程图。
注意

收到 FAS 请求的服务可以发出其他 FAS 请求。在这种情况下,请求的主体必须拥有对 FAS 调用的所有服务的权限。

FAS 请求和 IAM policy 条件

当发出 FAS 请求时,aws:CalledViaaws:CalledViaFirstaws:CalledViaLast 条件键将填充启动 FAS 调用的服务的服务主体。每当发出 FAS 请求时,aws:ViaAWSService 条件键值都设置为 true。在下图中,直接向 CloudFormation 发出的请求未设置任何 aws:CalledViaaws:ViaAWSService 条件键。当 CloudFormation 和 DynamoDB 代表角色发出下游 FAS 请求时,会填充这些条件键的值。

将 IAM 角色作为主体传递给 CloudFormation,然后将条件键值传递给 DynamoDB 和 Amazon KMS 的流程图。

要在会被具有条件键测试源 IP 地址或源 VPC 的拒绝策略声明拒绝的情况下允许发出 FAS 请求,您必须使用条件键在拒绝策略中为 FAS 请求提供例外。使用 aws:ViaAWSService 条件键可以对所有 FAS 请求执行此操作。要仅允许特定 Amazon 服务发出 FAS 请求,请使用 aws:CalledVia

重要

在通过 VPC 端点发出初始请求后发出 FAS 请求时,来自初始请求的 aws:SourceVpceaws:SourceVpcaws:VpcSourceIp 的条件键值不用于 FAS 请求中。使用 aws:VPCSourceIPaws:SourceVPCE 编写策略以有条件地授予访问权限时,还必须使用 aws:ViaAWSServiceaws:CalledVia 允许 FAS 请求。如果在公共 Amazon 服务端点收到初始请求后发出 FAS 请求,则后续的 FAS 请求将使用相同的 aws:SourceIP 条件键值发出。

示例:允许 Amazon S3 从 VPC 或通过 FAS 进行访问

在以下 IAM policy 示例中,只有当 Amazon S3 GetObject 和 Athena 请求来自附加到 example_vpc 的 VPC 端点,或者是 Athena 发出的 FAS 请求时,这些请求才可以被允许。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "OnlyAllowMyIPs", "Effect": "Allow", "Action": [ "s3:GetObject*", "athena:StartQueryExecution", "athena:GetQueryResults", "athena:GetWorkGroup", "athena:StopQueryExecution", "athena:GetQueryExecution" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceVPC": [ "example_vpc" ] } } }, { "Sid": "OnlyAllowFAS", "Effect": "Allow", "Action": [ "s3:GetObject*" ], "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "aws:CalledVia": "athena.amazonaws.com" } } } ] }

有关使用条件键允许 FAS 访问的其他示例,请参阅数据边界示例策略存储库