AWS VPC 終端節點安全群組出口規則

AWS VPC 終端節點安全群組出口規則

我試圖利用 AWS VPC 端點來存取 S3 資源,但沒有成功。你能幫忙嗎?

細節:

我在安全性群組內有一個 EC2 執行個體。它位於 VPC 和子網路內,具有互聯網端點和 0.0.0.0/0 的路由表條目。但是,我不希望這個特定的 EC2 執行個體能夠與互聯網通信,但我確實希望它能夠與位於以下位置的 S3 儲存桶通信:https://s3-eu-west-1.amazonaws.com/XXXXX/YYYYYY.sh

作為回應,我超載了 securityGroup 上的預設允許出口規則,因此透過向連接埠 22 新增出口規則來拒絕出站連線。考慮到這一點,我在 VPC 中新增了一個 VPC 終端節點,並使用 pl-6da54004 (com.amazonaws.eu-west-1.s3) :: vpce-9f47a1f6 更新了我的路由表。

完成此操作後,我無法從 EC2 執行個體存取我的 S3 資源。我嘗試 wgethttps://s3-eu-west-1.amazonaws.com/XXXXX/YYYYYY.sh沒有運氣。

你知道出了什麼問題嗎?我的想法是:

  • 我的 ec2 實例似乎將 S3 域解析為 54.231.130.244,但這對於每個實例來說並不相同。我是否需要為 S3 IP 範圍新增 securityGroupEgress 規則或路由?如果有,範圍是多少?
  • 也許我應該透過解析為內部 IP 位址的不同網域名稱來存取我的 S3 資源?

謝謝你,托比

答案1

首先,介紹一些背景知識。 VPC 執行個體的 DNS 解析器是內建於基礎架構中的虛擬元件。它不受出站安全群組規則的影響...但當您為 VPC 預設 S3 終端節點時,S3 終端節點的主機名稱解析不會變更。

S3 的 VPC 端點可以做幾件不同的事情。了解這些東西是什麼是了解它是否能滿足您的需求的關鍵。 tl;dr:在這種情況下會的。

首先,您注意到它們在路由表中配置為“前綴列表”。 VPC 終端節點採用一組預先定義的IPv4 網路前綴,並為包含相應前綴列表的每個路由表劫持到這些前綴的路由,以便您到任何這些網路的流量都將穿過VPC 終端節點,而不是互聯網網關和任何網路。

本質上,這開闢了一條從您的 VPC 到 AWS 服務的 IP 位址範圍的新路徑...但這些 IP 位址最初將您帶到的位置與沒有 VPC 終端節點時它們將帶您到達的位置不同。

最先碰到的地方看起來就像S3但它與面向 Internet 的 S3 不同,因為它了解您的 VPC 終端節點的策略,以便您可以控制哪些儲存桶和操作可存取。這些政策不會凌駕於其他政策之上,反而會增強其他政策。

終端節點策略不會覆蓋或取代 IAM 使用者政策或 S3 儲存桶策略。它是一個單獨的策略,用於控制從端點到指定服務的存取。但是,所有類型的政策(IAM 使用者原則、終端節點原則、S3 原則和 Amazon S3 ACL 原則(如果有))都必須授予必要的權限才能成功存取 Amazon S3。

http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-endpoints.html#vpc-endpoints-access

請注意,如果您不使用適當的策略限制儲存桶訪問,而是啟用完全存取權限,則實例將能夠存取 S3 區域中的任何儲存桶(如果儲存桶的策略允許),包括公共儲存桶。

現在,棘手的部分。如果您的執行個體的安全群組因預設的「允許」規則已被刪除而不允許出站存取 S3,您可以使用特製的安全群組規則允許執行個體透過 VPC 終端節點存取 S3:

向安全群組新增新的出站規則。對於“類型”,選擇 HTTPS。對於目的地,選擇“自訂 IP”。

該文檔與我在控制台中看到的不一致:

目標清單顯示可用 AWS 服務的前綴清單 ID 和名稱。

http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-endpoints.html#vpc-endpoints-security

嗯...不,事實並非如此。至少對我來說不是,在撰寫本文時不是。

解決方案是選擇“自訂 IP”,然後在pl-xxxxxxxxIP 位址框中以 的形式鍵入您的 VPC 終端節點的前綴清單 ID,而不是 IP 位址區塊或安全群組 ID。您可以透過查看與 VPC 終端節點關聯的子網路之一中的目標,在 VPC 控制台中找到此資訊。

相關內容