如何授予對 Amazon S3 儲存貯體中部分物件的公開讀取存取權?
我希望我的 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
**注意:**視物件的字首而定,授予公開讀取權限不需要複製物件。
相關資訊
相關內容
- 已提問 9 個月前lg...
- 已提問 3 個月前lg...
- 已提問 9 個月前lg...
- 已提問 1 年前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前