其他 AWS 帳戶的 IAM 使用者嘗試存取我的 Amazon S3 儲存區時出現「存取遭拒」錯誤,如何對此問題進行疑難排解?
我的 Amazon Simple Storage Service (Amazon S3) 儲存貯體政策授予另一個 AWS 帳戶完整存取權。但是,當其他帳戶的 AWS Identity and Access Management (IAM) 使用者嘗試存取我的儲存貯體時,他們會收到「存取遭拒」錯誤。
簡短描述
如果您的儲存貯體政策已授予其他帳戶存取權,則跨帳戶使用者可能會因以下原因收到存取遭拒錯誤:
- 使用者的 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 物件時,會收到拒絕存取錯誤?
政策中的 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 物件擁有權的存取遭拒錯誤,請使用下列最佳做法:
- 套用 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 儲存貯體的存取。
相關資訊
相關內容
- 已提問 1 年前
- 已提問 2 年前
- 已提問 4 個月前
