封鎖對 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 Object acl 呼叫會失敗。

  • PUT如果要求包含 public,物件呼叫就會失敗ACL。

  • 如果此設定套用至帳戶,則PUT值區呼叫會在要求中包含公用時失敗ACL。

當此設定設定為時TRUE,指定的作業會失敗 (無論是透過RESTAPI、 AWS CLI,或 AWS SDKs). 不過,不會修改現有ACLs的政策以及值區和物件。此設定可讓您防止公開存取,同時允許您稽核、精簡或以其他方式變更現有原則以及ACLs值區和物件。

注意

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

IgnorePublicAcls

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

注意

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

BlockPublicPolicy

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

如果指定的政策 (TRUE針對存取點或基礎儲存PUT貯體) 允許公開PUT存取,則針對存取點將此選項設為會導致 Amazon S3 拒絕透過存取點發出的存取點政策和儲存貯體政策的呼叫。

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

重要

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

RestrictPublicBuckets

設定此選項可將存取TRUE點或值區的公用原則限制為僅存取 AWS 值區擁有者帳戶和存取點擁有者帳戶中的服務主體和授權使用者。此設定會封鎖存取點或儲存貯體的所有跨帳戶存取 (除了 AWS 服務主體),同時仍允許帳戶內的使用者管理存取點或值區。

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

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

  • 封鎖公用存取設定不會變更現有的原則或ACLs. 因此,移除封鎖公用存取設定會導致值區或物件具有公用政策或ACL再次可公開存取。

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

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

重要

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

「公有」的意義

ACLs

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

儲存貯體政策

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

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

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

    注意

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

  • 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/* 的儲存貯體政策不會被視為公開。不過,存取點政策中的相同陳述式會將該存取點轉譯成公開。

使用 S3 的IAM存取分析器來檢閱公用儲存貯體

您可以使用適用於 S3 的 IAM Access Analyzer 來檢閱儲存貯體ACLs、儲存貯體政策或授予公用存取權的存取點政策的儲存貯體。IAMS3 存取分析器會向您發出設定為允許存取網際網路或其他任何人的儲存貯體發出警示 AWS 帳戶,包括 AWS 帳戶 在您的組織之外。針對每個公開或共用儲存貯體,您會收到報告公開或共用存取來源和層級的發現項目。

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

在罕見事件中,S3 適用的IAM存取分析器可能不會報告 Amazon S3 將公開存取評估報告封鎖為公開的儲存貯體的發現。這是因為對於目前動作及日後可能新增的任何潛在動作,Amazon S3 封鎖公開存取會檢閱相關政策,導致儲存貯體變成公開。另一方面,適用於 S3 的IAM存取分析器只會分析針對 Amazon S3 服務在存取狀態評估中指定的目前動作。

如需 S3 IAM 存取分析器的詳細資訊,請參閱使用 S3 的存取分析器檢閱儲IAM存貯體存取

許可

若要使用 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 儲存貯體和存取點,請參閱下列主題: