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

2 分的閱讀內容
0

我希望我的 Amazon Simple Storage Service (Amazon S3) 儲存貯體中的某些物件可被公開讀取。但我不想變更位於同一儲存貯體中的其他物件的許可。

簡短描述

透過下列其中一種方式授予公開讀取權限:

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

重要: 若儲存貯體的 S3 物件擁有權設定為強制執行的儲存貯體擁有者,則無法透過儲存貯體和物件 ACL 授予公開存取權。在大多數情況下,不需要使用 ACL 對物件和儲存貯體授予許可。反之,請使用 AWS Identity and Access Management (IAM) 政策和 S3 儲存貯體政策授予許可給物件和儲存貯體。

依預設,新的儲存貯體、存取點和物件不允許公開存取。如果已針對帳戶內的所有儲存貯體啟用封鎖公開存取,則會顯示「儲存貯體和物件不公開」訊息。如需詳細資訊,請參閱設定帳戶的封鎖公開存取設定

解決方法

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

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

若要一次公開多個物件,請依照下列步驟操作:

警告:將多個物件公開後,沒有一次對多個物件復原此動作的選項。若要移除公開存取權,必須進入 Amazon S3 主控台中的每個物件。然後,從物件的 許可標籤中修改公開存取權。必須對要撤消授予的公開存取權限的每個物件執行此動作。在公開物件之前,請務必仔細檢查物件清單。

1.    開啟 Amazon S3 主控台

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

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

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

5.    選擇動作,然後選擇公開

6.    在公開對話方塊中,確認物件清單正確。

7.    選擇設為公有

若要公開個別物件,可以重複上一個程序,或按照下列步驟操作:

1.    在 Amazon S3 主控台中,選擇包含要更新的物件的儲存貯體。

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

3.    選擇物件名稱上的連結來開啟物件。

4.    選擇許可標籤。

5.    選擇編輯

6.    在每個人區段中,選取物件讀取

7.    選取我瞭解這些變更對此物件的影響

8.    選擇儲存變更

使用 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 帳戶擁有者,並將讀取權限授予其他所有人:

**注意:**對於 --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

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

**警告:**下列儲存貯體政策授予對特定字首下所有物件的公開讀取權限。在使用此儲存貯體政策之前,請確認您的使用案例支援字首中的所有可公開讀取物件。此政策不授予字首的清單存取權。僅物件路徑已知時,使用者才可存取物件。存取字首中不存在的物件時,使用者會收到 403 錯誤。

若要授予對特定物件字首的公開讀取權限,請新增儲存貯體,如下所示:

{
  "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

**注意:**視物件的字首而定,授予公開讀取權限不需要複製物件。

相關資訊

設定 ACL

AWS 官方
AWS 官方已更新 2 年前