Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
其他 AWS 帳戶的 IAM 使用者嘗試存取我的 Amazon S3 儲存區時出現「Access Denied」錯誤,如何對此問題進行疑難排解?
我的 Amazon Simple Storage Service (Amazon S3) 儲存貯體政策授予另一個 AWS 帳戶完整存取權。但是,當其他帳戶的 AWS Identity and Access Management (IAM) 使用者嘗試存取我的儲存貯體時,他們會收到「Access Denied」錯誤。
簡短描述
如果您的儲存貯體政策已授予其他帳戶存取權,則跨帳戶使用者可能會因以下原因收到 Access Denied 錯誤:
- 使用者的 IAM 政策未授予對儲存貯體的存取權。
- 您已使用 AWS Key Management Service (KMS) 加密物件,而使用者無權存取 AWS KMS key。
- 儲存貯體政策或 IAM 政策中的 Deny 陳述式封鎖使用者的存取。
- Amazon Virtual Private Cloud (Amazon VPC) 端點政策封鎖對儲存貯體的存取。
- AWS Organizations 服務控制政策 (SCP) 封鎖對儲存貯體的存取。
- 物件不屬於擁有該儲存貯體的帳戶。
- 您已為 Amazon S3 儲存貯體啟用了請求者付款。
- 您已傳遞封鎖存取儲存貯體的工作階段政策。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
使用者的 IAM 政策未授予對儲存貯體的存取權
對於跨帳户存取權,請確定您在使用者帳戶中的 IAM 政策和您帳戶的儲存貯體政策中,授予儲存貯體存取權。
若要將儲存貯體權限新增至使用者帳戶中的 IAM 政策,請完成下列步驟:
- 開啟 IAM console (IAM 主控台)。
- 在導覽窗格中,選取無法存取儲存貯體的 IAM 使用者或角色。
- 在 Permissions policies (權限政策) 中展開各個政策,以檢視其 JSON 政策文件。
- 在包含儲存貯體名稱的 JSON 政策文件中,請確認政策是否允許對儲存貯體執行正確的 S3 動作。
- 如果 IAM 使用者或角色未授予對儲存貯體的存取權,請新增授予正確權限的政策。
以下 IAM 政策範例授予使用者從 DOC-EXAMPLE-BUCKET 下載 GetObject 請求中物件的權限:{ "Version": "2012-10-17", "Statement": [ { "Sid": "ExampleStmt", "Action": "s3:GetObject", "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ] } ] }
**注意:**如果您使用執行個體設定檔或承擔角色,請確定您的政策具有正確的權限。
您使用 AWS KMS 加密物件
如果 IAM 政策 和儲存貯體政策都授予跨帳戶存取權,請檢查儲存貯體是否使用 AWS KMS 預設加密。或者,檢查物件屬性是否有使用 AWS KMS 加密。如果您使用 KMS key 加密了物件,則使用者也必須具有使用金鑰的權限。
若要授與 IAM 使用者下載並上傳至儲存貯體並使用 AWS KMS key 的權限,請完成下列步驟:
-
編輯 KMS key 政策以新增下列陳述式:
{ "Sid": "ExampleStmt", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Jane" }, "Resource": "*" }**注意:**將範例 ARN 替換為您主體的 ARN。
-
如果 AWS KMS key 屬於 IAM 使用者的帳戶,則不需要更新金鑰政策。如果 AWS KMS key 屬於您的帳戶,則必須更新 IAM 使用者的權限才能新增下列 IAM 政策聲明:
{ "Sid": "KMSAccess", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Effect": "Allow", "Resource": "arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd" }**注意:**將範例 KMS key 的 ARN 替換為您 KMS key 的 ARN。
如需詳細資訊,請參閱為什麼跨帳戶使用者在嘗試存取我使用 AWS KMS 客戶自管金鑰加密的 S3 物件時,會收到「Access Denied」錯誤?
政策中的 Deny 陳述式會封鎖使用者的存取
檢查儲存貯體政策和使用者的 IAM 政策,找出是否有明確拒絕使用者存取儲存貯體的陳述式。
若要檢查儲存貯體政策,請完成以下步驟:
- 開啟 Amazon S3 console (Amazon S3 主控台)。
- 在儲存貯體清單中,選取您想檢查政策的儲存貯體。
- 選擇 Permissions (權限) 索引標籤。
- 在 Bucket policy (儲存貯體政策) 中,檢查具有 "Effect": "Deny" 的陳述式。
- 修改儲存貯體政策,以移除任何拒絕使用者存取儲存貯體的 "Effect": "Deny" 陳述式。
若要檢查使用者的 IAM 政策,請完成下列步驟:
- 開啟 IAM console (IAM 主控台)。
- 在導覽窗格中,選取無法存取儲存貯體的 IAM 使用者或角色。
- 在 Permissions policies (權限政策) 中,展開每個政策以檢視 JSON 政策文件。
- 在與 S3 儲存貯體相關的 JSON 政策文件中,檢查包含 "Effect": "Deny" 的陳述式。
- 修改使用者的 IAM 權限策略,以移除拒絕使用者存取儲存貯體的 "Effect": "Deny" 陳述式。
VPC 端點政策會封鎖對儲存貯體的存取
如果使用者透過 VPC 端點存取具有 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體的儲存貯體,請檢查 VPC 端點政策。確認 VPC 端點政策是否包含存取 S3 儲存貯體的正確權限。
以下 VPC 端點政策範例允許存取 DOC-EXAMPLE-BUCKET:
{ "Id": "Policy1234567890123", "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1234567890123", "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Principal": "*" } ] }
**警告:**元素 "Principal": "*" 會授予每個人使用 VPC 端點存取儲存貯體的權限。請務必根據您的使用案例,限制 Principal (主體) 值的範圍。
組織 SCP 封鎖對儲存貯體的存取
如果使用者的帳戶使用「組織」,請檢查 SCP 中是否有 Deny 陳述式封鎖對該儲存貯體的存取。
下列範例政策明確拒絕對 Amazon S3 的存取:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3:*", "Resource": "*" } ] }
物件不屬於擁有該儲存貯體的 AWS 帳戶
預設情況下,上傳物件的帳戶擁有該物件,即使該儲存貯體是由另一個帳戶擁有。儲存貯體的權限不會自動套用至其他帳戶擁有的物件。
若要解決 S3 物件擁有權的 Access Denied 錯誤,請使用下列最佳實務:
- 套用 S3 物件擁有權的儲存貯體擁有者強制設定,以關閉儲存貯體的存取控制清單 (ACL)。
- 如果您不想關閉 ACL 來強制執行對新物件的物件擁有權,請套用儲存貯體擁有者偏好設定。請確定您更新儲存貯體政策,以要求對儲存貯體的所有 PUT 請求都使用 bucket-owner-full-control 的標準 ACL。物件擁有者可以執行以下 put-object-acl 來授予儲存貯體擁有者存取權:
**注意:**若要存取物件,物件擁有者必須明確授予儲存貯體擁有者存取權。使用物件擁有者帳戶來執行上述命令。aws s3api put-object-acl --bucket examplebucket --key keyname --acl bucket-owner-full-control
您已開啟「請求者付款」
如果您已為儲存貯體啟用請求者付費,則其他帳戶的使用者必須指定 x-amz-request-payer 參數。
使用者必須執行下列動作:
- 對於 DELETE、GET、HEAD、POST 和 PUT 請求,請在標頭中包含 x-amz-request-payer : requester。
- 對於已簽署網址,請在請求中包含 x-amz-request-payer=requester。
- 對於 AWS CLI 命令,請包含 --request-payer 參數:
aws s3 cp exampleobject.jpg s3://DOC-EXAMPLE-BUCKET/exampleobject.jpg --request-payer requester
工作階段政策封鎖了對儲存貯體的存取
請確認您傳遞的工作階段政策不會封鎖對 S3 儲存貯體的存取。
相關資訊
相關內容
- 已提問 8 個月前
- 已提問 2 年前
- 已提問 2 年前
AWS 官方已更新 10 個月前