本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
封鎖對 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 |
將此選項設為
當此設定設定為時 注意存取點沒有與其ACLs相關聯。如果您將此設定套用至某個存取點,它會作為通往基礎儲存貯體的通道。如果存取點已啟用此設定,則透過存取點提出的請求,其行為就如同基礎儲存貯體已啟用此設定,無論儲存貯體是否已實際啟用此設定。 |
IgnorePublicAcls |
設定此選項以 注意存取點沒有與其ACLs相關聯。如果您將此設定套用至某個存取點,它會作為通往基礎儲存貯體的通道。如果存取點已啟用此設定,則透過存取點提出的請求,其行為就如同基礎儲存貯體已啟用此設定,無論儲存貯體是否已實際啟用此設定。 |
BlockPublicPolicy |
如果指定儲存貯體政策允許公開存取,則將此選項設定 如果指定的政策 ( 您可以使用此設定,允許使用者管理存取點和儲存貯體政策,而無須讓他們公開共享儲存貯體或其包含的物件。啟用此設定不會影響現有的存取點或儲存貯體政策。 重要若要有效使用此設定,建議您在帳戶層級套用它。儲存貯體政策可讓使用者改變儲存貯體的封鎖公開存取設定。因此,具有變更儲存貯體政策許可的使用者可插入政策,允許他們停用儲存貯體的封鎖公開存取設定。若為整個帳戶啟用此設定,而非僅針對特定儲存貯體,則即使使用者改變儲存貯體政策來停用此設定,Amazon S3 仍會封鎖公有政策。 |
RestrictPublicBuckets |
設定此選項可 啟用此設定不會影響現有的存取點或儲存貯體政策,但 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 會將儲存貯AuthenticatedUsers
體AllUsers
或物件視為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" 擁有的儲存貯體具有一個政策,該政策包含以下內容:
-
授與存取權的陳述式 AWS CloudTrail (這是 AWS 服務主體)
-
將存取授予 "Account-2" 帳戶的陳述式
-
公開授予存取的陳述式 (例如透過使用無限制的
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:DataAccessPointArn
的arn:aws:s3:us-west-2:123456789012:accesspoint/*
的儲存貯體政策不會被視為公開。不過,存取點政策中的相同陳述式會將該存取點轉譯成公開。
使用 S3 的IAM存取分析器來檢閱公用儲存貯體
您可以使用適用於 S3 的 IAM Access Analyzer 來檢閱儲存貯體ACLs、儲存貯體政策或授予公用存取權的存取點政策的儲存貯體。IAM適用於 S3 的 Access Analyzer 會向您發出設定為允許存取網際網路或其他 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 儲存貯體和存取點設定區塊公開存取的詳細資訊,請參閱下列主題: