本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
對 Amazon S3 中的存取遭拒 (403 Forbidden) 錯誤進行故障診斷
當 AWS 明確或隱含拒絕授權請求時,會出現存取遭拒 (HTTP 403 Forbidden
) 錯誤。
-
當政策包含特定 AWS 動作的
Deny
陳述式時,會發生明確拒絕。 -
如果沒有適用的
Deny
陳述式,也沒有適用的Allow
陳述式,則會發生隱含拒絕。
由於 AWS Identity and Access Management (IAM) 政策預設會隱含拒絕 IAM 委託人,因此該政策必須明確允許委託人執行動作。否則,政策會隱含拒絕存取。如需詳細資訊,請參閱《IAM 使用者指南》中的明確和隱含拒絕之間的差異。如需判斷允許或拒絕存取請求的評估邏輯資訊,請參閱《IAM 使用者指南》中的政策評估邏輯。
如需依 S3 資源類型列出 S3 API 操作許可的詳細資訊,請參閱Amazon S3 API 操作所需的許可。
下列主題涵蓋 Amazon S3 中存取遭拒錯誤的最常見原因。
注意
對於存取遭拒 (HTTP403 Forbidden
) 錯誤,Amazon S3 在儲存貯體擁有者的個別 AWS 帳戶或儲存貯體擁有者 AWS 的組織之外啟動請求時,不會向儲存貯體擁有者收費。
主題
注意
如果您嘗試對許可問題進行故障診斷,請從存取遭拒訊息範例及如何對其進行故障診斷一節開始,然後前往儲存貯體政策與 IAM 政策一節。也請務必遵循檢查許可的秘訣中的指引。
存取遭拒訊息範例及如何對其進行故障診斷
對於同一個 AWS 帳戶內提出的資源請求,Amazon S3 現在會在存取遭拒 (HTTP 403
Forbidden
) 錯誤中包含額外內容。此新內容包括拒絕存取的政策類型、拒絕原因,以及請求存取資源的 IAM 使用者或角色相關資訊。
此額外內容可協助您對存取問題進行故障診斷、找出存取遭拒錯誤的根本原因,並透過更新相關政策來修正不正確的存取控制。此其他內容也可在 AWS CloudTrail 日誌中使用。相同帳戶請求的增強型存取遭拒錯誤訊息現在可在所有 中使用 AWS 區域,包括 AWS GovCloud (US) Regions 和中國區域。
大多數拒絕存取錯誤訊息的格式為 User
。在此範例中,user-arn
is not authorized to perform
action
on "resource-arn
"
because context
是未獲得存取權之使用者的 Amazon Resource Name (ARN),user-arn
是政策拒絕的服務動作,而 action
是政策執行動作所在資源的 ARN。resource-arn
欄位代表政策類型的額外內容,其中說明政策拒絕存取的原因。context
當政策由於包含 Deny
陳述式而明確拒絕存取時,則存取遭拒錯誤訊息會包含 with an
explicit deny in a
一詞。當政策隱含拒絕存取時,則存取遭拒錯誤訊息會包含 type
policybecause no
一詞。type
policy allows the
action
action
重要
-
增強型存取遭拒訊息只會針對相同帳戶請求傳回。跨帳戶請求會傳回一般
Access Denied
訊息。如需判斷允許或拒絕跨帳戶存取請求的評估邏輯資訊,請參閱《IAM 使用者指南》中的跨帳戶政策評估邏輯。如需示範如何授予跨帳戶存取權的逐步解說,請參閱範例 2:授予跨帳戶儲存貯體許可的儲存貯體擁有者。
-
對於向目錄儲存貯體提出的請求,不會傳回增強型存取遭拒錯誤訊息。目錄儲存貯體請求會傳回一般
Access Denied
訊息。 -
如果相同政策類型的多個政策拒絕授權請求,則存取遭拒錯誤訊息不會指定政策數目。
-
如果多種政策類型拒絕授權請求,錯誤訊息只會包含其中一種政策類型。
-
如果存取請求因多個原因遭到拒絕,錯誤訊息只會包含其中一個拒絕原因。
下列範例顯示不同存取遭拒錯誤訊息類型的格式,並示範如何對每種訊息類型進行故障診斷。
因資源控制政策而拒絕存取 – 明確拒絕
-
在資源控制政策 (RCP) 中檢查該動作是否有
Deny
陳述式。對於下列範例,動作是s3:GetObject
。 -
透過移除
Deny
陳述式來更新您的 RCP。如需詳細資訊,請參閱《AWS Organizations 使用者指南》中的更新資源控制政策 (RCP)。
An error occurred (AccessDenied) when calling the GetObject operation: User: arn:aws:iam::
777788889999
:user/MaryMajor
is not authorized to perform: s3:GetObject on resource: "arn:aws:s3:::amzn-s3-demo-bucket1
/object-name
" with an explicit deny in a resource control policy
因服務控制政策而拒絕存取 – 隱含拒絕
-
在服務控制政策 (SCP) 中檢查該動作是否有缺少的
Allow
陳述式。對於下列範例,動作是s3:GetObject
。 -
透過新增
Allow
陳述式來更新您的 SCP。如需詳細資訊,請參閱《AWS Organizations 使用者指南》中的更新 SCP。
User: arn:aws:iam::
777788889999
:user/MaryMajor
is not authorized to perform: s3:GetObject because no service control policy allows the s3:GetObject action
因服務控制政策而拒絕存取 – 明確拒絕
-
在服務控制政策 (SCP) 中檢查該動作是否有
Deny
陳述式。對於下列範例,動作是s3:GetObject
。 -
變更
Deny
陳述式以允許使用者進行必要存取,藉此更新您的 SCP。如需如何執行這項操作的範例,請參閱《AWS Organizations 使用者指南》中的防止 IAM 使用者和角色進行指定的變更,但指定管理員角色除外。如需有新 SCP 的詳細資訊,請參閱《AWS Organizations 使用者指南》中的更新 SCP。
User: arn:aws:iam::
777788889999
:user/MaryMajor
is not authorized to perform: s3:GetObject with an explicit deny in a service control policy
因 VPC 端點政策而拒絕存取 – 隱含拒絕
-
在您的虛擬私有雲端 (VPC) 端點政策中檢查該動作是否有遺失的
Allow
陳述式。對於下列範例,動作是s3:GetObject
。 -
透過新增
Allow
陳述式來更新 VPC 端點政策。如需詳細資訊,請參閱《AWS PrivateLink 指南》中的更新 VPC 端點政策。
User: arn:aws:iam::
123456789012
:user/MaryMajor
is not authorized to perform: s3:GetObject because no VPC endpoint policy allows the s3:GetObject action
因 VPC 端點政策而拒絕存取 – 明確拒絕
-
在您的虛擬私有雲端 (VPC) 端點政策中檢查該動作是否有明確的
Deny
陳述式。對於下列範例,動作是s3:GetObject
。 -
變更
Deny
陳述式以允許使用者進行必要存取,藉此更新您的 VPC 端點政策。例如,您可以更新Deny
陳述式使用aws:PrincipalAccount
條件索引鍵搭配StringNotEquals
條件運算子,以便允許特定主體存取,如範例 7:從 Deny 陳述式中排除特定主體所示。如需更新 VPC 端點政策的詳細資訊,請參閱《AWS PrivateLink 指南》中的更新 VPC 端點政策。
User: arn:aws:iam::
123456789012
:user/MaryMajor
is not authorized to perform: s3:GetObject on resource: "arn:aws:s3:::amzn-s3-demo-bucket1
/object-name
" with an explicit deny in a VPC endpoint policy
因許可界限而拒絕存取 – 隱含拒絕
-
在許可界限中檢查該動作是否有遺失的
Allow
陳述式。對於下列範例,動作是s3:GetObject
。 -
透過將
Allow
陳述式新增至您的 IAM 政策來更新您的許可界限。如需詳細資訊,請參閱《IAM 使用者指南》中的 IAM 實體的許可界限和編輯 IAM 政策。
User: arn:aws:iam::
123456789012
:user/MaryMajor
is not authorized to perform: s3:GetObject on resource: "arn:aws:s3:::amzn-s3-demo-bucket1
/object-name
" because no permissions boundary allows the s3:GetObject action
因許可界限而拒絕存取 – 明確拒絕
-
在許可界限中檢查該動作是否有明確的
Deny
陳述式。對於下列範例,動作是s3:GetObject
。 -
變更 IAM 政策中的
Deny
陳述式以允許使用者進行必要存取,藉此更新您的許可界限。例如,您可以更新Deny
陳述式使用aws:PrincipalAccount
條件索引鍵搭配StringNotEquals
條件運算子,以便允許特定主體存取,如 IAM 使用者指南》中的 aws:PrincipalAccount 所示。如需詳細資訊,請參閱《IAM 使用者指南》中的 IAM 實體的許可界限和編輯 IAM 政策。
User: arn:aws:iam::
777788889999
:user/MaryMajor
is not authorized to perform: s3:GetObject with an explicit deny in a permissions boundary
因工作階段政策而拒絕存取 – 隱含拒絕
User: arn:aws:iam::
123456789012
:user/MaryMajor
is not authorized to perform: s3:GetObject because no session policy allows the s3:GetObject action
因工作階段政策而拒絕存取 – 明確拒絕
-
在工作階段政策中檢查該動作是否有明確的
Deny
陳述式。對於下列範例,動作是s3:GetObject
。 -
變更
Deny
陳述式以允許使用者進行必要存取,藉此更新您的工作階段政策。例如,您可以更新Deny
陳述式使用aws:PrincipalAccount
條件索引鍵搭配StringNotEquals
條件運算子,以便允許特定主體存取,如範例 7:從 Deny 陳述式中排除特定主體所示。如需更新工作階段政策的詳細資訊,請參閱《IAM 使用者指南》中的工作階段政策和編輯 IAM 政策。
User: arn:aws:iam::
123456789012
:user/MaryMajor
is not authorized to perform: s3:GetObject on resource: "arn:aws:s3:::amzn-s3-demo-bucket1
/object-name
" with an explicit deny in a session policy
因以資源為基礎的政策而拒絕存取 – 隱含拒絕
注意
「資源型政策」是指儲存貯體政策和存取點政策等政策。
-
在以資源為基礎的政策中檢查該動作是否有遺失的
Allow
陳述式。另請檢查是否在儲存貯體、存取點或帳戶層級套用IgnorePublicAcls
S3 封鎖公開存取設定。對於下列範例,動作是s3:GetObject
。 -
透過新增
Allow
陳述式來更新您的政策。如需詳細資訊,請參閱《IAM 使用者指南》中的資源型政策和編輯 IAM 政策。您可能還需要調整儲存貯體、存取點或帳戶的
IgnorePublicAcls
封鎖公開存取設定。如需詳細資訊,請參閱 因封鎖公開存取設定而拒絕存取 和 為您的 S3 儲存貯體設定封鎖公開存取。
User: arn:aws:iam::
123456789012
:user/MaryMajor
is not authorized to perform: s3:GetObject because no resource-based policy allows the s3:GetObject action
因以資源為基礎的政策而拒絕存取 – 明確拒絕
注意
「資源型政策」是指儲存貯體政策和存取點政策等政策。
-
在以資源為基礎的政策中檢查該動作是否有明確的
Deny
陳述式。另請檢查是否在儲存貯體、存取點或帳戶層級套用RestrictPublicBuckets
S3 封鎖公開存取設定。對於下列範例,動作是s3:GetObject
。 -
變更
Deny
陳述式以允許使用者進行必要存取,藉此更新您的政策。例如,您可以更新Deny
陳述式使用aws:PrincipalAccount
條件索引鍵搭配StringNotEquals
條件運算子,以便允許特定主體存取,如範例 7:從 Deny 陳述式中排除特定主體所示。如需更新資源型政策的詳細資訊,請參閱《IAM 使用者指南》中的資源型政策和編輯 IAM 政策。您可能還需要調整儲存貯體、存取點或帳戶的
RestrictPublicBuckets
封鎖公開存取設定。如需詳細資訊,請參閱 因封鎖公開存取設定而拒絕存取 和 為您的 S3 儲存貯體設定封鎖公開存取。
User: arn:aws:iam::
123456789012
:user/MaryMajor
is not authorized to perform: s3:GetObject on resource: "arn:aws:s3:::amzn-s3-demo-bucket1
/object-name
" with an explicit deny in a resource-based policy
因以身分為基礎的政策而拒絕存取 – 隱含拒絕
User: arn:aws:iam::
123456789012
:user/MaryMajor
is not authorized to perform: s3:GetObject because no identity-based policy allows the s3:GetObject action
因以身分為基礎的政策而拒絕存取 – 明確拒絕
-
在連接至身分的以身分為基礎的政策中檢查該動作是否有明確的
Deny
陳述式。對於下列範例,動作是連接至使用者MaryMajor
的s3:GetObject
。 -
變更
Deny
陳述式以允許使用者進行必要存取,藉此更新您的政策。例如,您可以更新Deny
陳述式使用aws:PrincipalAccount
條件索引鍵搭配StringNotEquals
條件運算子,以便允許特定主體存取,如 IAM 使用者指南》中的 aws:PrincipalAccount 所示。如需詳細資訊,請參閱《IAM 使用者指南》中的身分型政策和編輯 IAM 政策。
User: arn:aws:iam::
123456789012
:user/MaryMajor
is not authorized to perform: s3:GetObject on resource: "arn:aws:s3:::amzn-s3-demo-bucket1
/object-name
" with an explicit deny in an identity-based policy
因封鎖公開存取設定而拒絕存取
Amazon S3 封鎖公開存取功能可提供存取點、儲存貯體和帳戶的設定,以協助您管理對 Amazon S3 資源的公開存取。如需 Amazon S3 如何定義「公開」的詳細資訊,請參閱 「公有」的意義。
依預設,新的儲存貯體、存取點和物件不允許公開存取。不過,使用者可以修改儲存貯體政策、存取點政策、IAM 使用者政策、物件許可或存取控制清單 (ACL),以允許公開存取。S3 封鎖公開存取設定會覆寫這些政策、許可和 ACL。自 2023 年 4 月起,新儲存貯體的所有封鎖公開存取設定預設為啟用。
Amazon S3 在收到請求存取儲存貯體或物件時,將會判斷儲存貯體或儲存貯體擁有者的帳戶是否套用封鎖公開存取設定。如果請求是透過存取點提出,Amazon S3 也會檢查存取點的封鎖公開存取設定。若有禁止所請求存取的現有封鎖公開存取設定,Amazon S3 便會拒絕該請求。
Amazon S3 封鎖公開存取提供四個設定。這些是獨立的設定,且可以任意組合使用。每個設定都可以套用至存取點、儲存貯體或整個 AWS 帳戶。如果存取點、儲存貯體或帳戶的封鎖公開存取設定不同,則 Amazon S3 會套用存取點、儲存貯體和帳戶設定的最嚴格組合。
Amazon S3 在評估封鎖公開存取設定是否禁止操作時,將會拒絕任何違反存取點、儲存貯體或帳戶設定的請求。
Amazon S3 封鎖公開存取提供下列四種設定:
-
BlockPublicAcls
– 此設定適用於PutBucketAcl
、PutObjectAcl
、PutObject
、CreateBucket
、CopyObject
和POST Object
請求。BlockPublicAcls
設定會導致下列行為:-
如果指定的存取控制清單 (ACL) 為公有,則
PutBucketAcl
和PutObjectAcl
呼叫會失敗。 -
如果請求包含公有 ACL,則
PutObject
呼叫會失敗。 -
若將此設定套用至帳戶,則當請求包含公有 ACL 時,
CreateBucket
呼叫會失敗並以 HTTP400
(Bad Request
) 回應。
例如,當
CopyObject
請求的存取由於BlockPublicAcls
設定而遭到拒絕時,您會收到下列訊息:An error occurred (AccessDenied) when calling the CopyObject operation: User: arn:aws:sts::
123456789012
:user/MaryMajor
is not authorized to perform: s3:CopyObject on resource: "arn:aws:s3:::amzn-s3-demo-bucket1
/object-name
" because public access control lists (ACLs) are blocked by the BlockPublicAcls block public access setting. -
-
IgnorePublicAcls
–IgnorePublicAcls
設定會導致 Amazon S3 在儲存貯體及其所包含的任何物件上忽略所有公有 ACL。如果請求的許可僅由公有 ACL 授予,則IgnorePublicAcls
設定會拒絕該請求。任何由於
IgnorePublicAcls
設定所導致的拒絕都是隱含的。例如,若IgnorePublicAcls
由於公有 ACL 而拒絕GetObject
請求,您會收到下列訊息:User: arn:aws:iam::
123456789012
:user/MaryMajor
is not authorized to perform: s3:GetObject because no resource-based policy allows the s3:GetObject action -
BlockPublicPolicy
– 此設定適用於PutBucketPolicy
和PutAccessPointPolicy
請求。如果指定的儲存貯體政策允許公開存取,則針對儲存貯體設定
BlockPublicPolicy
會導致 Amazon S3 拒絕呼叫PutBucketPolicy
。如果指定的政策允許公開存取,此設定也會導致 Amazon S3 拒絕對所有儲存貯體的相同帳戶存取點呼叫PutAccessPointPolicy
。如果指定的政策 (存取點或基礎儲存貯體) 允許公開存取,則針對存取點設定
BlockPublicPolicy
會導致 Amazon S3 拒絕透過存取點提出的PutAccessPointPolicy
和PutBucketPolicy
呼叫。例如,當
PutBucketPolicy
請求的存取由於BlockPublicPolicy
設定而遭到拒絕時,您會收到下列訊息:An error occurred (AccessDenied) when calling the PutBucketPolicy operation: User: arn:aws:sts::
123456789012
:user/MaryMajor
is not authorized to perform: s3:PutBucketPolicy on resource: "arn:aws:s3:::amzn-s3-demo-bucket1
/object-name
" because public policies are blocked by the BlockPublicPolicy block public access setting. -
RestrictPublicBuckets
–RestrictPublicBuckets
設定限制存取具有公有政策的存取點或儲存貯體,僅限於儲存貯體擁有者的帳戶和存取點擁有者帳戶中的 AWS 服務 主體和授權使用者。此設定會封鎖對存取點或儲存貯體 ( AWS 服務 主體除外) 的所有跨帳戶存取,同時仍允許帳戶中的使用者管理存取點或儲存貯體。此設定也會拒絕所有匿名 (或未簽署) 呼叫。任何由於
RestrictPublicBuckets
設定所導致的拒絕都是明確的。例如,若RestrictPublicBuckets
由於公有儲存貯體或存取點政策而拒絕GetObject
請求,您會收到下列訊息:User: arn:aws:iam::
123456789012
:user/MaryMajor
is not authorized to perform: s3:GetObject on resource: "arn:aws:s3:::amzn-s3-demo-bucket1
/object-name
" with an explicit deny in a resource-based policy
如需這些設定的詳細資訊,請參閱 封鎖公開存取設定。若要檢閱和更新這些設定,請參閱設定封鎖公開存取。
儲存貯體政策與 IAM 政策
儲存貯體層級操作
如果沒有儲存貯體政策,則儲存貯體會隱含地允許儲存貯體擁有者帳戶中任何 AWS Identity and Access Management (IAM) 身分的請求。儲存貯體也會隱含地拒絕來自任何其他帳戶中任何其他 IAM 身分的請求,以及匿名 (未簽署) 請求。不過,如果沒有 IAM 使用者政策,請求者 (除非是 AWS 帳戶 根使用者) 會隱含拒絕提出任何請求。如需評估邏輯的詳細資訊,請參閱《IAM 使用者指南》中的判斷允許還是拒絕帳戶內的請求。
物件層級操作
如果物件是儲存貯體擁有帳戶所擁有,則儲存貯體政策和 IAM 使用者政策的運作方式與物件層級操作的運作方式相同,因為它們都適用於物件層級操作。例如,如果沒有適當的儲存貯體政策,則儲存貯體會隱含地允許來自儲存貯體擁有帳戶中任何 IAM 身分的物件請求。儲存貯體也會隱含地拒絕來自任何其他帳戶中任何其他 IAM 身分的物件請求,以及匿名 (未簽署) 請求。不過,如果沒有 IAM 使用者政策,請求者 (除非是 AWS 帳戶 根使用者) 會隱含拒絕提出任何物件請求。
如果物件是由外部帳戶擁有,則只能透過物件存取控制清單 (ACL) 授予物件的存取權。儲存貯體政策和 IAM 使用者政策仍可用來拒絕物件請求。
因此,若要確保您的儲存貯體政策或 IAM 使用者政策不會造成「存取遭拒 (403 禁止)」錯誤,請確定符合下列要求:
-
對於同一帳戶存取,在儲存貯體政策或 IAM 使用者政策中,對您嘗試授予其許可的請求者不得有明確的
Deny
陳述式。如果您只想要使用儲存貯體政策和 IAM 使用者政策授予許可,則其中一項政策中至少須有一個明確的Allow
陳述式。 -
對於跨帳戶存取權,在儲存貯體政策或 IAM 使用者政策中,對您嘗試授予其許可的請求者不得有明確的
Deny
陳述式。若要使用儲存貯體政策和 IAM 使用者政策來授予跨帳戶許可,請確定請求者的儲存貯體政策和 IAM 使用者政策都會包含明確的Allow
陳述式。
注意
儲存貯體政策中的 Allow
陳述式僅適用於同一儲存貯體擁有帳戶所擁有的物件。不過,儲存貯體政策中的 Deny
陳述式會套用至所有物件,不論物件擁有權為何。
檢視或編輯儲存貯體政策
注意
若要檢視或編輯儲存貯體政策,您必須具備 s3:GetBucketPolicy
許可。
登入 AWS Management Console ,並在 https://console.aws.amazon.com/s3/
:// 開啟 Amazon S3 主控台。 -
在左側導覽窗格中,選擇 Buckets (儲存貯體)。
-
從儲存貯體清單中,選擇要檢視或建立其儲存貯體政策的儲存貯體名稱。
-
選擇許可索引標籤標籤。
-
在 Bucket policy (儲存貯體政策) 下方,選擇 Edit (編輯)。Edit bucket policy (編輯儲存貯體政策) 頁面隨即出現。
若要使用 AWS Command Line Interface (AWS CLI) 檢閱或編輯儲存貯體政策,請使用 get-bucket-policy
注意
如果您因為儲存貯體政策不正確而遭到鎖定,AWS Management Console 請使用您的 AWS 帳戶 根使用者憑證登入 。若要重新取得儲存貯體的存取權,請務必使用您的 AWS 帳戶 根使用者登入資料刪除不正確的儲存貯體政策。
檢查許可的秘訣
若要檢查請求者是否具有適當的許可來執行 Amazon S3 操作,請嘗試以下動作:
-
識別請求者。如果它是未簽署的請求,則為沒有 IAM 使用者政策的匿名請求。如果是使用預先簽署 URL 的請求,則使用者政策會與簽署請求之 IAM 使用者或角色的使用者政策相同。
-
確認您使用的是正確的 IAM 使用者或角色。您可以檢查 AWS Management Console 的右上角或使用 aws sts get-caller-identity 命令來驗證 IAM 使用者或角色。
-
檢查與 IAM 使用者或角色相關的 IAM 政策。您可以使用下列其中一種方法:
-
檢閱不同的 IAM 政策類型。
-
如有需要,請編輯您的 IAM 使用者政策。
-
請檢閱下列明確拒絕或允許存取的政策範例:
-
明確允許 IAM 使用者政策:IAM:以程式設計方式和在主控台中允許和拒絕對多個服務的存取
-
明確允許儲存貯體政策:將許可授予多個帳戶,以上傳物件或設定物件 ACL 進行公開存取
-
明確拒絕 IAM 使用者政策:AWS: AWS 根據請求拒絕對 的存取 AWS 區域
-
明確拒絕儲存貯體政策:寫入儲存貯體的所有物件都需要 SSE-KMS
-
Amazon S3 ACL 設定
檢查 ACL 設定時,請先檢閱物件擁有權設定,以檢查儲存貯體上是否已啟用 ACL。請注意,ACL 許可只能用來授予許可,無法用來拒絕請求。ACL 也無法用來將存取權授予儲存貯體政策或 IAM 使用者政策中明確拒絕的請求者。
「物件擁有權」會設定為套用儲存貯體擁有者強制執行。
如果已啟用儲存貯體擁有者強制執行設定,則 ACL 設定不太可能造成「拒絕存取 (403 禁止)」錯誤,因為此設定會停用所有套用至儲存貯體和物件的 ACL。儲存貯體擁有者強制執行是 Amazon S3 儲存貯體的預設 (和建議) 設定。
「物件擁有權」設定會設定為儲存貯體擁有者偏好或物件寫入者
ACL 許可仍適用於儲存貯體擁有者偏好設定或物件寫入者設定。有兩種 ACL:儲存貯體 ACL 和物件 ACL。如需這兩種 ACL 類型之間的差異,請參閱 ACL 許可與存取政策許可的對應。
根據遭拒請求的動作,檢查儲存貯體或物件的 ACL 許可:
-
如果 Amazon S3 拒絕了
LIST
、PUT
物件、GetBucketAcl
或PutBucketAcl
請求,請檢閱儲存貯體的 ACL 許可。注意
您無法使用儲存貯體 ACL 設定授予
GET
物件許可。 -
如果 Amazon S3 拒絕了 S3 物件上的
GET
請求,或 PutObjectAcl 請求,請檢閱物件的 ACL 許可。重要
如果擁有物件的帳戶與擁有儲存貯體的帳戶不同,則儲存貯體政策不會控制物件的存取。
針對跨帳戶物件擁有權期間來自 GET
物件請求的「拒絕存取 (403 禁止)」錯誤進行疑難排解
檢閱儲存貯體的物件擁有權設定,以判斷物件擁有者。如果您有權存取物件 ACL,也可以檢查物件擁有者的帳戶。(若要檢視物件擁有者的帳戶,請檢閱 Amazon S3 主控台中的物件 ACL 設定。) 或者,您也可以提出 GetObjectAcl
請求以尋找物件擁有者的正式 ID,以驗證物件擁有者帳戶。根據預設,ACL 會將 GET
請求的明確允許許可授予物件擁有者的帳戶。
在確認了物件擁有者與儲存貯體擁有者不同之後,請根據您的使用案例和存取層級,選擇下列其中一種方法來協助解決「拒絕存取 (403 禁止)」錯誤:
-
停用 ACL (建議) - 此方法將套用至所有物件,並可由儲存貯體擁有者執行。此方法會自動給與儲存貯體擁有者擁有權,並讓其完全控制儲存貯體中的每個物件。實作此方法之前,請檢查停用 ACL 的先決條件。如需如何將儲存貯體設定為儲存貯體擁有者強制執行 (建議) 模式的相關資訊,請參閱在現有儲存貯體上設定物件擁有權。
重要
若要避免發生「拒絕存取 (403 禁止)」錯誤,請務必先將 ACL 許可遷移至儲存貯體政策,然後再停用 ACL。如需詳細資訊,請參閱從 ACL 許可遷移的儲存貯體政策範例。
-
將物件擁有者變更為儲存貯體擁有者 - 此方法可套用至個別物件,但只有物件擁有者 (或具有適當許可的使用者) 才能變更物件的擁有權。可能需要支付額外的
PUT
費用。(如需詳細資訊,請參閱 Amazon S3 定價。) 此方法授予儲存貯體擁有者物件的完整擁有權,允許儲存貯體擁有者透過儲存貯體政策控制物件的存取。 若要變更物件的擁有權,請執行下列其中一個動作:
-
您 (儲存貯體擁有者) 可將物件複製回儲存貯體。
-
您可以將儲存貯體的「物件擁有權」設定變更為儲存貯體擁有者偏好。如果停用版本控制,則會覆寫儲存貯體中的物件。如果啟用了版本控制,則相同物件的重複版本將會出現在儲存貯體中,而儲存貯體擁有者可以將生命週期規則設定為過期。如需如何變更「物件擁有權」設定的指示,請參閱 設定現有儲存貯體的「物件擁有權」。
注意
當您將「物件擁有權」設定更新為儲存貯體擁有者偏好時,此設定只會套用至上載至儲存貯體的新物件。
-
您可以使用
bucket-owner-full-control
標準物件 ACL 讓物件擁有者重新上傳物件。
注意
對於跨帳戶上傳,您也可以在儲存貯體政策中要求
bucket-owner-full-control
標準物件 ACL。如需儲存貯體政策範例,請參閱授予跨帳戶許可,以在確保儲存貯體擁有者具有完全控制時上傳物件。 -
-
將物件寫入者保留為物件擁有者 - 此方法不會變更物件擁有者,但可讓您個別授予物件的存取權。若要授予物件的存取權,您必須具有該物件的
PutObjectAcl
許可。然後,若要修正「拒絕存取 (403 禁止)」錯誤,請將請求者新增為被授予者,以存取物件 ACL 中的物件。如需詳細資訊,請參閱設定 ACL。
S3 封鎖公開存取設定
如果失敗的請求涉及公開存取或公開政策,請檢查帳戶、儲存貯體或存取點上的 S3 封鎖公開存取設定。如需對 S3 封鎖公開存取設定相關存取遭拒錯誤進行故障診斷的詳細資訊,請參閱因封鎖公開存取設定而拒絕存取。
Amazon S3 加密設定
Amazon S3 支援儲存貯體上的伺服器端加密。伺服器端加密是指接收資料的應用程式或服務在目的地將資料加密。Amazon S3 會在物件層級加密您的資料,因為它會寫入 AWS 資料中心的磁碟,並在您存取時將其解密。
依預設,Amazon S3 現在將伺服器端加密與 Amazon S3 受管金鑰 (SSE-S3) 套用為 Amazon S3 中每個儲存貯體的基本加密層級。Amazon S3 也可讓您在上傳物件時指定伺服器端加密方法。
檢閱儲存貯體的伺服器端加密狀態和加密設定
登入 AWS Management Console ,並在 https://console.aws.amazon.com/s3/
:// 開啟 Amazon S3 主控台。 -
在左側導覽窗格中,選擇 Buckets (儲存貯體)。
-
從儲存貯體清單中,選擇要檢查其加密設定的儲存貯體。
-
選擇屬性索引標籤。
-
向下捲動至預設加密區段,然後檢視加密類型設定。
若要使用 檢查您的加密設定 AWS CLI,請使用 get-bucket-encryption命令。
檢查物件的加密狀態
登入 AWS Management Console ,並在 https://console.aws.amazon.com/s3/
:// 開啟 Amazon S3 主控台。 -
在左側導覽窗格中,選擇 Buckets (儲存貯體)。
-
從儲存貯體清單中,選擇包含該物件的儲存貯體名稱。
-
從物件清單中,選擇您想要新增或變更其加密的物件名稱。
物件的詳細資訊頁面隨即出現。
-
向下捲動至伺服器端加密設定區段,以檢視物件的伺服器端加密設定。
若要使用 檢查您的物件加密狀態 AWS CLI,請使用 head-object命令。
加密和許可需求
Amazon S3 支援三種類型的伺服器端加密:
-
使用 Amazon S3 受管金鑰 (SSE-S3) 的伺服器端加密
-
伺服器端加密搭配 AWS Key Management Service (AWS KMS) 金鑰 (SSE-KMS)
-
使用客戶提供金鑰 (SSE-C) 的伺服器端加密
根據您的加密設定,確定符合下列許可需求:
-
SSE-S3 - 不需要額外的許可。
-
SSE-KMS (搭配客戶受管金鑰) - 若要上傳物件,需要 AWS KMS key 上的
kms:GenerateDataKey
權限。若要下載物件並執行物件的分段上傳,需要 KMS 金鑰上的kms:Decrypt
許可。 -
SSE-KMS (使用 AWS 受管金鑰) – 請求者必須來自擁有
aws/s3
KMS 金鑰的相同帳戶。請求者亦須具有正確的 Amazon S3 許可才能存取物件。 -
SSE-C (搭配客戶提供的金鑰) - 不需要其他許可。您可以設定儲存貯體政策,針對儲存貯體中的物件使用客戶提供的加密金鑰來要求和限制伺服器端加密。
如果物件使用客戶受管金鑰加密,請確定 KMS 金鑰政策允許您執行 kms:GenerateDataKey
或 kms:Decrypt
動作。如需檢查 KMS 金鑰政策的指示,請參閱《AWS Key Management Service 開發人員指南》中的檢視金鑰政策。
S3 物件鎖定設定
如果您的儲存貯體已啟用 S3 物件鎖定,且物件受到保留期或法務保存的保護,則在您嘗試刪除物件時,Amazon S3 會傳回「拒絕存取 (403 禁止)」錯誤。
檢查儲存貯體是否已啟用物件鎖定
登入 AWS Management Console ,並在 https://console.aws.amazon.com/s3/
:// 開啟 Amazon S3 主控台。 -
在左側導覽窗格中,選擇 Buckets (儲存貯體)。
-
從儲存貯體清單中,選擇您要檢閱的儲存貯體名稱。
-
選擇屬性索引標籤。
-
向下捲動至物件鎖定區段。確認物件鎖定設定為已啟用或已停用。
若要判斷物件是否受到保留期或法務保存保護,請檢視物件的鎖定資訊。
如果物件受到保留期或法務保存保護,請檢查下列情況:
-
如果物件版本受到合規保留模式保護,則沒有任何方式可將其永久刪除。來自任何請求者的永久
DELETE
請求,包括 AWS 帳戶 根使用者,將導致存取遭拒 (403 禁止) 錯誤。此外,請注意,當您針對受合規保留模式保護的物件提交DELETE
請求時,Amazon S3 會為該物件建立刪除標記。 -
如果物件版本受控管保留模式保護,且您具有
s3:BypassGovernanceRetention
許可,您可以略過保護並永久刪除版本。如需詳細資訊,請參閱繞過控管模式。 -
如果物件版本受法務保存保護,則永久
DELETE
請求可能會導致「拒絕存取 (403 禁止)」錯誤。若要永久刪除物件版本,您必須移除物件版本上的法務保存。若要移除法務保存,您必須具有s3:PutObjectLegalHold
許可。如需移除法務保存的詳細資訊,請參閱 設定 S3 物件鎖定。
VPC 端點政策
如果您使用虛擬私有雲端 (VPC) 端點來存取 Amazon S3,請確定 VPC 端點政策不會封鎖您存取 Amazon S3 資源。依預設,VPC 端點政策允許所有對 Amazon S3 的請求。您也可以設定 VPC 端點政策來限制特定請求。如需如何檢查 VPC 端點政策的資訊,請參閱下列資源:
-
AWS PrivateLink 指南》中的使用端點政策控制對 VPC 端點的存取
AWS Organizations 政策
如果您的 AWS 帳戶 屬於組織, AWS Organizations 政策可能會封鎖您存取 Amazon S3 資源。根據預設, AWS Organizations 政策不會封鎖對 Amazon S3 的任何請求。不過,請確定您的 AWS Organizations 政策尚未設定為封鎖對 S3 儲存貯體的存取。如需如何檢查 AWS Organizations 政策的說明,請參閱下列資源:
-
AWS Organizations 使用者指南》中的列出所有政策
此外,如果您誤將成員帳戶的儲存貯體政策設定為拒絕所有使用者存取 S3 儲存貯體,您可以透過在 IAM 中啟動成員帳戶的特權工作階段來解除鎖定儲存貯體。啟動特權工作階段之後,您可以刪除設定錯誤的儲存貯體政策,以重新取得儲存貯體的存取權。如需詳細資訊,請參閱AWS Identity and Access Management 《 使用者指南》中的在 AWS Organizations 成員帳戶上執行特殊權限任務。
存取點設定
如果您在透過 Amazon S3 存取點提出請求時收到「拒絕存取 (403 禁止)」錯誤,則可能需要檢查下列事項:
-
存取點的組態
-
用於存取點的 IAM 使用者政策
-
用來管理或設定跨帳戶存取點的儲存貯體政策
存取點組態與政策
-
建立存取點時,您可以選擇將網際網路或 VPC 指定為網路原點。如果網路原點設定為僅限 VPC,Amazon S3 將拒絕對非來自指定 VPC 的存取點所發出的任何請求。若要檢查存取點的網路原點,請參閱 建立受限於 Virtual Private Cloud 的存取點。
-
使用存取點,您也可以設定自訂的「封鎖公開存取」設定,其運作方式與儲存貯體或帳戶層級的「封鎖公開存取」設定類似。若要檢查您的自訂「封鎖公開存取」設定,請參閱 管理存取點的公開存取。
-
若要使用存取點對 Amazon S3 提出成功的請求,請確保請求者具有必要的 IAM 許可。如需詳細資訊,請參閱配置使用存取點的 IAM 原則。
-
如果請求涉及跨帳戶存取點,請確定儲存貯體擁有者已更新儲存貯體政策,以授權來自存取點的請求。如需詳細資訊,請參閱授予跨帳戶存取點的許可。
如果檢查本主題中的所有項目後,存取遭拒 (403 禁止) 錯誤仍然存在,請擷取您的 Amazon S3 請求 ID 並聯絡 支援 以取得其他指導。