如何授予對 Amazon S3 儲存貯體中某些物件的公開讀取存取權?

上次更新日期: 2021 年 4 月 15 日

我希望我的 Amazon Simple Storage Service (Amazon S3) 儲存貯體中的某些物件可以公開讀取。但是,我不想變更同一儲存貯體中的其他物件的許可。該如何進行?

簡短描述

透過以下其中一種方式啟用公開讀取存取:

  • 使用 Amazon S3 主控台更新物件的存取控制清單 (ACL)
  • 使用 AWS Command Line Interface (AWS CLI) 更新物件的 ACL
  • 使用向特定物件標籤授予公開讀取存取權的儲存貯體政策
  • 使用向特定字首授予公開讀取存取權的儲存貯體政策

解決方案

重要:在開始之前,確認您在帳戶層級l儲存貯體層級沒有任何封鎖公開存取設定。您的設定不得阻止您公開物件。依預設,新的 S3 儲存貯體上的封鎖公開存取設定將設為 True

使用 Amazon S3 主控台更新物件的 ACL

要一次性公開多個物件,請執行以下步驟:

警告:將多個物件設為公開後,將無法同時為多個物件復原此動作。要刪除公開存取,您必須進入 Amazon S3 主控台中的每個物件。然後,從物件的 Permissions (許可) 標籤,修改 Public access (公開存取)。您必須對要復原授予的公開存取的每個物件執行此動作。在將它們公開之前,請務必仔細檢閱物件清單。

1.    開啟 Amazon S3主控台

2.    從儲存貯體清單中,選擇儲存貯體,其中含有您要更新的物件。

3.    導覽至包含物件的資料夾。

4.    從物件清單中,選取您要公開的所有物件。

5.    選擇 Actions (動作),然後選擇 Make public (公開)。

6.    在 Make public (公開) 對話方塊,確認物件清單準確無誤。

7.    選擇 Make public (公開)。

若要使個別物件公開,遵循以下步驟:

1.    從 Amazon S3 主控台,選擇儲存貯體,其中含有您要更新的物件。

2.    導覽至包含物件的資料夾。

3.    選擇物件名稱上的連結,然後開啟物件。

4.    選擇 Permissions (許可) 標籤。

5.    選擇 Edit (編輯)。

6.    在 Everyone (每個人) 區段,選取 Objects Read (物件讀取)。

7.    選取 I understand the effects of these changes on this object (我了解這些變更對這個物件的影響)。

8.    選擇 Save changes (儲存變更)。

使用 AWS CLI 主控台更新物件的 ACL

對於已存放在 Amazon S3 中的物件,您可以執行此命令來更新其 ACL 以進行公開讀取存取:

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key exampleobject --acl public-read

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

或者,您可以執行此命令,授予 AWS 帳戶擁有者完全控制物件的 您可以運行此命令將物件的完全控制權授予 AWS 帳戶擁有者,並向其他所有人授予讀取權:

注意: 對於 --grant-full-control 的值,輸入 帳戶的正式使用者 ID

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key exampleobject --grant-full-control id="008exampleA45666666668889999008853" --grant-read uri=http://acs.amazonaws.com/groups/global/AllUsers

使用向特定物件標籤授予公開讀取存取權的儲存貯體政策

重要:開始之前,請務必檢閱S3 物件標籤的定價

首先,新增一個儲存貯體政策,允許對具有特殊標籤的任何物件進行公開讀取存取。例如,該政策允許對使用鍵值對標記的任何物件進行公開讀取存取 public=yes:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
            "Condition": {
                "StringEquals": {
                    "s3:ExistingObjectTag/public": "yes"
                }
            }
        }
    ]
}

然後,將標籤添加到您想要公開讀取的物件。您可以透過使用 Amazon S3 主控台,新增或管理物件標籤。或者,您可以使用 AWS CLI。

若要檢查物件是否存在任何現有標籤,請執行該 AWS CLI 命令:

aws s3api get-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject

要將標籤新增至沒有任何現有標籤的物件,請執行該命令:

警告:該命令將覆寫任何現有物件標籤。

aws s3api put-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject --tagging 'TagSet={Key=public,Value=yes}'

要將標籤新增至包含現有標籤的物件中,請執行以下命令。確保包括新的物件標籤,以及您想要保留的現有標籤。

aws s3api put-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject --tagging 'TagSet=[{Key=public,Value=n},{Key=exampletag1,Value=one},{Key=exampletag2,Value=two}]'

新增物件標籤後,執行該命令以檢閱所有物件的標籤:

aws s3api get-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject

使用向特定字首授予公開讀取存取權的儲存貯體政策

警告:以下儲存貯體政策授予對特定字首下所有物件的公開讀取存取。在使用此儲存貯體政策之前,請確認您的使用案例支援字首內的所有公開可讀物件。

若要向特定物件字首授予公開讀取存取,請新增儲存貯體政策,類似於以下內容:

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"AddPerm",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::DOC-EXAMPLE-BUCKET/publicprefix/*"]
      }
  ]
}

然後,將物件複製到具有公開讀取存取權的字首中。您可以透過執行類似於以下的命令,將物件複製到字首中:

aws s3 cp s3://DOC-EXAMPLE-BUCKET/exampleobject s3://DOC-EXAMPLE-BUCKET/publicprefix/exampleobject

注意:取決於物件的字首,複製物件不需要授予公開讀取存取權。


此文章是否有幫助?


您是否需要帳單或技術支援?