跳至內容

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

3 分的閱讀內容
0

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

簡短描述

使用下列其中一種方式來授予 S3 儲存貯體中物件的公開讀取存取權:

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

重要: 當您將 S3 物件擁有權設定為儲存貯體上強制執行的儲存貯體擁有者時,您不能使用儲存貯體和物件 ACL 來授予公開存取權限。大多數情況下,您不需要 ACL 來授予物件和儲存貯體的權限。而是使用 AWS 身分存取和管理 (IAM) 政策和 S3 儲存貯體政策來授予權限。

依預設,新的儲存貯體、存取點和物件不允許公開存取。如果您對 AWS 帳戶內所有儲存貯體設定封鎖公開存取權,那麼您會收到「儲存貯體和物件不公開」訊息。

若要存取公開儲存貯體,請確保您的網路沒有防火牆或沒有設定封鎖到儲存貯體網域的傳出流量。

解決方法

**重要:**依預設,在新的 S3 儲存貯體上,封鎖公開存取設定會設為 True。開始之前,請先在帳戶層級或儲存貯體層級將封鎖公開存取設定變更為 False

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

同時公開多個物件

警告: 在公開物件之前,請務必仔細檢查物件。將多個物件公開後,您將無法一次對所有物件復原此動作。相反,您必須在每個物件的 Permissions (權限) 索引標籤中修改 Public access (公開存取權)。

若要一次公開多個物件,請完成下列步驟:

  1. 開啟 Amazon S3 主控台,然後選擇要公開的物件。
  2. 選擇 Actions (動作),然後選擇 Make public (設為公開)。
  3. 設為公開對話方塊中,確認物件清單正確。
  4. 選擇 Make public (設為公開)。

將一個物件公開

若要只公開一個物件,請重複上一個程序或完成下列步驟:

  1. 開啟 Amazon S3 主控台,然後選取要公開的物件的儲存貯體。
  2. Objects (物件) 中,選取物件。
  3. 選擇 Permissions (權限) 索引標籤,然後選擇 Edit (編輯)。
  4. Everyone (每個人) 區段中,選擇 Objects Read (物件讀取)。
  5. 選取 I understand the effects of these changes on this objec (我瞭解這些變更對此物件的影響)。
  6. 選擇 Save changes (儲存變更)。

使用 AWS CLI 更新物件的 ACL

注意: 如果您在執行 AWS CLI 命令時收到錯誤,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

對於已儲存在 Amazon S3 中的物件,您可以執行 put-object-acl 命令來更新物件的 ACL,以便公開讀取存取權:

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

**注意:**將 exampleobject 替換為您的物件。

或者,您也可以執行下列 put-object-acl 命令,將對物件的完全控制權授予帳戶擁有者,並將讀取存取權授予其他所有人:

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

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

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

重要: 在開始之前,請務必查看 Amazon S3物件標記定價。

若要使用政策授予具有特定標籤的物件之公開讀取存取權,請完成下列步驟:

  1. 新增儲存貯體政策,以允許公開讀取任何具有特定標記的物件。例如,下列政策允許對任何具有 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"
                    }
                }
            }
        ]
    }
  2. 將該標記新增至您要設為可公開讀取的物件

  3. 若要檢查物件具有哪些標籤,請在 AWS CLI 中執行 get-object-tagging 命令:

    aws s3api get-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject
  4. 若要將標籤新增至沒有任何標籤的物件,請執行以下 put-object-tagging 命令:

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

    警告: 上述命令將覆寫物件擁有的所有標籤。

  5. 若要將新標籤新增至已有標籤的物件,請執行下列 put-object-tagging 命令:

    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}]'
    

    **注意:**請確保包含新的物件標籤和要保留的舊標籤。

  6. 若要驗證物件的標籤,請再次執行 get-object-tagging 命令:

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

使用對特定前綴授予公開讀取存取權的儲存貯體政策

警告: 下列儲存貯體政策授予對特定前綴下所有物件的公開讀取存取權。在使用此儲存貯體政策之前,請確認您的使用案例支援前綴中的所有可公開讀取物件。以下政策不授予前綴的清單存取權。只有當知道物件路徑時,您的使用者才可存取物件。如果使用者嘗試存取前綴中不存在的物件,則使用者會收到 403 錯誤。

  1. 若要授予對特定物件前綴的公開讀取存取權,請新增以下儲存貯體政策

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "AddPerm",
                "Effect": "Allow",
                "Principal": "*",
                "Action": [
                    "s3:GetObject"
                ],
                "Resource": [
                    "arn:aws:s3:::DOC-EXAMPLE-BUCKET/publicprefix/*"
                ]
            }
        ]
    }
  2. 執行 cp 命令將物件複製到具有公開讀取存取權的前綴:

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

**注意:**如果物件已經具有可公開讀取的前綴,則無需將物件複製到新的前綴。

從受限網路存取公開 S3 儲存貯體或物件

若要從受限網路存取公用 S3 儲存貯體或物件,您可以新增允許從特定 IP 位址範圍存取的儲存貯體政策。以下範例政策允許來自 192.0.2.0/24203.0.113.0/24 CIDR 範圍的 GET 請求:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "192.0.2.0/24",
                        "203.0.113.0/24"
                    ]
                }
            }
        }
    ]
}

相關資訊

設定 ACL

封鎖對您 Amazon S3 儲存空間的公開存取權

AWS 官方已更新 10 個月前