封鎖對 Amazon S3 儲存體的公開存取權 - Amazon Simple Storage Service

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

封鎖對 Amazon S3 儲存體的公開存取權

Amazon S3 封鎖公開存取功能可提供存取點、儲存貯體和帳戶的設定,以協助您管理對 Amazon S3 資源的公開存取。依預設,新的儲存貯體、存取點和物件不允許公開存取。不過,使用者可以修改儲存貯體政策、存取點政策或物件許可,以允許公開存取。S3 封鎖公開存取設定能覆寫這些政策和許可的設定,讓您可以限制這些資源的公開存取。

使用 S3 封鎖公開存取,帳戶管理員和儲存貯體擁有者即可輕鬆設定集中式控制項來限制 Amazon S3 的公開存取權限,無論資源的建立方式為何都會強制執行。

如需設定公有區塊存取的指示,請參閱 設定封鎖公開存取

Amazon S3 在收到請求存取儲存貯體或物件時,將會判斷儲存貯體或儲存貯體擁有者的帳戶是否套用封鎖公開存取設定。如果請求是透過存取點提出,Amazon S3 也會檢查存取點的封鎖公開存取設定。若有禁止所請求存取的現有封鎖公開存取設定,Amazon S3 便會拒絕該請求。

Amazon S3 封鎖公開存取提供四個設定。這些是獨立的設定,且可以任意組合使用。每個設定都可套用至一個存取點、一個儲存貯體或整個 AWS 帳戶。如果存取點、儲存貯體或帳戶的封鎖公開存取設定不同,則 Amazon S3 會套用存取點、儲存貯體和帳戶設定的最嚴格組合。

Amazon S3 在評估封鎖公開存取設定是否禁止操作時,將會拒絕任何違反存取點、儲存貯體或帳戶設定的請求。

重要

透過存取控制清單 (ACLs)、存取點政策、儲存貯體政策或全部,將公有存取權授予儲存貯體和物件。為協助確保封鎖所有 Amazon S3 存取點、儲存貯體和物件的公開存取,我們建議為帳戶開啟封鎖公開存取的所有四項設定。這些設定會封鎖所有現有和未來儲存貯體和存取點的公開存取。

套用這些設定前,請確認應用程式無須公用存取權限也可正常運作。如果儲存貯體或物件需要特定層級的公開存取權限 (例如使用 Amazon S3 託管靜態網站中所述的託管靜態網站),則您可根據特定儲存使用案例自訂以下各設定。

啟用封鎖公開存取有助於保護您的資源,防止透過直接連接到 S3 資源的資源政策或存取控制清單 (ACLs) 授予公開存取。除了啟用封鎖公開存取之外,請仔細檢查下列政策,以確認其未授予公開存取:

  • 連接至相關聯 AWS 主體的身分型政策 (例如IAM角色)

  • 連接至相關 AWS 資源的資源型政策 (例如 AWS Key Management Service (KMS) 金鑰)

注意
  • 您只能針對存取點、儲存貯體和 AWS 帳戶啟用封鎖公開存取設定。Amazon S3 不支援個別物件的封鎖公開存取設定。

  • 當您將封鎖公開存取設定套用至帳戶時,這些設定會套用至 AWS 區域 全球所有 。設定可能不會在區域內立即或同時生效,但它們最後會散佈到所有區域。

封鎖公開存取設定

S3 封鎖公開存取提供四種設定。您可以任意組合使用這些設定,並套用到個別存取點、儲存貯體或整個 AWS 帳戶。若您將設定套用到帳戶,它會套用到該帳戶擁有的所有儲存貯體和存取點。同樣地,如果您將設定套用至儲存貯體,它會套用至與該儲存貯體相關聯的所有存取點。

下表包含可用的設定。

名稱 描述
BlockPublicAcls

將此選項設為 TRUE 會導致以下行為:

  • PUT 如果指定的存取控制清單 (ACL) 為公有,則儲存貯體 acl 和PUT物件 acl 呼叫會失敗。

  • PUT 如果請求包含公有 ,則物件呼叫會失敗ACL。

  • 如果此設定套用至帳戶,則如果請求包含公有 ,PUT則儲存貯體呼叫會失敗ACL。

當此設定設為 時TRUE,指定的操作會失敗 (無論是透過 REST API AWS CLI、 或 AWS 進行SDKs)。不過,儲存貯體和物件ACLs的現有政策 和 不會修改。此設定可讓您防止公開存取,同時可讓您稽核、精簡或以其他方式變更現有政策和ACLs儲存貯體和物件。

注意

存取點沒有與其ACLs建立關聯。如果您將此設定套用至某個存取點,它會作為通往基礎儲存貯體的通道。如果存取點已啟用此設定,則透過存取點提出的請求,其行為就如同基礎儲存貯體已啟用此設定,無論儲存貯體是否已實際啟用此設定。

IgnorePublicAcls

將此選項設定為 ,TRUE會導致 Amazon S3 忽略儲存貯體ACLs上的所有公有物件及其包含的任何物件。此設定可讓您安全地封鎖 授予的公有存取,ACLs同時仍然允許包含公有 的PUT物件呼叫 ACL(而不是 BlockPublicAcls,其拒絕包含公有 的PUT物件呼叫ACL)。啟用此設定不會影響任何現有 的持久性ACLs,也不會阻止ACLs設定新的公有 。

注意

存取點沒有與其ACLs建立關聯。如果您將此設定套用至某個存取點,它會作為通往基礎儲存貯體的通道。如果存取點已啟用此設定,則透過存取點提出的請求,其行為就如同基礎儲存貯體已啟用此設定,無論儲存貯體是否已實際啟用此設定。

BlockPublicPolicy

如果指定的儲存貯體政策允許公有存取,則將此選項設定為TRUE儲存PUT貯體會導致 Amazon S3 拒絕對儲存貯體政策的呼叫。如果指定的政策允許公PUT有存取,則將此選項設定為 TRUE 儲存貯體的 也會導致 Amazon S3 拒絕所有儲存貯體相同帳戶存取點的存取點政策呼叫。

如果指定的政策 (適用於存取點或基礎儲存貯體) 允許公開存取,則將此選項設定為 TRUE 可讓 Amazon S3 拒絕透過存取點進行的PUT存取點政策和PUT儲存貯體政策呼叫。

您可以使用此設定,允許使用者管理存取點和儲存貯體政策,而無須讓他們公開共享儲存貯體或其包含的物件。啟用此設定不會影響現有的存取點或儲存貯體政策。

重要

若要有效使用此設定,建議您在帳戶層級套用它。儲存貯體政策可讓使用者改變儲存貯體的封鎖公開存取設定。因此,具有變更儲存貯體政策許可的使用者可插入政策,允許他們停用儲存貯體的封鎖公開存取設定。若為整個帳戶啟用此設定,而非僅針對特定儲存貯體,則即使使用者改變儲存貯體政策來停用此設定,Amazon S3 仍會封鎖公有政策。

RestrictPublicBuckets

設定此選項以TRUE限制存取具有公有政策的存取點或儲存貯體,僅限於 AWS 服務儲存貯體擁有者的帳戶和存取點擁有者帳戶中的主體和授權使用者。此設定會封鎖對存取點或儲存貯體 ( AWS 服務主體除外) 的所有跨帳戶存取,同時仍允許帳戶中的使用者管理存取點或儲存貯體。

啟用此設定不會影響現有的存取點或儲存貯體政策,但 Amazon S3 會封鎖從任何公用存取點或儲存貯體政策衍生的公用及跨帳戶存取,包括對特定帳戶的非公用委派。

重要
  • 對GET儲存貯體 acl 和GET物件 acl 的呼叫一律會傳回指定儲存貯體或物件的有效許可。例如,假設儲存貯體具有授予公有存取權ACL的 ,但儲存貯體也已啟用 IgnorePublicAcls設定。在此情況下,GET儲存貯體 acl 會傳回 ACL,反映 Amazon S3 強制執行的存取許可,而不是與儲存貯體ACL相關聯的實際存取許可。

  • 封鎖公開存取設定不會變更現有的政策或 ACLs。因此,移除區塊公有存取設定會導致具有公有政策的儲存貯體或物件,或ACL再次公開存取。

在存取點執行封鎖公開存取操作

若要在存取點上執行封鎖公有存取操作,請使用 AWS CLI 服務 s3control

重要

請注意,建立存取點之後,目前無法變更存取點的封鎖公開存取設定。因此,為存取點指定封鎖公開存取設定的唯一方法是在建立存取點時併入這些設定。

「公有」的意義

ACLs

如果 Amazon S3 將任何許可授予預先定義或AuthenticatedUsers群組的成員,則會將儲存貯體AllUsers或物件視為ACL公有。如需預先定義群組的詳細資訊,請參閱 Amazon S3 預先定義的群組

儲存貯體政策

評估儲存貯體政策時,Amazon S3 首先假設政策為公用。然後,評估政策來判斷其是否符合非公有的資格。若要被視為是非公有,儲存貯體政策必須僅將存取授予以下一或多個項目的固定值 (不包含萬用字元或 AWS Identity and Access Management 政策變數 的值):

  • AWS 主體、使用者、角色或服務主體 (例如 aws:PrincipalOrgID

  • 一組無類別網域間路由 (CIDRs),使用 aws:SourceIp。如需 的詳細資訊CIDR,請參閱RFC編輯器網站上的 RFC 4632

    注意

    根據具有非常廣泛 IP 範圍 (例如,0.0.0.0/1) 的 aws:SourceIp 條件金鑰授予存取權的儲存貯體政策會評估為「公有」。這包括 /8 和 /32 IPv6(不包括RFC1918私有範圍) IPv4 範圍以外的值。封鎖公開存取會拒絕這些「公有」政策,並防止跨帳戶存取已使用這些「公有」政策的儲存貯體。

  • aws:SourceArn

  • aws:SourceVpc

  • aws:SourceVpce

  • aws:SourceOwner

  • aws:SourceAccount

  • aws:userid,位於 "AROLEID:*" 模式之外

  • s3:DataAccessPointArn

    注意

    在儲存貯體政策中使用時,只要帳戶 ID 為固定,此值就可以包含存取點名稱的萬用字元,而不會將該政策轉譯為公開。例如,允許存取 arn:aws:s3:us-west-2:123456789012:accesspoint/* 將允許存取與區域 123456789012 中帳戶 us-west-2 相關聯的任何存取點,而不會將儲存貯體政策轉譯為公開。請注意,存取點政策的此項行為是不同的。如需詳細資訊,請參閱存取點

  • s3:DataAccessPointAccount

如需儲存貯體政策的詳細資訊,請參閱「Amazon S3 的儲存貯體政策」。

範例 :公有儲存貯體政策

在這些規則之下,下列範例政策會被視為公用。

{ "Principal": "*", "Resource": "*", "Action": "s3:PutObject", "Effect": "Allow" }
{ "Principal": "*", "Resource": "*", "Action": "s3:PutObject", "Effect": "Allow", "Condition": { "StringLike": {"aws:SourceVpc": "vpc-*"}} }

您可以透過使用固定值來包含任何先前列出的條件索引鍵,使這些政策成為非公有。例如,您可以透過將 aws:SourceVpc 設為固定值來使上述最後一個政策成為非公用,如下所示。

{ "Principal": "*", "Resource": "*", "Action": "s3:PutObject", "Effect": "Allow", "Condition": {"StringEquals": {"aws:SourceVpc": "vpc-91237329"}} }

Amazon S3 如何評估同時包含公開及非公開存取授權的政策。

此範例示範 Amazon S3 如何評估同時包含公開及非公開存取授權的政策。

假設儲存貯體具有政策,會將存取授予一組固定的委託人。在先前說明的規則之下,此政策便不是公有。因此,若您啟用 RestrictPublicBuckets 設定,政策仍會以已寫入的狀態繼續生效,因為 RestrictPublicBuckets 只會套用到具有公有政策的儲存貯體。不過,如果您將公有陳述式新增至政策,則 RestrictPublicBuckets 會在儲存貯體上生效。它僅允許 AWS 服務主體和儲存貯體擁有者帳戶的授權使用者存取儲存貯體。

例如,假設 "Account-1" 擁有的儲存貯體具有一個政策,該政策包含以下內容:

  1. 授予 AWS CloudTrail (即 AWS 服務主體) 存取權的陳述式

  2. 將存取授予 "Account-2" 帳戶的陳述式

  3. 公開授予存取的陳述式 (例如透過使用無限制的 Condition 來指定 "Principal": "*")

此政策因為第三個陳述式,所以符合公有的資格。設定並RestrictPublicBuckets啟用此政策後,Amazon S3 僅允許 存取 CloudTrail。即使第 2 個陳述式並非公有,Amazon S3 也會停用 "Account-2" 的存取。這次因為第 3 個陳述式會使整個政策都成為公有狀態,因此會套用 RestrictPublicBuckets。因此,即使政策將存取委派給指定的帳戶 "Account-2",Amazon S3 還是會停用跨帳戶存取。但是,若您將第 3 個陳述式從政策中移除,則政策便不符合公有的資格,不再套用 RestrictPublicBuckets。因此,"Account-2" 會重新取得儲存貯體的存取,即使您將 RestrictPublicBuckets 維持在啟用狀態。

存取點

相較於儲存貯體,Amazon S3 評估存取點的封鎖公開存取設定時,方式略有不同。Amazon S3 套用以判斷存取點政策為公開的規則,在儲存貯體與存取點間通常是相同的,但下列情況除外:

  • 無論存取點政策的內容為何,具有VPC網路來源的存取點一律會被視為非公開。

  • 使用 s3:DataAccessPointArn 授予存取給一組存取點的存取點政策會被視為公開。請注意,儲存貯體政策的此行為是不同的。例如,授予存取給符合 s3:DataAccessPointArnarn:aws:s3:us-west-2:123456789012:accesspoint/* 的儲存貯體政策不會被視為公開。不過,存取點政策中的相同陳述式會將該存取點轉譯成公開。

使用 IAM Access Analyzer for S3 來檢閱公有儲存貯體

您可以使用 IAM Access Analyzer for S3 來檢閱儲存貯體ACLs,以及授予公有存取權的儲存貯體、儲存貯體政策或存取點政策。IAM Access Analyzer for S3 會提醒您儲存貯體,這些儲存貯體設定為允許存取網際網路或其他 上的任何人 AWS 帳戶,包括組織 AWS 帳戶 外部的任何人。針對每個公開或共用儲存貯體,您會收到報告公開或共用存取來源和層級的發現項目。

在 IAM Access Analyzer for S3 中,只要按一下,即可封鎖對儲存貯體的所有公開存取。您還可以深入檢視儲存貯體的層級許可設定,以設定精細的存取層級。對於需要公開或共用存取的特定和經驗證使用案例,您可以將對儲存貯體的發現項目存檔,以確認並記錄您要讓儲存貯體保持公開或共用。

在極少數情況下,適用於 S3 的 IAM Access Analyzer 可能沒有報告 Amazon S3 封鎖公有存取評估報告為公有之儲存貯體的調查結果。這是因為對於目前動作及日後可能新增的任何潛在動作,Amazon S3 封鎖公開存取會檢閱相關政策,導致儲存貯體變成公開。另一方面,IAMAccess Analyzer for S3 只會在評估存取狀態時,分析為 Amazon S3 服務指定的目前動作。

如需 IAM Access Analyzer for S3 的詳細資訊,請參閱 使用 IAM Access Analyzer for S3 檢閱儲存貯體存取

許可

若要使用 Amazon S3 封鎖公開存取功能,您必須具備下列許可。

操作 所需的許可
GET 儲存貯體政策狀態 s3:GetBucketPolicyStatus
GET 儲存貯體區塊公有存取設定 s3:GetBucketPublicAccessBlock
PUT 儲存貯體區塊公有存取設定 s3:PutBucketPublicAccessBlock
DELETE 儲存貯體區塊公有存取設定 s3:PutBucketPublicAccessBlock
GET 帳戶封鎖公開存取設定 s3:GetAccountPublicAccessBlock
PUT 帳戶封鎖公開存取設定 s3:PutAccountPublicAccessBlock
DELETE 帳戶封鎖公開存取設定 s3:PutAccountPublicAccessBlock
PUT 存取點封鎖公開存取設定 s3:CreateAccessPoint
注意

DELETE 操作需要與PUT操作相同的許可。DELETE 操作沒有單獨的許可。

設定封鎖公開存取

如需為 AWS 帳戶、Amazon S3 儲存貯體和存取點設定區塊公開存取的詳細資訊,請參閱下列主題: