跳至內容

為什麼跨帳戶使用者在存取我使用 AWS KMS 客戶自管金鑰加密的 Amazon S3 物件時,會收到「Access Denied」錯誤?

2 分的閱讀內容
0

我想要解決使用者從另一個 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 版本

您會收到此錯誤的原因如下:

若要解決此錯誤,請確認 IAM 使用者或角色具備 s3:GetBucketPolicy 權限以檢視儲存貯體政策,並具備 s3:PutBucketPolicy 權限以編輯該政策。如果沒有 IAM 使用者政策可授予您存取權,請新增一個。如果您沒有必要的權限,請使用另一個具有儲存貯體存取權的 IAM 身分,並編輯儲存貯體政策。如果沒有人可以存取儲存貯體政策,請使用 delete-bucket-policy AWS CLI 命令刪除該政策,然後重新建立。

如果您必須新增公有讀取政策,請關閉儲存貯體的 Amazon S3 封鎖公開存取功能。如果您使用 AWS Organizations,請確認沒有任何服務控制政策明確拒絕 Amazon S3 動作。同時,請確認您可以為您的作業新增例外。

解決方法

檢查您對 s3:GetBucketPolicy 與 s3:PutBucketPolicy 的權限

若要檢查您的權限,請完成下列步驟:

  1. 開啟 IAM console (IAM 主控台)。
  2. 選取用於存取儲存貯體政策的身分,例如 User (使用者) 或 Role (角色)。
  3. 選取您用來存取儲存貯體政策的 IAM 身分名稱。
  4. 在 IAM 身分的 Permissions (權限) 索引標籤中,展開每個政策以檢視其 JSON 政策文件。
  5. 在 JSON 政策文件中,搜尋與 Amazon S3 存取相關的政策。接著,確認您對該儲存貯體具有 s3:GetBucketPolicys3:PutBucketPolicy 動作的權限。
    下列範例 IAM 政策允許 IAM 身分在 DOC-EXAMPLE-BUCKET: 上執行 s3:GetBucketPolicys3:PutBucketPolicy 動作
    {  "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:::*"  
        }  
      ]  
    }
    **注意:**前述 IAM 政策中的 AccessS3Console 陳述式會授予 Amazon S3 主控台存取權。該陳述式並非專門用於儲存貯體政策變更。
  6. 在 JSON 政策文件中,搜尋包含 "Effect": "Deny" 的陳述式。接著,確認這些陳述式不會拒絕您的 IAM 身分對 s3:GetBucketPolicys3:PutBucketPolicy 的存取。
  7. 請務必在政策的 Resource (資源) 區段中包含儲存貯體的 Amazon Resource Name (ARN)。在前述範例中,ARN 為 aws:s3:::DOC-EXAMPLE-BUCKET
    注意: s3:GetBucketPolicys3:PutBucketPolicy 為儲存貯體層級動作。
  8. 請檢查您是否在 IAM 政策中套用了任何全域條件,例如 aws:SourceIP,以限制 s3:GetBucketPolicys3:PutBucketPolicy 動作。如果這些條件限制了存取,請將其移除或更新。

如果儲存貯體政策不存在,請新增儲存貯體政策

如果您找不到可授予 s3:GetBucketPolicys3:PutBucketPolicy 權限的政策,請新增一個政策,將這些權限授予您的 IAM 身分。如果您找到拒絕 s3:GetBucketPolicys3:PutBucketPolicy 存取的政策,請移除這些政策。如需修改 IAM 權限的指示,請參閱變更 IAM 使用者的權限

使用具有儲存貯體存取權的另一個 IAM 身分來修改儲存貯體政策

若要修改儲存貯體政策,請完成下列步驟:

  1. 開啟 Amazon S3 console (Amazon S3 主控台)。
  2. 從儲存貯體清單中,開啟您要變更其儲存貯體政策的儲存貯體。
  3. 選擇 Permissions (權限) 索引標籤。
  4. 選擇 Bucket policy (儲存貯體政策)。
  5. 搜尋包含 "Effect": "Deny" 的陳述式。
  6. 編輯儲存貯體政策,以更新任何 "Effect": "Deny" 陳述式,其拒絕 IAM 身份存取 s3:GetBucketPolicys3:PutBucketPolicy。如需相關指示,請參閱使用 Amazon S3 主控台新增儲存貯體政策中的建立或編輯儲存貯體政策一節。
  7. 請檢查儲存貯體政策是否包含例如 aws:PrincipalArn 等條件,以限制您的 IAM 實體對 s3:GetBucketPolicys3:PutBucketPolicy 動作的存取。如果這些條件限制了存取,請將其移除或更新。

如果儲存貯體政策拒絕所有人的存取,請刪除並重新建立該政策

如果儲存貯體政策拒絕所有人存取 s3:GetBucketPolicys3: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": "*"  
    }  
  ]  
}
AWS 官方已更新 3 個月前