Share Your AWS re:Post Experience - Quick 3 Question Survey
Help us improve AWS re:Post! We're interested in understanding how you use re:Post and its impact on your AWS journey. Please take a moment to complete our brief 3-question survey.
如何對來自 Amazon S3 的 403「存取遭拒」錯誤進行疑難排解?
我的使用者正在嘗試存取 Amazon Simple Storage Service (Amazon S3) 儲存貯體中的物件,但 Amazon S3 傳回 403「存取遭拒」錯誤。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,則請參閱對 AWS CLI 進行錯誤疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
使用 AWS Systems Manager Automation 文件
若要協助您判斷從指定公用 S3 儲存貯體讀取物件時的問題,請使用 AWS Systems Manager 上的 AWSSupport-TroubleshootS3PublicRead 自動化文件。
檢查您的儲存貯體和物件所有權設定
對於來自 GetObject 或 HeadObject 請求的 AccessDenied錯誤,請檢查物件和儲存貯體是否由相同擁有者所有。此外,請檢查儲存貯體擁有者具有讀取或完全控制存取控制清單 (ACL) 權限。
**注意:**建立新儲存貯體時,預設會關閉 ACL。最佳做法是使用 AWS Identity and Access Management (IAM) 政策 (而非 ACL) 來控制對 S3 資源的存取。
確認擁有物件的帳戶
擁有儲存物件之儲存貯體的 AWS 帳戶預設也會擁有物件。如果其他帳戶可以將物件上傳至您的儲存貯體,請確認您的使用者無法存取之物件的權限。
若要檢查儲存貯體和物件是否具有相同的擁有者,請完成下列步驟:
-
執行 list-buckets AWS CLI 命令,以取得帳戶的 Amazon S3 正式 ID:
aws s3api list-buckets --query "Owner.ID"
-
執行 list-objects 命令以取得帳戶 (擁有使用者無法存取之物件) 的 Amazon S3 正式 ID:
aws s3api list-objects --bucket DOC-EXAMPLE-BUCKET --prefix exampleprefix
**注意:**將 DOC-EXAMPLE-BUCKET 取代為您的儲存貯體名稱,並將 exampleprefix 取代為您的句首值。您可以使用 list-objects 指令同時檢查多個物件。
-
如果正式 ID 不符,則您不會擁有該物件。物件所有者可以執行 put-object-acl 命令來授予您物件的完整控制權:
aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key exampleobject.jpg --acl bucket-owner-full-control
**注意:**將 DOC-EXAMPLE-BUCKET 取代為包含物件的儲存貯體名稱,並將 exampleobject.jpg 取代為金鑰名稱。
-
在物件擁有者將物件的 ACL 變更為 bucket-owner-full-control 後,儲存貯體擁有者就可以存取物件。若同時要將物件擁有者變更為儲存貯體的帳戶,請從儲存貯體的帳戶執行 cp 命令,將物件複製到自身上。
建立具有儲存貯體權限的 IAM 角色
如果 IAM 角色和儲存貯體擁有者屬於相同的帳戶,則 IAM 角色或儲存貯體必須具有權限。您不需要針對 IAM 角色和儲存貯體的權限。
若要在不同帳戶之間新增權限,請在您的帳戶中建立具有儲存貯體權限的 IAM 角色。然後,授予另一個帳戶擔任該 IAM 角色的權限。如需詳細資訊,請參閱 IAM 教學課程: 使用 IAM 角色將存取權委派給不同 AWS 帳戶。
檢查您的儲存貯體政策或 IAM 使用者政策
檢閱儲存貯體政策或相關聯 IAM 使用者政策,找出任何可能拒絕存取的陳述式。確認對儲存貯體的請求,符合儲存貯體政策或 IAM 政策中的條件。檢查策略中是否有錯誤的**「拒絕」**陳述式、遺失動作或錯字。
拒絕陳述式條件
檢查**「拒絕」**陳述式,找出根據下列情況封鎖存取的條件:
- 多重要素驗證 (MFA)
- 加密金鑰
- 特定的 IP 位址
- 特定虛擬私有雲端 (VPC) 或 VPC 端點
- 特定 IAM 使用者或角色
**注意:**如果您需要 MFA,而且使用者使用 AWS CLI 傳送請求,請確認使用者將 AWS CLI 設定為使用 MFA。
例如,在下列儲存貯體政策中,Statement1 允許公開存取從 DOC-EXAMPLE-BUCKET 下載物件 (s3:GetObject)。但是,除非要求來自 VPC 端點 vpce-1a2b3c4d,否則 Statement2 明確拒絕所有從 DOC-EXAMPLE-BUCKET 下載物件的存取權。因為**「拒絕」陳述式的優先順序高於「允許」**陳述式,所以嘗試從 vpce-1a2b3c4d 外部下載物件的使用者會被拒絕存取。
{ "Id": "Policy1234567890123", "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Principal": "*" }, { "Sid": "Statement2", "Action": [ "s3:GetObject" ], "Effect": "Deny", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringNotEquals": { "aws:SourceVpce": "vpce-1a2b3c4d" } }, "Principal": "*" } ] }
**儲存貯體政策或 IAM 政策 **
請確認儲存貯體政策或 IAM 政策允許使用者必須執行的 Amazon S3 動作。例如,下列儲存貯體政策不包含 s3:PutObjectAcl 動作的權限:
{ "Id": "Policy1234567890123", "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1234567890123", "Action": [ "s3:PutObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/Dave" ] } } ] }
如果 IAM 使用者嘗試修改物件的 ACL,則使用者會收到**「存取遭拒」**錯誤。
其他政策錯誤
檢查儲存貯體政策或 IAM 使用者政策中是否有額外的空格、ARN 錯誤或其他錯字錯誤。
如果 IAM 政策在 ARN 中有額外的空格,則 ARN 會遭到錯誤評估,並且使用者會收到**「存取遭拒」**錯誤。例如,在 ARN 中具有額外空格的 IAM 策略:arn:aws:s3::: DOC-EXAMPLE-BUCKET/* 會被評估為 arn:aws:s3:::%20DOC-EXAMPLE-BUCKET/。
確認 IAM 許可界限允許存取 Amazon S3
確認在 IAM 實體上設定的 IAM 許可界線允許存取 Amazon S3。
檢查儲存貯體的 Amazon S3 封鎖公開存取設定
如果您在允許的公開讀取請求中收到**「存取遭拒」**錯誤,請檢查該帳戶和儲存貯體上儲存貯體的 Amazon S3 封鎖公開存取設定。 這些設定可以覆寫允許公開讀取存取權的權限。
檢閱使用者憑證
檢閱您的使用者設定為存取 Amazon S3 的憑證。使用者必須設定 AWS SDK 和 AWS CLI,以使用具有您儲存貯體存取權的 IAM 身分憑證。
對於 AWS CLI,請執行 configure 命令以檢查憑證:
aws configure list
如果使用者使用 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體存取您的儲存貯體,請驗證執行個體是否使用正確的角色。連線至執行個體,然後執行 get-caller-identity 命令:
aws sts get-caller-identity
檢閱臨時安全性憑證
如果使用者從 AWS Security Token Service (AWS STS) 授予的臨時安全性憑證收到**「存取遭拒」**錯誤,請檢閱相關聯的工作階段政策。當管理員使用 AssumeRole API 呼叫或 assume-role 命令建立臨時安全性憑證時,管理員可以傳遞工作階段專屬的政策。
若要尋找相關聯的工作階段政策,請在與失敗存取要求相同時間範圍內的 AWS CloudTrail 事件歷史記錄中尋找 AssumeRole 事件。然後,檢閱 CloudTrail 日誌中的 requestParameters 欄位,以尋找 policy 或 policyArns 參數。確認相關聯政策或政策 ARN 授予必要的 Amazon S3 權限。
例如,下列 CloudTrail 日誌片段顯示臨時憑證包含內嵌工作階段政策,該政策會將 s3:GetObject 權限授予 DOC-EXAMPLE-BUCKET:
"requestParameters": { "roleArn": "arn:aws:iam::123412341234:role/S3AdminAccess", "roleSessionName": "s3rolesession", "policy": "{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"] }] }" }
確認 Amazon VPC 端點政策具有存取 S3 資源的正確權限
如果您的使用者使用透過 Amazon Virtual Private Cloud (Amazon VPC) 端點路由的 EC2 執行個體來存取您的儲存貯體,請檢查 VPC 端點政策。
例如,以下 VPC 端點政策僅允許存取 DOC-EXAMPLE-BUCKET。使用 VPC 端點傳送請求的使用者,無法存取任何其他儲存貯體:
{ "Id": "Policy1234567890123", "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1234567890123", "Action": [ "s3:GetObject", "s3:PutObject", "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Principal": "*" } ] }
檢閱 Amazon S3 存取點的 IAM 政策
如果您使用 Amazon S3 存取點來管理儲存貯體的存取權,請檢閱存取點的 IAM 政策。
您在存取點政策中授與的權限,只有在相關聯儲存貯體政策也允許相同存取權時才有效。確認儲存貯體政策和存取點政策是否授予正確的權限。
確認物件位於儲存貯體內,而且物件名稱不包含特殊字元
檢查請求的物件是否位於儲存貯體中。否則,請求將無法找到物件,且 Amazon S3 會假設該物件不存在。如果您沒有s3:ListBucket 權限,您會收到**「存取遭拒」**錯誤 (而非 **404「找不到」**錯誤)。
**注意:**您可以透過其他的程序來擷取名稱中有特殊字元的物件。
執行 head-object AWS CLI 命令,檢查是物件否位於儲存貯體內:
aws s3api head-object --bucket DOC-EXAMPLE-BUCKET --key exampleobject.jpg
**注意:**將 DOC-EXAMPLE-BUCKET 取代為您的儲存貯體名稱。
如果物件位於儲存貯體中,則**「存取遭拒」錯誤不會遮罩「404 找不到」錯誤。檢查其他組態需求,以解決「存取遭拒」**錯誤。
如果物件不存在於儲存貯體中,則**「存取遭拒」錯誤將會遮罩「404 找不到」**錯誤。解決與遺失物件相關的問題。
檢查 AWS KMS 加密組態
如果 IAM 使用者擁有對物件的完整權限,但仍無法存取物件,請檢查該物件是否具有 AWS Key Management Service (KMS) 加密 (SSE-KMS)。您可以使用 Amazon S3 主控台來檢視物件的屬性,並檢查物件的 SSE-KMS 資訊。
如果物件是使用客戶自管金鑰加密,則 KMS 金鑰政策必須允許您執行 kms:GenerateDataKey 或 kms:Decrypt 動作。如需詳細資訊,請參閱允許存取 AWS 帳戶並啟用 IAM 政策。
如果 IAM 使用者屬於與 AWS KMS key 不同的帳戶,請修改 IAM 政策以授與 Kms:Decrypt 權限。例如,若要下載 SSE-KMS 物件,您必須在金鑰政策和 IAM 政策中指定 kms:Decrypt 權限。如需有關 IAM 使用者與 KMS 金鑰之間的跨帳戶存取權詳細資訊,請參閱允許其他帳戶的使用者使用 KMS 金鑰。
對於啟用「申請者付款」的儲存貯體,請確認使用者指定了 request-payer 參數
如果您的儲存貯體已啟用「申請者付款」,則其他帳戶的使用者在向您的儲存貯體傳送請求時,必須指定 request-payer 參數。若要確認您是否啟用「申請者付款」,請使用 Amazon S3 主控台檢視儲存貯體的屬性。
在下列範例中,AWS CLI 命令包含存取跨帳戶儲存貯體 (具有「申請者付款」) 的正確參數:
aws s3 cp exampleobject.jpg s3://DOC-EXAMPLE-BUCKET/exampleobject.jpg --request-payer requester
檢查您的 AWS Organizations SCP
如果您使用 AWS Organizations,請檢查服務控制政策 (SCP) 以確保允許存取 Amazon S3。SCP 會指定受影響帳戶的權限上限。例如,下列 SCP 明確拒絕存取 Amazon S3,並造成**「存取遭拒」**錯誤:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3:*", "Resource": "*" } ] }
如需有關 AWS Organizations 功能的詳細資訊,請參閱為具有 AWS Organizations 的組織啟用所有功能。
相關資訊

相關內容
- 已提問 4 個月前lg...
- 已提問 8 個月前lg...
- AWS 官方已更新 4 年前
- AWS 官方已更新 4 年前
- AWS 官方已更新 3 年前
- AWS 官方已更新 2 年前