本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
封鎖對 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 託管靜態網站中所述的託管靜態網站),則您可根據特定儲存使用案例自訂以下各設定。
啟用封鎖公開存取以防止透過直接連接至 S3 資源的資源政策或存取控制清單 (ACL) 授予公開存取,從而協助保護您的資源。除了啟用封鎖公開存取之外,請仔細檢查下列政策,以確認未授予公開存取:
-
連接到相關聯 AWS 主體的身分型政策 (例如 IAM 角色)
-
連接至相關聯 AWS 資源的資源型政策 (例如 AWS Key Management Service (KMS) 金鑰)
注意
-
您只能針對存取點、儲存貯體和 AWS 帳戶啟用封鎖公開存取設定。Amazon S3 不支援個別物件的封鎖公開存取設定。
-
當您將封鎖公開存取設定套用至帳戶時,這些設定會套用至 AWS 區域 全域所有 。設定可能不會在區域內立即或同時生效,但它們最後會散佈到所有區域。
主題
封鎖公開存取設定
S3 封鎖公開存取提供四種設定。您可以任意組合使用這些設定,並套用到個別存取點、儲存貯體或整個 AWS 帳戶。若您將設定套用到帳戶,它會套用到該帳戶擁有的所有儲存貯體和存取點。同樣地,如果您將設定套用至儲存貯體,它會套用至與該儲存貯體相關聯的所有存取點。
下表包含可用的設定。
名稱 | 描述 |
---|---|
BlockPublicAcls |
將此選項設為
當此設定設為 時 注意存取點沒有與它們相關聯的 ACL。如果您將此設定套用至某個存取點,它會作為通往基礎儲存貯體的通道。如果存取點已啟用此設定,則透過存取點提出的請求,其行為就如同基礎儲存貯體已啟用此設定,無論儲存貯體是否已實際啟用此設定。 |
IgnorePublicAcls |
將此選項設為 注意存取點沒有與它們相關聯的 ACL。如果您將此設定套用至某個存取點,它會作為通往基礎儲存貯體的通道。如果存取點已啟用此設定,則透過存取點提出的請求,其行為就如同基礎儲存貯體已啟用此設定,無論儲存貯體是否已實際啟用此設定。 |
BlockPublicPolicy |
如果指定的政策 (存取點或基礎儲存貯體) 允許公開存取 您可以使用此設定,允許使用者管理存取點和儲存貯體政策,而無須讓他們公開共享儲存貯體或其包含的物件。啟用此設定不會影響現有的存取點或儲存貯體政策。 重要若要有效使用此設定,建議您在帳戶層級套用它。儲存貯體政策可讓使用者改變儲存貯體的封鎖公開存取設定。因此,具有變更儲存貯體政策許可的使用者可插入政策,允許他們停用儲存貯體的封鎖公開存取設定。若為整個帳戶啟用此設定,而非僅針對特定儲存貯體,則即使使用者改變儲存貯體政策來停用此設定,Amazon S3 仍會封鎖公有政策。 |
RestrictPublicBuckets |
將此選項設定為 會將具有公有政策的存取點或儲存貯體存取權 啟用此設定不會影響現有的存取點或儲存貯體政策,但 Amazon S3 會封鎖從任何公用存取點或儲存貯體政策衍生的公用及跨帳戶存取,包括對特定帳戶的非公用委派。 |
重要
-
呼叫
GetBucketAcl
並GetObjectAcl
一律傳回指定儲存貯體或物件的有效許可。例如,假設儲存貯體具有授予公開存取的 ACL,同時也啟用了IgnorePublicAcls
設定。在此情況下, 會GetBucketAcl
傳回 ACL,反映 Amazon S3 強制執行的存取許可,而不是與儲存貯體相關聯的實際 ACL。 -
封鎖公開存取設定不會改變現有政策或 ACL。因此,移除封鎖公開存取設定會導致具備公有政策或 ACL 的儲存貯體或物件再次開放公開存取。
在存取點執行封鎖公開存取操作
若要在存取點上執行封鎖公有存取操作,請使用 AWS CLI 服務s3control
。
重要
您無法在建立存取點後變更存取點的封鎖公開存取設定。您只能在建立存取點時為存取點指定封鎖公開存取設定。
「公有」的意義
ACL
如果儲存貯體或物件 ACL 將任何許可授予預先定義的 AllUsers
或 AuthenticatedUsers
群組的成員,則 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 和 IPv6 更廣泛的值/32
(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 的儲存貯體政策」。
注意
使用多值內容索引鍵時,您必須使用 ForAllValues
或 ForAnyValue
設定運算子。
範例 :公有儲存貯體政策
在這些規則之下,下列範例政策會被視為公用。
{ "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/*
的儲存貯體政策不會被視為公開。不過,存取點政策中的相同陳述式會將該存取點轉譯成公開。
使用 IAM Access Analyzer for S3 來檢閱公用儲存貯體
您可以使用 IAM Access Analyzer for S3,檢閱以儲存貯體 ACL、儲存貯體政策或存取點政策授予公開存取的儲存貯體。適用於 S3 的 IAM Access Analyzer 會提醒您,儲存貯體設定為允許存取網際網路或其他 上的任何人 AWS 帳戶,包括組織 AWS 帳戶 外部的任何人。針對每個公開或共用儲存貯體,您會收到報告公開或共用存取來源和層級的發現項目。
在 IAM Access Analyzer for S3 中,只要按一下滑鼠,就可以封鎖對儲存貯體的所有公開存取。您還可以深入檢視儲存貯體的層級許可設定,以設定精細的存取層級。對於需要公開或共用存取的特定和經驗證使用案例,您可以將對儲存貯體的發現項目存檔,以確認並記錄您要讓儲存貯體保持公開或共用。
在極少數情況下,適用於 S3 的 IAM Access Analyzer 和 Amazon S3 封鎖公開存取評估可能會因儲存貯體是否為公有而有所不同。此行為是因為除了評估公有存取之外,Amazon S3 封鎖公有存取也會對動作是否存在執行驗證。假設儲存貯體政策包含允許公開存取 Amazon S3 不支援之動作的 Action
陳述式 (例如 s3:NotASupportedAction
)。在此情況下,Amazon S3 封鎖公有存取會將儲存貯體評估為公有,因為如果稍後支援該動作,這類陳述式可能會使儲存貯體變成公有。如果 Amazon S3 封鎖公開存取和 IAM Access Analyzer for 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 儲存貯體和存取點設定封鎖公開存取的詳細資訊,請參閱下列主題: