為什麼我無法存取 Amazon S3 儲存貯體中的特定資料夾或檔案?

2 分的閱讀內容
0

我無法存取 Amazon Simple Storage Service (Amazon S3) 儲存貯體中的某個前綴或物件。我可以存取儲存貯體中的其餘資料。

簡短說明

請對拒絕您存取前綴或物件的任何設定檢查下列權限:

  • 前綴或物件的擁有權
  • 儲存貯體政策中的限制
  • AWS Identity and Access Management (IAM) 使用者政策中的限制
  • AWS Key Management Service (AWS KMS) 所加密物件的權限

另請注意下列存取條件:

  • 如果您使用 AWS KMS 金鑰加密物件,則僅有加密該物件的 AWS 帳戶可以讀取該物件。
  • 如果您定義了權限界限和工作階段政策,則可能會影響請求者的最大權限。還可能會影響物件存取。
  • 其他政策,例如 VPC 端點政策服務控制政策 (SCP),可能會指定限制。因此,請檢查這些政策並據此將其予以更新。
  • 您還可以使用 Amazon S3 物件擁有權控制上傳物件的擁有權。如果您將「物件擁有權」設為 BucketOwnerPreferred,則 bucket-owner-full-control 標準 ACL 的帳戶可以寫入轉移至儲存貯體擁有者的物件。

解決方法

前綴或物件的擁有權

依預設,AWS 帳戶上傳 S3 物件時,帳戶會擁有該物件。即使另一個帳戶擁有該儲存貯體也是如此。如果其他帳戶可以上傳到您的儲存貯體,則請按照下列步驟取得您無法存取物件或前綴的權限:

  1. 若要取得您帳戶的 Amazon S3 正規 ID,請執行此 AWS Command Line Interface (AWS CLI) 命令:

    aws s3api list-buckets --query Owner.ID
  2. 取得擁有您無法存取物件之帳戶的 Amazon S3 正規 ID:

    aws s3api list-objects --bucket DOC-EXAMPLE-BUCKET --prefix index.html
  3. 若正規 ID 不符,則您 (儲存貯體擁有者) 不會擁有該物件。若為個別物件,物件擁有者可以使用此 put-object-acl 命令來授予您完整控制權:

    aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key object-name --acl bucket-owner-full-control

    若為前綴內的物件,物件擁有者在作業過程中必須重新複製前綴,並授予您物件的完整控制權。例如,物件擁有者可以執行這個包含 --acl bucket-owner-full-control 參數的 cp 命令:

    aws s3 cp s3://DOC-EXAMPLE-BUCKET/abc/ s3://DOC-EXAMPLE-BUCKET/abc/ --acl bucket-owner-full-control --recursive --storage-class STANDARD

    提示: 您可以使用儲存貯體政策,要求其他帳戶將其上傳至儲存貯體的物件擁有權授予您。

儲存貯體政策中的限制

  1. 開啟 Amazon S3 主控台

  2. 從儲存貯體清單中,開啟包含您想要檢閱政策的儲存貯體。

  3. 選擇「權限」索引標籤。

  4. 選擇「儲存貯體政策」。

  5. 搜尋 "Effect": "Deny" 陳述式。然後,檢閱這些陳述式,瞭解您無法存取的前綴或物件的參考。例如,此儲存貯體政策拒絕每個人存取 DOC-EXAMPLE-BUCKET 中的 abc/* 前綴:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "StatementPrefixDeny",
          "Effect": "Deny",
          "Principal": {
            "AWS": "*"
          },
          "Action": "s3:*",
          "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/abc/*"
        }
      ]
    }
  6. 修改儲存貯體政策以編輯或移除任何不正確地拒絕您存取前綴或物件的 "Effect": "Deny" 陳述式。

IAM 使用者政策中的限制

  1. 開啟 IAM 主控台

  2. 從主控台開啟您用來存取前綴或物件的 IAM 使用者或角色。

  3. 在 IAM 使用者或角色的「權限」索引標籤中,展開每項政策以檢視其 JSON 政策文件。

  4. 在 JSON 政策文件中,搜尋與 Amazon S3 存取相關的政策。然後,在這些政策中搜尋任何封鎖您存取前綴或物件的 "Effect": "Deny" 陳述式。

    例如,下列 IAM 政策具有 "Effect": "Deny" 陳述式,其會阻止 IAM 身分存取 DOC-EXAMPLE-BUCKET 內的前綴 abc/*。該政策也具有 "Effect": "Allow" 陳述式,其會授予 DOC-EXAMPLE-BUCKET 的存取權。儘管有整個儲存貯體的 Allow 陳述式,但明確 Deny 陳述式會防止 IAM 身分存取前綴 abc/*

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "StatementPrefixDeny",
          "Effect": "Deny",
          "Action": "s3:GetObject",
          "Resource": [
            "arn:aws:s3:::DOC-EXAMPLE-BUCKET/abc/*"
          ]
        },
        {
          "Sid": "StatementFullPermissionS3",
          "Effect": "Allow",
          "Action": "s3:GetObject",
          "Resource": [
            "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
            "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
          ]
        }
      ]
    }
  5. 修改政策以編輯或移除任何不正確地拒絕您存取前綴或物件的 "Effect": "Deny" 陳述式。

AWS KMS 所加密物件的權限

如果使用 AWS KMS 金鑰加密物件,則您同時需要該物件和金鑰的權限。檢查您是否因為需要 AWS KMS 金鑰的權限而無法存取物件:

  1. 使用 Amazon S3 主控台以檢視內容,該內容為您無法存取物件中的其中一個。檢閱物件的加密內容。

  2. 如果使用自訂 AWS KMS 金鑰加密物件,則請檢閱金鑰政策。確認政策允許您的 IAM 身分執行下列動作:

    "Action": ["kms:Decrypt"]
  3. 如果您的 IAM 身分遺失任何這些動作的權限,則請修改金鑰政策以授予遺失的權限。

**重要事項:**如果您的 IAM 身分和 AWS KMS 金鑰屬於不同的帳戶,則請驗證您是否具有適當的權限。IAM 和金鑰政策都必須將必要 AWS KMS 動作的權限授予您。

相關資訊

為什麼我無法存取由另一個 AWS 帳戶上傳至 Amazon S3 儲存貯體的物件?

如何授予 Amazon S3 儲存貯體中特定資料夾的使用者存取權?

從 Amazon S3 下載 KMS 加密物件時,我是否需要指定 AWS KMS 金鑰?

AWS 官方
AWS 官方已更新 6 個月前