Get Hands-on with Amazon EKS - Workshop Event Series
Whether you're taking your first steps with Kubernetes or you're an experienced practitioner looking to sharpen your skills, our Amazon EKS workshop series delivers practical, real-world experience that moves you forward. Learn directly from AWS solutions architects and EKS specialists through hands-on sessions designed to build your confidence with Kubernetes. Register now and start building with Amazon EKS!
為什麼跨帳戶使用者在存取我使用 AWS KMS 客戶自管金鑰加密的 Amazon S3 物件時,會收到「Access Denied」錯誤?
我想要解決使用者從另一個 AWS 帳戶存取我的 Amazon Simple Storage Service (Amazon S3) 儲存貯體時,收到的「Access Denied」錯誤。我使用 AWS Key Management Service (AWS KMS) 客戶自管金鑰來加密我的 Amazon S3 儲存貯體。
簡短說明
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
您會收到此錯誤的原因如下:
- 您的 AWS Identity and Access Management (IAM) 使用者或角色沒有 s3:GetBucketPolicy 與 s3:PutBucketPolicy API 呼叫的權限。
- 儲存貯體政策拒絕您的 IAM 身分對 s3:GetBucketPolicy 與 s3:PutBucketPolicy 的權限。
- 您已為儲存貯體啟用 Amazon S3 封鎖公開存取功能。
- AWS Organizations 服務控制政策不允許存取 Amazon S3。
若要解決此錯誤,請確認 IAM 使用者或角色具備 s3:GetBucketPolicy 權限以檢視儲存貯體政策,並具備 s3:PutBucketPolicy 權限以編輯該政策。如果沒有 IAM 使用者政策可授予您存取權,請新增一個。如果您沒有必要的權限,請使用另一個具有儲存貯體存取權的 IAM 身分,並編輯儲存貯體政策。如果沒有人可以存取儲存貯體政策,請使用 delete-bucket-policy AWS CLI 命令刪除該政策,然後重新建立。
如果您必須新增公有讀取政策,請關閉儲存貯體的 Amazon S3 封鎖公開存取功能。如果您使用 AWS Organizations,請確認沒有任何服務控制政策明確拒絕 Amazon S3 動作。同時,請確認您可以為您的作業新增例外。
解決方法
檢查您對 s3:GetBucketPolicy 與 s3:PutBucketPolicy 的權限
若要檢查您的權限,請完成下列步驟:
- 開啟 IAM console (IAM 主控台)。
- 選取用於存取儲存貯體政策的身分,例如 User (使用者) 或 Role (角色)。
- 選取您用來存取儲存貯體政策的 IAM 身分名稱。
- 在 IAM 身分的 Permissions (權限) 索引標籤中,展開每個政策以檢視其 JSON 政策文件。
- 在 JSON 政策文件中,搜尋與 Amazon S3 存取相關的政策。接著,確認您對該儲存貯體具有 s3:GetBucketPolicy 與 s3:PutBucketPolicy 動作的權限。
下列範例 IAM 政策允許 IAM 身分在 DOC-EXAMPLE-BUCKET: 上執行 s3:GetBucketPolicy 與 s3:PutBucketPolicy 動作
**注意:**前述 IAM 政策中的 AccessS3Console 陳述式會授予 Amazon S3 主控台存取權。該陳述式並非專門用於儲存貯體政策變更。{ "Version": "2012-10-17", "Statement": [ { "Sid": "ModifyBucketPolicy", "Action": [ "s3:GetBucketPolicy", "s3:PutBucketPolicy" ], "Effect": "Allow", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET" }, { "Sid": "AccessS3Console", "Action": [ "s3:GetBucketLocation", "s3:ListAllMyBuckets" ], "Effect": "Allow", "Resource": "arn:aws:s3:::*" } ] } - 在 JSON 政策文件中,搜尋包含 "Effect": "Deny" 的陳述式。接著,確認這些陳述式不會拒絕您的 IAM 身分對 s3:GetBucketPolicy 或 s3:PutBucketPolicy 的存取。
- 請務必在政策的 Resource (資源) 區段中包含儲存貯體的 Amazon Resource Name (ARN)。在前述範例中,ARN 為 aws:s3:::DOC-EXAMPLE-BUCKET。
注意: s3:GetBucketPolicy 和 s3:PutBucketPolicy 為儲存貯體層級動作。 - 請檢查您是否在 IAM 政策中套用了任何全域條件,例如 aws:SourceIP,以限制 s3:GetBucketPolicy 和 s3:PutBucketPolicy 動作。如果這些條件限制了存取,請將其移除或更新。
如果儲存貯體政策不存在,請新增儲存貯體政策
如果您找不到可授予 s3:GetBucketPolicy 或 s3:PutBucketPolicy 權限的政策,請新增一個政策,將這些權限授予您的 IAM 身分。如果您找到拒絕 s3:GetBucketPolicy 或 s3:PutBucketPolicy 存取的政策,請移除這些政策。如需修改 IAM 權限的指示,請參閱變更 IAM 使用者的權限。
使用具有儲存貯體存取權的另一個 IAM 身分來修改儲存貯體政策
若要修改儲存貯體政策,請完成下列步驟:
- 開啟 Amazon S3 console (Amazon S3 主控台)。
- 從儲存貯體清單中,開啟您要變更其儲存貯體政策的儲存貯體。
- 選擇 Permissions (權限) 索引標籤。
- 選擇 Bucket policy (儲存貯體政策)。
- 搜尋包含 "Effect": "Deny" 的陳述式。
- 編輯儲存貯體政策,以更新任何 "Effect": "Deny" 陳述式,其拒絕 IAM 身份存取 s3:GetBucketPolicy 或 s3:PutBucketPolicy。如需相關指示,請參閱使用 Amazon S3 主控台新增儲存貯體政策中的建立或編輯儲存貯體政策一節。
- 請檢查儲存貯體政策是否包含例如 aws:PrincipalArn 等條件,以限制您的 IAM 實體對 s3:GetBucketPolicy 和 s3:PutBucketPolicy 動作的存取。如果這些條件限制了存取,請將其移除或更新。
如果儲存貯體政策拒絕所有人的存取,請刪除並重新建立該政策
如果儲存貯體政策拒絕所有人存取 s3:GetBucketPolicy、s3:PutBucketPolicy,或所有 Amazon S3 動作 (s3:*),請刪除該儲存貯體政策。如果您不慎將自己鎖定而無法刪除儲存貯體政策,請重新取得儲存貯體的存取權。刪除儲存貯體政策後,您可以建立新的政策。
關閉 Amazon S3 封鎖公開存取
如果您的儲存貯體政策授予公開存取權,請為該儲存貯體關閉 Amazon S3 封鎖公開存取。如需詳細資訊,請參閱封鎖對 Amazon S3 儲存體的公開存取以及「公開」的意義。
**注意:**為了防止對私有儲存貯體的公開存取,請在 AWS 帳戶層級停用之前,先為您的儲存貯體啟用 Amazon S3 封鎖公開存取。
針對 AWS Organizations,請刪除不允許 Amazon S3 存取的服務控制政策
如果您使用 AWS Organizations,請查看您的服務控制政策 (SCP)。尋找所有明確拒絕 s3:PutBucketPolicy 動作或其他 Amazon S3 政策動作的陳述式。當組織不需要這些政策時,請刪除對 s3:* 動作套用 Deny 效果的 SCP。
以下範例政策會拒絕所有 Amazon S3 動作的存取權:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3:*", "Resource": "*" } ] }
相關內容
- 已提問 3 年前
- 已提問 2 年前

