適用於 Amazon S3 的閘道端點 - Amazon Virtual Private Cloud

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

適用於 Amazon S3 的閘道端點

您可以使用閘道 VPC 端點從 VPC 中存取 Amazon S3。建立閘道端點後,您可以將其新增為路由表中的目標,用於從 VPC 到 Amazon S3 的流量。

使用閘道端點不需額外付費。

Amazon S3 支援閘道端點和界面端點。您可以使用閘道端點從您的 VPC 存取 Amazon S3,而無需為 VPC 使用網際網路閘道或 NAT 裝置,並無需支付額外費用。但是,閘道端點不允許從內部部署網路、其他 AWS 區域的對等 VPC,或透過傳輸閘道進行存取。這些情況下,您必須利用介面端點 (需額外付費)。如需詳細資訊,請參閱《Amazon S3 使用者指南》中的適用於 Amazon S3 的 VPC 端點類型

考量事項

  • 閘道端點只能在您建立該端點的區域中使用。請務必在與 S3 儲存貯體相同的區域中建立閘道端點。

  • 如果您使用的是 Amazon DNS 伺服器,則必須同時啟用 VPC 的 DNS 主機名稱和 DNS 解析。如果您使用自己的 DNS 伺服器,請確保對 Amazon S3 提出的請求可正確解析為 AWS 所維護的 IP 地址。

  • 對於透過閘道端點存取 Amazon S3 的執行個體,安全群組的規則必須允許進出 Amazon S3 的流量。您可以在安全群組規則中參照 Amazon S3 的字首清單 ID。

  • 對於透過閘道端點存取 Amazon S3 的執行個體,子網路的網路 ACL 必須允許進出 Amazon S3 的流量。您無法在網路 ACL 規則中參照字首清單,但可以從 Amazon S3 的字首清單中取得 Amazon S3 的 IP 地址範圍。

  • 檢查您是否正在使用需要存取 S3 儲存貯體的 AWS 服務。例如,服務可能需要存取含有日誌檔案的儲存貯體,或者可能會要求您將驅動程式或代理程式下載到 EC2 執行個體。如果是這樣,請確保您的端點策略允許 AWS 服務 或資源使用 s3:GetObject 動作存取這些儲存貯體。

  • 您不能針對周遊 VPC 端點的 Amazon S3 請求,在身分政策或儲存貯體政策中使用 aws:SourceIp 條件。請改用 aws:VpcSourceIp 條件。或者,您也可以使用路由表,控制哪些 EC2 執行個體可透過 VPC 端點存取 Amazon S3。

  • 閘道端點僅支援 IPv4 流量。

  • Amazon S3 所接收之受影響子網路中執行個體的來源 IPv4 地址,會從公有 IPv4 地址變更為 VPC 中的私有 IPv4 地址。端點會切換網路路由,以及中斷連線開啟的 TCP 連線。使用公有 IPv4 地址的先前連線不會繼續。建議您在建立或修改端點時不要執行重要任務,或者建議您進行測試,確保軟體在斷線之後可以自動重新連線至 Amazon S3。

  • 端點連線不能延伸出 VPC。VPC 中 VPN 連線、VPC 對等互連、轉換閘道或 AWS Direct Connect 連線另一側的資源無法使用閘道端點與 Amazon S3 通訊。

  • 您的帳戶對於每個區域的預設配額為 20 個閘道端點,此配額可進行調整。每個 VPC 也有 255 個閘道端點的限制。

私有 DNS

為 Amazon S3 建立閘道端點和介面端點後,可以設定私有 DNS 以最佳化成本。

Route 53 Resolver

Amazon 會為您的 VPC 提供 DNS 伺服器,名為 Route 53 Resolver。Route 53 Resolver 會自動解析本機 VPC 網域名稱和私有託管區域中的記錄。但是,您無法從 VPC 外部使用 Route 53 Resolver。Route 53 會提供 Resolver 端點和 Resolver 規則,讓您可以從 VPC 外部使用 Route 53 Resolver。傳入 Resolver 端點會將 DNS 查詢從內部部署網路轉送至 Route 53 Resolver。傳出 Resolver 端點會將 DNS 查詢從 Route 53 Resolver 轉送至內部部署網路。

當您將 Amazon S3 的介面端點設定為僅針對傳入 Resolver 端點使用私有 DNS 後,我們會建立傳入 Resolver 端點。傳入 Resolver 端點會將從內部部署向 Amazon S3 發出的 DNS 查詢解析為介面端點的私有 IP 地址。我們也會將 Route 53 Resolver 的 ALIAS 記錄新增至 Amazon S3 的公有託管區域,以便來自 VPC 的 DNS 查詢解析為 Amazon S3 公有 IP 地址,並將流量路由到閘道端點。

私有 DNS

如果您為 Amazon S3 的介面端點設定私有 DNS,但並未僅針對傳入 Resolver 端點設定私有 DNS,則來自內部部署網路和 VPC 的請求都會使用介面端點存取 Amazon S3。因此,來自 VPC 的流量都會使用介面端點,您需要為此付費;如果流量使用閘道端點,則您無需額外付費。


          概念圖,顯示當您具有兩種端點類型時,Amazon S3 請求的預設路由方式。
僅適用於傳入 Resolver 端點的私有 DNS

如果您僅針對傳入 Resolver 端點設定私有 DNS,則來自內部部署網路的請求會使用介面端點存取 Amazon S3,而來自 VPC 的請求會使用閘道端點存取 Amazon S3。因此,您可以最佳化成本,因為只有在無法使用閘道端點的流量使用介面端點時,您才需要付費。


          概念圖,顯示當您同時具有兩種端點類型,並使用傳入 Resolver 端點設定私有 DNS 時,Amazon S3 請求的路由方式。
設定私有 DNS

您可以在建立 Amazon S3 的介面端點之時或之後為其設定私有 DNS。如需詳細資訊,請參閱 建立 VPC 端點 (建立期間設定) 或 啟用私有 DNS 名稱 (建立後設定)。

建立閘道端點

使用下列程序建立連線至 Amazon S3 的閘道端點。

使用主控台建立閘道端點
  1. https://console.aws.amazon.com/vpc/ 開啟 Amazon VPC 主控台。

  2. 在導覽窗格中選擇 Endpoints (端點)

  3. 選擇 Create endpoint (建立端點)。

  4. 對於 Service category (服務類別),選擇 AWS 服務

  5. 針對 Services (服務),新增篩選條件 Type: Gateway (類型:閘道),然後選取 com.amazonaws.region.s3

  6. 針對 VPC,選取要在其中建立端點的 VPC。

  7. 針對 Route tables (路由表),選取要供端點使用的路由表。我們會自動新增路由,將以服務為目標的流量指向端點網路介面。

  8. 對於 Policy (政策),選取 Full access (完整存取),以允許 VPC 端點上所有資源的所有主體進行所有操作。否則,選取 Custom (自訂),連接 VPC 端點政策,該政策控制主體必須在 VPC 端點上對資源執行操作的權限。

  9. (選用) 若要新增標籤,請選擇 Add new tag (新增標籤),然後輸入標籤的鍵和值。

  10. 選擇 Create endpoint (建立端點)。

若要使用命令列建立閘道端點

使用儲存貯體政策控制存取

您可以使用儲存貯體政策,控制從特定端點、VPC、IP 地址範圍以及 AWS 帳戶 對儲存貯體的存取。這些範例假定還有政策聲明允許您的使用案例所需的存取權限。

範例:限制特定端點的存取

您可以使用 aws:sourceVpce 條件金鑰,建立儲存貯體政策來限制對特定端點的存取。除非使用指定的閘道端點,否則以下政策會拒絕使用指定動作存取指定的儲存貯體。請注意,此政策會封鎖透過 AWS Management Console 使用指定動作來存取指定的儲存貯體。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow-access-to-specific-VPCE", "Effect": "Deny", "Principal": "*", "Action": ["s3:PutObject", "s3:GetObject", "s3:DeleteObject"], "Resource": ["arn:aws:s3:::bucket_name", "arn:aws:s3:::bucket_name/*"], "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1a2b3c4d" } } } ] }
範例:限制特定 VPC 的存取

您可以使用 aws:sourceVpc 條件金鑰,建立儲存貯體政策來限制對特定 VPC 的存取。如果您在相同的 VPC 中設定多個端點,這將十分有用。除非請求是來自指定的 VPC,否則以下政策會拒絕使用指定動作存取指定的儲存貯體。請注意,此政策會封鎖透過 AWS Management Console 使用指定動作來存取指定的儲存貯體。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow-access-to-specific-VPC", "Effect": "Deny", "Principal": "*", "Action": ["s3:PutObject", "s3:GetObject", "s3:DeleteObject"], "Resource": ["arn:aws:s3:::example_bucket", "arn:aws:s3:::example_bucket/*"], "Condition": { "StringNotEquals": { "aws:sourceVpc": "vpc-111bbb22" } } } ] }
範例:限制對特定 IP 地址範圍的存取

您可以使用 aws:VpcSourceIp 條件金鑰,建立政策來限制對特定 IP 地址範圍的存取。除非請求是來自指定的 IP 地址,否則以下政策會拒絕使用指定動作存取指定的儲存貯體。請注意,此政策會封鎖透過 AWS Management Console 使用指定動作來存取指定的儲存貯體。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow-access-to-specific-VPC-CIDR", "Effect": "Deny", "Principal": "*", "Action": ["s3:PutObject", "s3:GetObject", "s3:DeleteObject"], "Resource": ["arn:aws:s3:::bucket_name", "arn:aws:s3:::bucket_name/*"], "Condition": { "NotIpAddress": { "aws:VpcSourceIp": "172.31.0.0/16" } } } ] }
範例:限制對特定 AWS 帳戶 中儲存貯體的存取

您可以使用 s3:ResourceAccount 條件金鑰,建立政策來限制對特定 AWS 帳戶 中 S3 儲存貯體的存取。除非指定的動作為 AWS 帳戶 所擁有,否則以下政策會拒絕使用指定動作存取 S3 儲存貯體。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow-access-to-bucket-in-specific-account", "Effect": "Deny", "Principal": "*", "Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"], "Resource": "arn:aws:s3:::*", "Condition": { "StringNotEquals": { "s3:ResourceAccount": "111122223333" } } } ] }

關聯路由表

您可變更與閘道端點關聯的路由表。當您關聯路由表時,我們會自動新增路由,將以服務為目標的流量指向端點網路介面。當您取消路由表的關聯時,我們會自動從路由表中移除端點路由。

若要使用主控台來關聯路由表
  1. https://console.aws.amazon.com/vpc/ 開啟 Amazon VPC 主控台。

  2. 在導覽窗格中選擇 Endpoints (端點)

  3. 選取閘道端點。

  4. 選擇 Actions (動作)Manage route tables (管理路由表)

  5. 視需要選取或取消選取路由表。

  6. 選擇 Modify route tables (修改路由表)。

若要使用命令列來關聯路由表

編輯 VPC 端點政策

您可以編輯閘道端點的端點政策,以控制從 VPC 中透過端點對 Amazon S3 的存取。預設政策允許完整存取。如需更多詳細資訊,請參閱 端點政策

若要使用主控台變更端點政策
  1. https://console.aws.amazon.com/vpc/ 開啟 Amazon VPC 主控台。

  2. 在導覽窗格中選擇 Endpoints (端點)

  3. 選取閘道端點。

  4. 選擇 Actions (動作)、Manage policy (管理政策)。

  5. 選擇 Full Access (完整存取) 以允許完整存取服務,或選擇 Custom (自訂) 並連接自訂政策。

  6. 選擇 Save (儲存)。

下列範例端點原則用於存取 Amazon S3。

範例:限制特定儲存貯體的存取

您可以建立政策,以限制只存取特定 S3 儲存貯體。如果您在 VPC 中具有使用 S3 儲存貯體的其他 AWS 服務,這會十分有用。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow-access-to-specific-bucket", "Effect": "Allow", "Principal": "*", "Action": [ "s3:ListBucket", "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::bucket_name", "arn:aws:s3:::bucket_name/*" ] } ] }
範例:限制特定 IAM 角色的存取

您可以建立政策,限制特定 IAM 角色的存取。您必須使用 aws:PrincipalArn 來授予對主體的存取權。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow-access-to-specific-IAM-role", "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": "*", "Condition": { "ArnEquals": { "aws:PrincipalArn": "arn:aws:iam::111122223333:role/role_name" } } } ] }
範例:限制對特定帳戶中使用者的存取

您可以建立政策,限制特定帳戶的存取。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow-callers-from-specific-account", "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": "*", "Condition": { "StringEquals": { "aws:PrincipalAccount": "111122223333" } } } ] }

刪除閘道端點

閘道端點結束使用後即可刪除。當您刪除閘道端點時,我們會從子網路由表中移除端點路由。

如果啟用私有 DNS,則無法刪除閘道端點。

若要使用主控台刪除閘道端點
  1. https://console.aws.amazon.com/vpc/ 開啟 Amazon VPC 主控台。

  2. 在導覽窗格中選擇 Endpoints (端點)

  3. 選取閘道端點。

  4. 選擇 Actions (動作)、Delete VPC endpoints (刪除 VPC 端點)。

  5. 出現確認提示時,請按一下 delete

  6. 選擇 Delete (刪除)。

若要使用命令列刪除閘道端點