本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为 Amazon S3 接入点配置网络访问权限
在为适用于 ONTAP 的 FSx 卷创建 Amazon S3 接入点时,需要配置如何通过网络访问接入点以及谁有权使用该接入点。本节将帮助您为您的环境选择正确的网络和访问控制配置。
本节涵盖网络和 IAM 授权层,具体而言,接入点的网络来源、VPC 终端节点、接入点策略、VPC 终端节点策略、IAM 身份策略和服务控制策略。有关文件系统级授权(UNIX 和 Windows 用户权限)的信息,请参见文件系统用户身份和授权。
Amazon S3 如何评估接入点请求
当通过连接到 FSx for ONTAP 卷的 Amazon S3 接入点发出请求时,该请求必须经过以下所有层的授权:
网络来源检查 — 如果接入点有 VPC 网络来源,则请求必须通过绑定 VPC 中的 VPC 终端节点到达。否则,请求将在进行任何策略评估之前被拒绝。
VPC 终端节点策略 — 如果请求通过 VPC 终端节点,则该终端节点的策略必须允许对接入点资源执行操作。
接入点策略-评估接入点的 IAM 资源策略。对于同账号访问,接入点策略或来电者的身份策略都可以授予访问权限。对于跨账户访问,两者都必须允许。
IAM 身份策略 — 根据接入点资源评估请求委托人的基于身份的策略。
服务控制策略 (SCP)-如果账户是 Organizations AWS 组织的一部分,则任何适用的 SCP 都必须允许该操作。
网络起源检查在策略评估之前进行。其余层将作为标准 IAM 授权决策的一部分一起进行评估 — 任何层中的明确拒绝将覆盖其他层中的 Allow 语句。
选择网络来源
创建 Amazon S3 接入点时,您需要选择一个网络来源来决定访问接入点的方式。创建后您无法更改网络来源。
互联网起源
具有互联网网络来源的接入点类似于默认情况下访问 S3 存储桶的方式。所有请求仍需要有效的 IAM 凭证和授权 — 互联网来源并不意味着公开或匿名访问。Amazon S3 在连接到 FSx 的所有接入点上对 ONTAP 卷强制禁止公共访问,您无法禁用此设置。
通过 Internet Origin,经过身份验证的请求可以来自任何地方 — VPC、本地网络、其他 AWS 账户或公共互联网。您可以使用接入点策略和 IAM 身份策略控制允许哪些经过身份验证的来电者。
使用 Internet Origin,您可以使用接入点策略和 IAM 身份策略来控制访问权限。对于同账号来电者,请在接入点策略中使用明确的拒绝语句来限制访问——仅有 Allow-only 策略是不够的,因为呼叫者的 IAM 身份策略可以独立授予访问权限。对于跨账户来电者,接入点策略必须明确允许请求,因此省略 “允许” 就足以阻止访问。
VPC 起源
具有 VPC 网络来源的接入点绑定到特定 VPC,其行为实际上是明确的拒绝策略声明,拒绝任何与绑定 VPC aws:SourceVpc 不匹配的请求。由于显式拒绝始终优先于任何允许,因此即使是完全允许的接入点策略或 IAM 身份策略也无法向来自绑定 VPC 外部的请求授予访问权限。
如果绑定 VPC 之外的来电者的流量通过绑定 VPC 中的 VPC 终端节点(例如,通过 VPC 对等连接或 Transit Gateway)路由到绑定 VPC 中部署的 Amazon S3 接口终端节点,则仍可以访问接入点。
主要区别
| 互联网起源 | VPC 起源 | |
|---|---|---|
| 网络执法 | 无 — 访问权限仅受策略控制 | 对于未通过绑定 VPC 中的 VPC 终端节点到达的请求,实际上是显式拒绝 |
| Multi-VPC access | 通过政策条件提供支持 | 如果来电者通过绑定 VPC 中的接口终端节点(通过 VPC 对等连接或 Transit Gateway)进行路由,则支持此功能 |
| 更改访问范围 | 更新政策 | 必须重新创建接入点才能更改绑定的 VPC |
| 需要 VPC 终端节点 | 仅当使用aws:SourceVpc条件时 |
是 — 请求必须通过绑定 VPC 中的终端节点 |
VPC 起源执法的工作原理
当接入点具有 VPC 网络来源时,其行为实际上就像存在明确的拒绝策略声明一样,该声明拒绝所有aws:SourceVpc不等于接入点中指定的 VPC ID 的VpcConfiguration请求。此拒绝适用于所有委托人、所有 Amazon S3 操作以及接入点内的所有资源。
由于这是显式拒绝,因此它会覆盖任何 Allow 语句——无论是在接入点策略、呼叫者的 IAM 身份策略还是任何其他策略中。
实际上,这意味着:
请求必须通过部署在绑定 VPC 中的 VPC 终端节点(网关或接口)到达,因为只有 VPC 终端节点填充请求的
aws:SourceVpc属性。来自其他 VPC 的请求会被拒绝,因为它们的 VPC 终端节点填
aws:SourceVpc充了不同的 VPC ID。来自互联网的请求会被拒绝
aws:SourceVpc,因为请求中不存在。
这也是为什么拒绝请求的错误消息显示 “基于资源的策略中显式拒绝” 的原因。
重要
创建接入点后,您无法更改其网络来源。如果您需要从 VPC 源更改为 Internet 来源(反之亦然),则必须删除接入点并创建一个新的接入点。
VPC 来源与带有明确拒绝的互联网来源
VPC-origin 接入点和带有手动写入 “StringNotEquals aws:SourceVpc拒绝” 功能的 Internet 源接入点会得到类似的结果,即都拒绝来自指定 VPC 以外的请求。主要区别在于:
VPC 来源:拒绝内置在接入点的 VPC 配置中。您不能意外将其删除或配置错误。
使用 “拒绝” 的互联网起源:您可以自己编写和管理 “拒绝”。这为您提供了更大的灵活性(例如,允许多个 VPC),但也为您提供了更多的责任——如果缺少拒绝或配置错误,则不会强制执行该限制。
使用带有 Amazon S3 接入点的 VPC 终端节点
Amazon S3 接入点适用于这两种类型的 Amazon S3 的 VPC 终端节点。您需要的终端节点类型取决于您的来电者所在的位置。
网关端点
网关终端节点是免费的,并且基于路由表。创建网关终端节点时,会向指定的路由表中添加一条路由,用于引导 Amazon S3 流量通过该终端节点。此路由仅适用于源自 VPC 的流量。
将网关终端节点用于:
亚马逊 EC2 实例、Lambda 函数、亚马逊 ECS 任务和 VPC 内的其他计算资源
网关终端节点不会路由从以下来源进入 VPC 的流量:
On-premises 通过 VPN 或 Direct Connect
对等互连 VPC
公交 Gateway 连接
有关更多信息,请参阅 Amazon VPC 用户指南中的 Amazon S3 网关终端节点。
接口终端节点
接口终端节点使用您的子网中的私有 IP 地址创建弹性网络接口 (ENI)。流量必须明确定向到终端节点的 DNS 名称或私有 IP。
将接口端点用于:
On-premises 通过 VPN 或 Direct Connect 访问亚马逊 S3 的来电者
Cross-account 通过 VPC 对等互连访问亚马逊 S3 的来电者
流量从外部进入 VPC 的任何场景
使用接口端点时,呼叫者必须:
使用指向接口终端节点的 DNS 名称的
--endpoint-url参数,或者配置 DNS 以将 Amazon S3 终端节点解析为接口终端节点的私有 IP(使用 Route 53 解析器或本地 DNS 转发)
接口终端节点按小时和每 GB 收费。有关更多信息,请参阅AWS PrivateLink 定价
同时使用两种端点类型
您可以在同一 VPC 中同时部署网关终端节点和接口终端节点。当您同时拥有 VPC 内呼叫者和本地呼叫者时,此配置非常有用:
网关终端节点:处理 VPC 内流量(免费、透明)
接口终端节点:处理通过 VPN 或 Direct Connect 进入的本地流量(需要 DNS 配置或
--endpoint-url)
两种终端节点类型都使用 VPC ID 填充aws:SourceVpc属性,因此两者都满足 VPC 源拒绝条件。
VPC 端点策略
VPC 终端节点策略控制可以通过终端节点访问哪些 Amazon S3 资源。默认情况下,VPC 终端节点允许对所有资源执行所有 Amazon S3 操作。您可以将终端节点策略范围限定为仅允许特定的接入点:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:us-east-1:123456789012:accesspoint/my-access-point", "arn:aws:s3:us-east-1:123456789012:accesspoint/my-access-point/object/*" ] } ] }
接入点策略
Amazon S3 接入点支持 AWS Identity and Access Management (IAM) 资源策略,允许您根据资源、用户或其他条件控制接入点的使用。对于跨账户访问,接入点策略和调用方的 IAM 身份策略都必须允许该请求。对于同账户访问,接入点策略或呼叫者的 IAM 身份策略可以单独授予访问权限 — 要限制同账户来电者,请在接入点策略中使用明确的拒绝声明。如果请求通过 VPC 终端节点,则 VPC 终端节点策略还必须允许该请求。
有关接入点策略的更多信息,请参阅 A mazon 简单存储服务用户指南中的配置 IAM 策略以使用接入点。
基于网络的访问控制的条件密钥
IAM 提供全局条件密钥,您可以在接入点策略中使用这些密钥根据请求的网络属性控制访问权限。这些条件键仅在特定情况下才包含在请求上下文中,如下表所述。
| 条件键 | 可用性 | 说明 |
|---|---|---|
aws:SourceVpc |
仅当请求者使用 VPC 终端节点发出请求时,才包含在请求上下文中。 | 检查请求是否通过 VPC 终端节点所连接的 VPC 传输。使用此密钥仅允许访问特定 VPC。 |
aws:SourceVpce |
仅当请求者使用 VPC 终端节点发出请求时,才包含在请求上下文中。 | 发出请求所通过的 VPC 终端节点的 ID。 |
aws:VpcSourceIp |
仅当请求是使用 VPC 终端节点发出时,才包含在请求上下文中。 | 将发出请求的 IP 地址与您在策略中指定的 IP 地址进行比较。仅当请求来自指定的 IP 地址并通过 VPC 终端节点时才匹配。 |
aws:SourceIp |
仅当请求未通过 VPC 终端节点时,才包含在请求上下文中。 | 来电者的公有 IP 地址。不适用于通过 VPC 终端节点发出的请求。 |
重要
aws:SourceIp并且aws:VpcSourceIp是相互排斥的。当请求通过 VPC 终端节点时,不可aws:SourceIp用,请aws:VpcSourceIp改用。如果请求来自互联网(没有 VPC 终端节点),aws:VpcSourceIp则不可用,请aws:SourceIp改用。
重要
条件键区分aws:VpcSourceIp大小写。
有关 IAM 全局条件密钥的更多信息,请参阅 I AM 用户指南中的AWS 全局条件上下文密钥。
应用场景示例
以下示例场景显示了连接到 FSx 的 ONTAP 卷的 Amazon S3 接入点的常见配置。每种场景都包括推荐的网络来源、VPC 终端节点类型和接入点策略。
单个 VPC 访问权限
用例:单个 VPC 中的亚马逊 EC2 实例、Lambda 函数或亚马逊 ECS 任务访问接入点。无需外部访问。
使用 VPC 网络来源:
VPC 源配置可以有效地拒绝与绑定 VPC aws:SourceVpc 不匹配的请求。来自其他 VPC、互联网或本地网络的请求会被拒绝。您可以使用网关或接口 Amazon S3 VPC 终端节点。
接入点策略示例(VPC 来源):对于 VPC 来源,网络限制是内置的。接入点策略只需要授予所需的权限。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::123456789012:role/my-app-role"}, "Action": [ "s3:GetObject", "s3:PutObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:us-east-1:123456789012:accesspoint/my-access-point", "arn:aws:s3:us-east-1:123456789012:accesspoint/my-access-point/object/*" ] } ] }
互联网网络起源:
使用 Internet Origin,您可以使用接入点策略中的aws:SourceVpc条件来限制对 VPC 的访问(使用明确的拒绝)。需要一个 VPC 终端节点,以便在请求中填充aws:SourceVpc该终端节点。
接入点策略示例(源自 Internet):该策略既包括带有 VPC 条件的 “允许”,也包括拒绝来自 VPC 的请求。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::123456789012:role/my-app-role"}, "Action": [ "s3:GetObject", "s3:PutObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:us-east-1:123456789012:accesspoint/my-access-point", "arn:aws:s3:us-east-1:123456789012:accesspoint/my-access-point/object/*" ], "Condition": { "StringEquals": {"aws:SourceVpc": "vpc-1a2b3c4d"} } }, { "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:us-east-1:123456789012:accesspoint/my-access-point", "arn:aws:s3:us-east-1:123456789012:accesspoint/my-access-point/object/*" ], "Condition": { "StringNotEquals": {"aws:SourceVpc": "vpc-1a2b3c4d"} } } ] }
注意
接入点策略中都需要使用 Allow 和 Deny 语句。如果没有 Deny 语句,则可能无法对所有呼叫者强制执行 VPC 限制。
| VPC 起源 | 互联网起源 | |
|---|---|---|
| 网络执法 | Built-in 拒绝 | Policy-based (允许 + 拒绝) |
| VPC 端点 | 必需(网关或接口) | 必填项(对于aws:SourceVpc) |
| 接入点政策 | 最小-内置 “拒绝” 句柄限制 | 必须包含 “aws:SourceVpc允许 + 拒绝” |
On-premises 以及 VPC 访问权限
用例:本地用户(通过 VPN 或 Direct Connect)和 VPC 内的计算资源都访问接入点。所有流量都保持私密性。
重要
网关终端节点不会路由从 VPN、Direct Connect 或 Transit Gateway 连接进入 VPC 的流量。 On-premises 呼叫者必须使用 Amazon S3 接口终端节点。有关详细信息,请参阅 使用带有 Amazon S3 接入点的 VPC 终端节点。
网关终端节点(VPC 内流量)和接口终端节点(本地流量)都在同一 VPC 中,因此两者都满足 VPC 源拒绝条件。
| VPC 起源 | 互联网起源 | |
|---|---|---|
| In-VPC 终端节点 | 网关(免费) | 网关(适用于aws:SourceVpc) |
| On-prem 终端节点 | 接口(必填) | 接口(必填) |
| On-prem DNS | 将 Amazon S3 解析为接口终端节点 IP | 将 Amazon S3 解析为接口终端节点 IP |
Multi-VPC 访问
用例:多个 VPC 中的呼叫者需要访问同一个接入点。例如,同一账户中位于不同 VPC 中的应用程序,或者通过 VPC 对等互连或 Transit Gateway 连接的不同账户中的 VPC。
多 VPC 访问有两种方法,具体取决于您是要使用基于策略的控制还是 VPC 源网络强制执行。
选项 1:互联网来源,每个 VPC 中都有一个网关终端节点
每个 VPC 都有自己的 Amazon S3 网关终端节点。每个 VPC 中的呼叫者通过其本地网关终端节点访问接入点,该终端节点会aws:SourceVpc根据请求填充。接入点策略限制对允许的 VPC ID 的访问。
网络起源:互联网
VPC 终端节点:每个 VPC 中的 Amazon S3 网关终端节点(免费,无需额外配置)
接入点策略:允许
aws:SourceVpc列出所有 VPC ID,再加上 “拒绝”StringNotEquals
注意
接入点策略中都需要使用 Allow 和 Deny 语句。如果没有 Deny 语句,则可能无法对所有呼叫者强制执行 VPC 限制。
此选项的设置更简单,因为每个 VPC 都独立运行,不需要 VPC 对等互连或 Transit Gateway。要添加或删除 VPC,请更新接入点策略。
选项 2:带有集中式接口终端节点的 VPC 源
一个 VPC 托管一个 Amazon S3 接口终端节点,该接入点是使用绑定到该 VPC 的 VPC 源创建的。其他 VPC 通过 VPC 对等互连或 Transit Gateway 将其 Amazon S3 流量路由到接口终端节点。由于所有请求都通过绑定 VPC 中的终端节点到达,因此它们满足 VPC 源强制执行的要求。
网络来源:VPC(绑定到托管接口终端节点的 VPC)
VPC 终端节点:绑定 VPC 中的 Amazon S3 接口终端节点
连接:其他 VPC 与绑定的 VPC 之间的 VPC 对等或 Transit Gateway
接入点策略:最小 — VPC 源强制措施处理网络限制
来电者配置:其他 VPC 中的呼叫者必须使用
--endpoint-url或 DNS 配置才能通过接口终端节点路由请求
此选项提供了更强的强制执行,因为无法通过策略更改来绕过 VPC 来源限制。但是,它需要 VPC 对等连接或 Transit Gateway 连接,并且接口终端节点按小时和每 GB 收费。有关接口终端节点的更多信息,AWS PrivateLink请参阅《亚马逊简单存储服务用户指南》中的 Amazon S3。
网络访问问题疑难解答
当 Amazon S3 接入点请求失败时,错误消息通常不会表明哪个授权层拒绝了该请求。使用以下指导来诊断常见问题。
AccessDenied 改为 “在基于资源的策略中明确拒绝”
此错误可能来自多个来源。按顺序完成以下检查:
1。选中 VPC 源拒绝(仅限VPC-origin 接入点)
如果接入点具有 VPC 网络来源,则它实际上会拒绝与绑定 VPC aws:SourceVpc 不匹配的请求。验证:
VPC 终端节点(网关或接口)存在于绑定的 VPC 中。
呼叫者的流量正在通过该端点进行路由。对于 vPC 内呼叫者,请验证网关终端节点的路由表是否与呼叫者的子网关联。对于本地呼叫者,请确认他们正在使用接口终端节点(网关终端节点不路由 VPN 或 Direct Connect 流量)。
来电者位于绑定的 VPC 中,而不是对等 VPC 中。除非通过绑定 VPC 中的接口终端节点进行路由,否则来自对等 VPC 的请求将被拒绝。
2。查看 VPC 终端节点策略
如果请求通过 VPC 终端节点,则该终端节点的策略必须允许对接入点资源执行操作。默认终端节点策略允许对所有资源执行所有操作。如果您已经确定了策略的范围,请确认它包括接入点 ARN。
3。查看接入点政策
验证接入点策略是否允许请求的主体。检查是否存在条件可能与请求匹配的 Deny 语句。
4。查看来电者的 IAM 身份政策
调用者的 IAM 角色或用户必须具有在接入点 ARN 上执行 Amazon S3 操作的权限。
5。检查服务控制策略 (SCP)
如果该账户是 Organizations AWS 组织的一部分,请确认没有任何 SCP 拒绝接入点上的 Amazon S3 操作。
On-premises 来电者得到 AccessDenied 但在 vpC 内呼叫者成功了
这通常意味着本地流量未通过 VPC 终端节点路由:
网关终端节点不路由本地流量。从 VPN、Direct Connect 或 Transit Gateway 连接进入 VPC 的流量不受网关终端节点路由的影响。为本地呼叫者创建 Amazon S3 接口终端节点。
验证接口终端节点的安全组允许来自本地 CIDR 的入站 HTTPS(端口 443)。
验证本地 DNS 是否将 Amazon S3 终端节点解析为接口终端节点的私有 IP 或呼叫者使用的私有 IP。
--endpoint-url
接入点策略条件似乎无效
Allow-only 策略不限制访问。如果您仅在 Allow 语句中使用条件(例如
aws:SourceVpc),而没有相应的拒绝,则调用者的 IAM 身份策略可以独立授予访问权限。添加带有相反条件的显式 Deny 语句。区分大小写。条件键区分
aws:VpcSourceIp大小写。互斥的条件键。
aws:SourceIp并且aws:VpcSourceIp是相互排斥的。aws:SourceIp当请求通过 VPC 终端节点时不可用,请改用aws:VpcSourceIp。相反,aws:VpcSourceIp不适用于互联网请求——使用aws:SourceIp。这适用于使用这些条件密钥的所有策略,包括接入点策略、VPC 终端节点策略和 IAM 身份策略。