View a markdown version of this page

为 Amazon S3 接入点配置网络访问权限 - FSx for ONTAP

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

为 Amazon S3 接入点配置网络访问权限

当您为 FSx for ONTAP 卷创建 Amazon S3 接入点时,您可以配置如何通过网络访问该接入点以及谁有权使用该接入点。本节帮助您为您的环境选择正确的网络和访问控制配置。

本节涵盖网络和 IAM 授权层——具体而言,接入点的网络来源、VPC 终端节点、接入点策略、VPC 终端节点策略、IAM 身份策略和服务控制策略。有关文件系统级授权(UNIX 和 Windows 用户权限)的信息,请参阅文件系统用户身份和授权

Amazon S3 如何评估接入点请求

当通过连接到 FSx for ONTAP 卷的 Amazon S3 接入点发出请求时,该请求必须得到以下所有层的授权:

  • 网络源检查 — 如果接入点有 VPC 网络来源,则请求必须通过绑定 VPC 中的 VPC 终端节点到达。否则,在进行任何策略评估之前,请求将被拒绝。

  • VPC 终端节点策略 — 如果请求遍历 VPC 终端节点,则终端节点的策略必须允许对接入点资源执行操作。

  • 接入点策略 — 评估接入点的 IAM 资源策略。对于同一个账户的访问权限,接入点政策或呼叫者的身份政策都可以授予访问权限。要进行跨账户访问,两者都必须允许。

  • IAM 身份政策 — 根据接入点资源评估请求主体的基于身份的政策。

  • 服务控制策略 (SCP) — 如果账户是 AWS 组织的一部分,则任何适用的 SCP 都必须允许该操作。

网络来源检查在策略评估之前进行。其余层将作为标准 IAM 授权决策的一部分一起进行评估—— 任何层中的明确拒绝都会覆盖其他层中的 Allow 语句。

选择网络来源

创建 Amazon S3 接入点时,您可以选择一个网络源来决定如何到达接入点。创建后您无法更改网络来源。

互联网起源

具有互联网网络来源的接入点类似于默认情况下访问 S3 存储桶的方式。所有请求仍需要有效的 IAM 证书和授权 ——互联网起源并不意味着公开或匿名访问。Amazon S3 对连接到 FSx 的 ONTAP 卷的所有接入点强制禁止公有访问,并且您无法禁用此设置。

有了互联网起源,经过身份验证的请求可以来自任何地方,包括VPC、本地网络、其他 AWS 账户或公共互联网。您可以使用接入点策略和 IAM 身份策略控制允许哪些经过身份验证的呼叫者。

使用互联网起源,您可以使用接入点策略和 IAM 身份策略控制访问权限。对于同账户调用者,在接入点策略中使用明确的 Deny 语句来限制访问权限—— Allow-only 策略是不够的,因为呼叫者的 IAM 身份政策可以独立授予访问权限。对于跨账户调用者,接入点策略必须明确允许请求,因此省略 “允许” 足以阻止访问。

VPC 来源

具有 VPC 网络起源的接入点绑定到特定 VPC,实际上表现为明确的 “拒绝” 策略声明,拒绝与绑定 VPC aws:SourceVpc 不匹配的任何请求。由于显式拒绝总是会覆盖任何 Allow,因此即使是完全允许的接入点策略或 IAM 身份策略也无法授予对来自绑定 VPC 外部的请求的访问权限。

如果绑定 VPC 中的流量通过绑定 VPC 中的 VPC 终端节点(例如,通过 VPC 对等互连或传输网关路由到部署在绑定 VPC 中的 Amazon S3 接口终端节点),则绑定 VPC 外部的调用者仍然可以访问接入点。

主要区别

互联网起源VPC 来源
网络执法 无 — 访问权限仅受策略控制 实际上是对未通过绑定 VPC 中的 VPC 终端节点到达的请求的明确拒绝
Multi-VPC access 受政策条件支持 如果呼叫者通过绑定 VPC 中的接口终端节点进行路由(通过 VPC 对等互连或传输网关),则支持
更改访问范围 更新政策 必须重新创建接入点才能更改绑定的 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 源更改为互联网起源(反之亦然),则必须删除接入点并创建一个新的接入点。

VPC 源与带有明确拒绝的互联网起源

VPC-origin 接入点和带有手动写入 “StringNotEquals aws:SourceVpc拒绝” 的互联网源接入点可获得类似的结果——两者都拒绝非来自指定 VPC 的请求。关键区别在于:

  • VPC 来源:拒绝功能内置于接入点的 VPC 配置中。你不能意外地将其删除或错误地配置它。

  • 使用 Deny 进行互联网起源:您可以自己编写和管理 Deny。这为您提供了更大的灵活性(例如,允许多个 VPC),但也增加了责任——如果缺少 “拒绝” 或配置错误,则不会强制执行该限制。

使用 VPC 终端节点和 Amazon S3 接入点

亚马逊 S3 接入点适用于这两种类型的 Amazon S3 的 VPC 终端节点。您需要的终端节点类型取决于您的呼叫者所在的位置。

网关端点

网关终端节点是免费的,基于路由表。当您创建网关终端节点时,会向指定的路由表中添加一条路由,引导 Amazon S3 流量通过该终端节点。此路由仅适用于源于 VPC 内的流量

将网关终端节点用于:

  • Amazon EC2 实例、Lambda 函数、Amazon ECS 任务和 VPC 内的其他计算资源

网关终端节点路由从以下地址进入 VPC 的流量:

  • On-premises 通过 VPN 或直接连接建立网络

  • 对等 VPC

  • 传输网关连接

有关更多信息,请参阅《亚马逊 VPC 用户指南》中的 Amaz on S3 的网关终端节点。

接口终端节点

接口终端节点使用您的子网中的私有 IP 地址创建弹性网络接口 (ENI)。流量必须明确定向到端点的 DNS 名称或私有 IP。

将接口端点用于:

  • On-premises 呼叫者通过 VPN 或直接连接访问 Amazon S3

  • Cross-account 呼叫者通过 VPC 对等访问亚马逊 S3

  • 流量从外部进入 VPC 的任何场景

使用接口端点时,呼叫者必须:

  • 使用指向接口端点的 DNS 名称的--endpoint-url参数,或

  • 配置 DNS 以将 Amazon S3 终端节点解析为接口终端节点的私有 IP(使用 Route 53 解析器或本地 DNS 转发)

接口终端节点按小时和每 GB 收费。有关更多信息,请参阅AWS PrivateLink 定价

同时使用两种端点类型

您可以在同一 VPC 中部署网关终端节点和接口终端节点。当您同时拥有 VPC 内呼叫者和本地呼叫者时,此配置很有用:

  • 网关终端节点:处理 VPC 内流量(免费、透明)

  • 接口终端节点:处理通过 VPN 或直接连接进入的本地流量(需要 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 身份策略都可以独立授予访问权限——要限制同账户调用者,请在接入点策略中使用明确的 Deny 语句。如果请求遍历 VPC 终端节点,则 VPC 终端节点策略也必须允许该请求。

有关接入点策略的更多信息,请参阅《亚马逊简单存储服务用户指南》中的配置 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 for ONTAP 卷的 Amazon S3 接入点的常见配置。每个场景都包括推荐的网络来源、VPC 终端节点类型和接入点策略。

单个 VPC 访问

用例:单个 VPC 中的亚马逊 EC2 实例、Lambda 函数或 Amazon ECS 任务访问接入点。无需外部访问。

使用 VPC 网络来源:

使用 VPC 网络源进行单个 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/*" ] } ] }

使用互联网网络来源:

使用互联网网络来源的单个 VPC 访问

使用互联网起源,您可以使用接入点策略中的aws:SourceVpc条件限制对 VPC 的访问(明确拒绝)。需要一个 VPC 终端节点,以便在请求中填充aws:SourceVpc该终端节点。

接入点策略示例(互联网来源):该策略包括带有 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"} } } ] }
注意

在接入点策略中,“允许” 和 “拒绝” 语句都是必需的。如果没有 Deny 语句,则可能无法对所有调用者执行 VPC 限制。

VPC 起源互联网起源
网络执法 Built-in 拒绝 Policy-based (允许 + 拒绝)
VPC 端点 必需(网关或接口) 必填项(用于aws:SourceVpc
接入点政策 最小 — 内置 Deny 可处理限制 必须包括 “aws:SourceVpc允许” + “拒绝”

On-premises 和 VPC 访问权限

用例:本地用户(通过 VPN 或直接连接)和 VPC 内计算资源均可访问接入点。所有流量都保持私密状态。

重要

网关终端节点不会路由从 VPN、专线或中转网关连接进入 VPC 的流量。 On-premises 呼叫者必须使用 Amazon S3 接口终端节点。有关详细信息,请参阅使用 VPC 终端节点和 Amazon S3 接入点

On-premises 以及通过 VPC 网络源访问 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 对等互连或传输网关连接的不同账户中的 VPC。

多 VPC 访问有两种方法,具体取决于您是要使用基于策略的控制还是 VPC 源网络强制执行。

选项 1:互联网起源,每个 VPC 中都有一个网关终端节点

每个 VPC 都有自己的 Amazon S3 网关终端节点。每个 VPC 中的调用者通过其本地网关终端节点访问接入点,该终端节点会aws:SourceVpc根据请求填充。接入点策略限制对允许的 VPC ID 的访问。

Multi-VPC 使用互联网网络起源和网关端点进行访问
  • 网络来源:互联网

  • VPC 终端节点:每个 VPC 中的 Amazon S3 网关终端节点(免费,无需额外配置)

  • 接入点策略:允许aws:SourceVpc列出所有 VPC ID,再加上拒绝 StringNotEquals

注意

在接入点策略中,“允许” 和 “拒绝” 语句都是必需的。如果没有 Deny 语句,则可能无法对所有调用者执行 VPC 限制。

此选项更易于设置,因为每个 VPC 都独立运行——不需要 VPC 对等互连或传输网关。要添加或删除 VPC,请更新接入点策略。

选项 2:带有集中式接口终端节点的 VPC 源

Multi-VPC 使用 VPC 源和集中式接口终端节点进行访问

一个 VPC 托管一个 Amazon S3 接口终端节点,接入点是使用绑定到该 VPC 的 VPC 源创建的。其他 VPC 通过 VPC 对等互连或传输网关将其亚马逊 S3 流量路由到接口终端节点。由于所有请求都通过绑定 VPC 中的终端节点到达,因此它们满足 VPC 源强制执行。

  • 网络来源:VPC(绑定到托管接口终端节点的 VPC)

  • VPC 终端节点:绑定 VPC 中的亚马逊 S3 接口终端节点

  • 连接:其他 VPC 与绑定 VPC 之间的 VPC 对等或传输网关

  • 接入点策略:最低限度 — VPC 源执法负责处理网络限制

  • 呼叫方配置:其他 VPC 中的呼叫者必须使用--endpoint-url或 DNS 配置通过接口端点路由请求

此选项提供了更强的执行力,因为无法通过更改政策来避开 VPC 源限制。但是,它需要 VPC 对等互连或传输网关连接,并且接口终端节点按小时和每 GB 收费。有关接口终端节点的更多信息,AWS PrivateLink请参阅《亚马逊简单存储服务用户指南中的 Amazon S3。

对网络访问问题进行故障排除

当 Amazon S3 接入点请求失败时,错误消息通常不表明哪个授权层拒绝了该请求。使用以下指导来诊断常见问题。

AccessDenied 使用 “在基于资源的策略中明确拒绝”

此错误可能来自多个来源。按顺序完成以下检查:

1。检查 VPC 源站拒绝(仅限VPC-origin 接入点)

如果接入点有 VPC 网络来源,它实际上会拒绝与绑定 VPC aws:SourceVpc 不匹配的请求。验证:

  • 绑定的 VPC 中存在 VPC 终端节点(网关或接口)。

  • 呼叫者的流量正在通过该端点路由。对于 VPC 内调用者,请验证网关终端节点的路由表是否与呼叫者的子网相关联。对于本地呼叫者,请确认他们使用的是接口终端节点(网关端点不路由 VPN 或直接连接流量)。

  • 调用方位于绑定的 VPC 中,而不是对等 VPC 中。除非通过绑定 VPC 中的接口终端节点路由,否则来自对等 VPC 的请求将被拒绝。

2。检查 VPC 终端节点政策

如果请求遍历 VPC 终端节点,则该终端节点的策略必须允许对接入点资源执行操作。默认终端节点策略允许对所有资源执行所有操作。如果您已确定策略的范围,请验证其是否包含接入点 ARN。

3. 检查接入点政策

验证接入点策略是否允许请求主体。检查条件可能与请求相匹配的 Deny 语句。

4。查看来电者的 IAM 身份政策

调用者的 IAM 角色或用户必须有权在接入点 ARN 上执行 Amazon S3 操作。

5。检查服务控制策略 (SCP)

如果该账户是 AWS 组织的一部分,请确认没有 SCP 拒绝在接入点上执行 Amazon S3 操作。

On-premises 呼叫者收到 AccessDenied 但是 VPC 内呼叫者成功了

这通常意味着本地流量不通过 VPC 终端节点路由:

  • 网关终端节点不路由本地流量。从 VPN、专线或公交网关连接进入 VPC 的流量不受网关终端节点路由的影响。为本地调用者创建 Amazon S3 接口终端节点。

  • 验证接口终端节点的安全组允许来自本地 CIDR 的入站 HTTPS(端口 443)。

  • 验证本地 DNS 是否将 Amazon S3 终端节点解析为接口终端节点的私有 IP 或调用者使用的私有 IP。--endpoint-url

接入点策略条件似乎没有影响

  • Allow-only 策略不限制访问。如果您仅在 Allow 语句中使用条件(例如aws:SourceVpc),而没有相应的 Deny,则调用方的 IAM 身份策略可以独立授予访问权限。添加具有反向条件的显式 Deny 语句。

  • 区分大小写。条件键区分aws:VpcSourceIp大小写。

  • 互斥的条件密钥。aws:SourceIp并且aws:VpcSourceIp是相互排斥的。aws:SourceIp当请求遍历 VPC 终端节点时不可用,请改用aws:VpcSourceIp。相反,aws:VpcSourceIp不适用于互联网请求——使用aws:SourceIp。这适用于使用这些条件密钥的所有策略,包括接入点策略、VPC 终端节点策略和 IAM 身份策略。