封鎖對 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 在評估封鎖公開存取設定是否禁止操作時,將會拒絕任何違反存取點、儲存貯體或帳戶設定的請求。

警告

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

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

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

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

封鎖公開存取設定

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

下表包含可用的設定。

名稱 描述
BlockPublicAcls

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

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

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

  • 若此設定套用到帳戶,則當請求包含公有 ACL 時,PUT 儲存貯體呼叫便會失敗。

當此設定設定為時TRUE,指定的作業會失敗 (無論是透過 REST API 或 AWS SDK 進行)。 AWS CLI但是,儲存貯體和物件現有的政策和 ACL 則不會修改。此設定可讓您防止公開存取,同時允許您稽核、縮小搜尋範圍,或是改變您儲存貯體和物件的現有政策和 ACL。

注意

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

IgnorePublicAcls

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

注意

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

BlockPublicPolicy

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

如果指定的政策 (存取點或基礎儲存貯體) 允許公開存取,則針對存取點將此選項設為 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。

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

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

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

重要

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

「公有」的意義

ACL

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

儲存貯體政策

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

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

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

    注意

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

  • aws:SourceArn

  • aws:SourceVpc

  • aws:SourceVpce

  • aws:SourceOwner

  • aws:SourceAccount

  • s3:x-amz-server-side-encryption-aws-kms-key-id

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

  • s3:DataAccessPointArn

    注意

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

  • s3:DataAccessPointAccount

如需儲存貯體政策的詳細資訊,請參閱「儲存貯體政策與使用者政策」。

範例 :公有儲存貯體政策

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

{ "Principal": { "Federated": "graph.facebook.com" }, "Resource": "*", "Action": "s3:PutObject", "Effect": "Allow" }
{ "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,檢閱以儲存貯體 ACL、儲存貯體政策或存取點政策授予公開存取的儲存貯體。適用於 S3 的 IAM Access Analyzer 會向您發出設定為允許存取網際網路或其他 AWS 帳戶任何人 (包括組織 AWS 帳戶 外部) 的儲存貯體提醒您。針對每個公開或共用儲存貯體,您會收到報告公開或共用存取來源和層級的發現項目。

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

在極少數情況下,對於 Amazon S3 封鎖公開存取評估回報為公開的儲存貯體,IAM Access Analyzer for S3 可能回報沒有問題。這是因為對於目前動作及日後可能新增的任何潛在動作,Amazon S3 封鎖公開存取會檢閱相關政策,導致儲存貯體變成公開。另一方面,IAM Access 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 儲存貯體設定區塊公開存取的詳細資訊,請參閱下列主題。