我該如何變更 Amazon S3 儲存貯體中公開 (匿名) 擁有的物件的擁有權?

1 分的閱讀內容
0

我的 Amazon Simple Storage Service (Amazon S3) 儲存貯體有一個具有公開 (匿名) 擁有權的物件。我想變更物件的擁有權,讓我的 AWS 帳戶擁有該物件。

簡短描述

依預設,上傳 Amazon S3 物件的身分擁有該物件。這表示如果您允許對儲存貯體的公開寫入存取權,則公共 (匿名) 使用者上傳的物件將為公開擁有。為避免發生安全問題,最佳實務是封鎖對您儲存貯體的公開存取權

如果匿名使用者將物件上傳至您的儲存貯體,而您想要變更物件擁有權,請修改物件的存取控制清單 (ACL)。變更物件的 ACL 以授予儲存貯體擁有者 (您的 AWS 帳戶) 物件的完全控制權。

**注意:**您也可以使用 Amazon S3 物件擁有權來控制另一個 AWS 帳戶上傳的物件擁有權

解決方法

若要將物件的擁有權變更為擁有儲存貯體的 AWS 帳戶,請執行下列步驟:

  1. 若要新增物件 ACL,請在 AWS Command Line Interface (AWS CLI) 中執行 put-object-acl 命令。包括含有 bucket-owner-full-control 值的 --acl 選項,以新增授予物件儲存貯體擁有者控制權的 ACL。然後,包括 --no-sign-request 選項,以使用匿名憑證進行請求。完整的 put-object-acl 命令以及您需要的選項類似下列範例:

    aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key awsexampleobject --acl bucket-owner-full-control --no-sign-request

    **注意:**如果您在執行 AWS CLI 命令時收到錯誤訊息,請確保您使用的是最新版本的 AWS CLI

  2. 若要套用擁有權變更,您必須將物件複製到物件本身。為此,請執行 cp 命令:

    aws s3 cp s3://DOC-EXAMPLE-BUCKET/awsexampleobject s3://DOC-EXAMPLE-BUCKET/awsexampleobject --storage-class STANDARD

    **注意:**確保將範例命令中的 --storage-class 值變更為適用於您使用案例的儲存類別。此外,請確保包括物件所需的其他 cp 命令選項

  3. 若要檢查擁有權變更,請執行 get-object-acl 命令:

    aws s3api get-object-acl --bucket DOC-EXAMPLE-BUCKET --key awsexampleobject

    該命令會傳回顯示物件擁有者的輸出:

    {
      "Owner": {
        "DisplayName": "jane",
        "ID": "75050348ef85628a0977bexamplebdbc3062ce76f35cb463345ae65c2608d099"
      },
      "Grants": [
        {
          "Grantee": {
            "DisplayName": "jane",
            "ID": "75050348ef85628a0977bexamplebdbc3062ce76f35cb463345ae65c2608d099",
            "Type": "CanonicalUser"
          },
          "Permission": "FULL_CONTROL"
        }
      ]
    }
  4. 如果您的儲存貯體具有版本控制,則還必須刪除步驟 2 中 cp 命令所產生之物件的先前版本。前一個物件版本具有公開 (匿名) 擁有權。若要刪除此物件版本,請先在儲存貯體上執行 list-object-versions 命令。包括命令的 --prefix 選項,以將結果篩選為具有公開擁有權的物件:

    aws s3api list-object-versions --bucket DOC-EXAMPLE-BUCKET --prefix example.txt

    從命令輸出中,複製具有公開擁有權物件版本的版本 ID。然後,對您要刪除的版本 ID 執行 delete-object 命令:

    aws s3api delete-object --bucket DOC-EXAMPLE-BUCKET --key example.txt --version-id 'example.d6tjAKF1iObKbEnNQkIMPjj'

    **警告:**請仔細檢閱版本 ID,確定其是具有公開擁有權物件版本的版本 ID。如果刪除某物件版本,則無法擷取該物件版本。

相關資訊

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

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