

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 整理、列出和使用物件
<a name="organizing-objects"></a>

在 Amazon S3 中，您可以使用字首來整理存儲體。字首是儲存貯體中物件的邏輯分組。字首值類似於目錄名稱，可在儲存貯體的相同目錄底下存放類似的資料。當您以程式設計方式上傳物件時，您可以使用字首來整理資料。

在 Amazon S3 主控台中，字首稱為資料夾。您可以透過在 S3 主控台中導航到儲存貯體，來檢視所有物件和資料夾。您也可以檢視每個物件的相關資訊，包括物件屬性。

如需在 Amazon S3 中列出和整理資料的詳細資訊，請參閱下列主題。

**Topics**
+ [使用字首整理物件](using-prefixes.md)
+ [以程式設計方式列出物件索引鍵](ListingKeysUsingAPIs.md)
+ [在 Amazon S3 主控台中使用資料夾整理物件](using-folders.md)
+ [在 Amazon S3 主控台中檢視物件屬性](view-object-properties.md)
+ [使用標籤為物件分類](object-tagging.md)

# 使用字首整理物件
<a name="using-prefixes"></a>

您可以使用字首來整理儲存在 Amazon S3 儲存貯體中的資料。字首是物件索引鍵名稱開頭的字元字串。字首可以是任意長度，以物件索引鍵名稱的最大長度 (1,024 個位元組) 為準。您可以將字首視為以類似於目錄的方式組織資料的一種方式。但是，字首不是目錄。

按字首搜尋會將結果限制為僅以指定字首為開頭的那些索引鍵。分隔符號會導致清單操作將共用常見字首的所有金鑰彙總至單一摘要清單結果。

字首與分隔符號參數的目的，在於協助您以階層方式整理以及瀏覽金鑰。若要執行這項操作，請先為您的儲存貯體選取一個在任何預期的金鑰名稱中都不會出現的分隔符號，例如斜線 (/)。您可以使用另一個字元作為分隔符號。斜線 (/) 字元沒有唯一性，是常見的字首分隔符號。接下來，串連所有包含的階層層級，並以分隔符號分隔每個層級，藉此建構您的金鑰名稱。

例如，如果您存放城市的相關資訊，可能自然而然地會先依洲別、國家/地區，然後再依省/市或州來整理這些城市。因為這些名稱一般不包含標點符號，所以您可以使用斜線 (/) 作為分隔符號。下列範例使用斜線 (/) 分隔符號。
+ Europe/France/Nouvelle-Aquitaine/Bordeaux
+ North America/Canada/Quebec/Montreal
+ North America/USA/Washington/Bellevue
+ North America/USA/Washington/Seattle

如果您以這種方式存放全球每個城市的資料，會很難管理一般金鑰的命名空間。利用清單作業使用 `Prefix` 與 `Delimiter`，您就可以使用已建立的階層來列出資料。例如，若要列出美國的所有州別，請設定 `Delimiter='/'` 和 `Prefix='North America/USA/'`。若要列出您在加拿大擁有資料的所有省份，請設定 `Delimiter='/'` 及 `Prefix='North America/Canada/'`。

如需詳細了解分隔符號、字首和巢狀資料夾，請參閱[字首與巢狀資料夾的差異](https://repost.aws/knowledge-center/s3-prefix-nested-folders-difference)。

## 使用字首和分隔符號列出物件
<a name="prefixes-list-example"></a>

如果發出具有分隔符號的清單要求，可讓您只瀏覽階層中的某一個層級，而略過巢狀於更深層級的金鑰 (可能有數百萬個) 並加以彙總。例如，假設您有具有下列索引鍵的儲存貯體 (*amzn-s3-demo-bucket*)：

`sample.jpg` 

`photos/2006/January/sample.jpg` 

`photos/2006/February/sample2.jpg` 

`photos/2006/February/sample3.jpg` 

`photos/2006/February/sample4.jpg` 

此範本儲存貯體在根層級只有 `sample.jpg` 物件。若只要列出儲存貯體中的根層級物件，可以對儲存貯體傳送使用斜線 (`/`) 分隔符號字元的 GET 要求。Amazon S3 會在回應中傳回 `sample.jpg` 物件金鑰，因為它並未包含 `/` 分隔符號字元。其他所有金鑰則包含此分隔符號字元。Amazon S3 會將這些索引鍵分組，並傳回字首值為 `photos/` 的單一 `CommonPrefixes` 元素，這是從這些索引鍵開頭到第一次出現指定的分隔符號為止的子字串。

**Example**  

```
 1. <ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
 2.   <Name>amzn-s3-demo-bucket</Name>
 3.   <Prefix></Prefix>
 4.   <Marker></Marker>
 5.   <MaxKeys>1000</MaxKeys>
 6.   <Delimiter>/</Delimiter>
 7.   <IsTruncated>false</IsTruncated>
 8.   <Contents>
 9.     <Key>sample.jpg</Key>
10.     <LastModified>2011-07-24T19:39:30.000Z</LastModified>
11.     <ETag>&quot;d1a7fb5eab1c16cb4f7cf341cf188c3d&quot;</ETag>
12.     <Size>6</Size>
13.     <Owner>
14.       <ID>75cc57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a</ID>
15.     </Owner>
16.     <StorageClass>STANDARD</StorageClass>
17.   </Contents>
18.   <CommonPrefixes>
19.     <Prefix>photos/</Prefix>
20.   </CommonPrefixes>
21. </ListBucketResult>
```

如需以程式設計方式列出物件索引鍵的詳細資訊，請參閱「[以程式設計方式列出物件索引鍵](ListingKeysUsingAPIs.md)」。

# 以程式設計方式列出物件索引鍵
<a name="ListingKeysUsingAPIs"></a>

在 Amazon S3 中，索引鍵可以依字首列出。您可以為相關索引鍵名稱選擇共用字首，並使用特殊字元標示這些索引鍵，以劃分層次結構。然後，您可以使用清單操作，以階層方式選取和瀏覽索引鍵。類似於檔案存放在檔案系統目錄中的方式。

Amazon S3 提供清單操作，讓您可以列舉儲存貯體中所包含的金鑰。這些金鑰會依儲存貯體及字首選取列出。例如，假設有一個名為 "`dictionary`" 的儲存貯體，其中包含一個代表所有英文文字的索引鍵。您可以進行呼叫，列出該儲存貯體中以字母 "q" 開頭的所有金鑰。清單結果一律會依 UTF-8 二進位順序傳回。

 SOAP 與 REST 清單操作都會傳回 XML 文件，其中包含相符金鑰的名稱，以及每個金鑰所識別之物件的相關資訊。

**注意**  
 Amazon S3 的 SOAP API 不適用於新客戶，並且將於 2025 年 8 月 31 日接近生命週期結束 (EOL)。我們建議您使用 REST API 或 AWS SDKs。

皆為同一個字首並以特殊分隔符號結尾的金鑰群組，可依該共同字首彙總以方便列出。應用程式如此即可用階層方式組織及瀏覽其金鑰，就像是將檔案分組到檔案系統中不同的目錄一樣。

例如，若要展開 dictionary 儲存貯體以包含英文以外的文字時，可以在每個字前面加上其語言和分隔符號 (例如 "`French/logical`") 來組成索引鍵。使用此命名配置和階層式清單功能，您就可以只擷取法文文字清單。您也可以瀏覽最上層的可用語言清單，而無須逐一查看詞典編纂的所有金鑰。如需列出清單方面的詳細資訊，請參閱「[使用字首整理物件](using-prefixes.md)」。

**REST API**  
也可視應用程式所需，直接傳送 REST 要求。您可以傳送 GET 要求以傳回儲存貯體中的部分或所有物件，或使用挑選準則以傳回儲存貯體中一部分的物件。如需詳細資訊，請參閱《Amazon Simple Storage Service API 參考》**中的 [GET Bucket (列出物件) 第 2 版](https://docs.aws.amazon.com/AmazonS3/latest/API/v2-RESTBucketGET.html)。

**清單實作效率**  
清單效能不會受儲存貯體中的索引鍵總數所影響。它也不會受到 `prefix`、`marker`、`maxkeys` 或 `delimiter` 引數的存在或不存在的影響。

**逐一查看多頁結果**  
因為儲存貯體幾乎可以包含不限數目的金鑰，所以完整的清單查詢結果可能會相當龐大。為管理大型結果集，Amazon S3 API 支援利用分頁方式將其分成多個回應。每個列出金鑰回應最多會傳回含有 1,000 個金鑰的頁面，並指出回應是否遭到截斷。您可以傳送一系列清單金鑰請求，直到您收到所有金鑰為止。 AWS SDK 包裝函式程式庫提供相同的分頁。

## 範例
<a name="ListingKeysUsingAPIs_examples"></a>

列出儲存貯體中的所有物件時請注意，您必須擁有 `s3:ListBucket` 許可。

------
#### [ CLI ]

**list-objects**  
下列範例使用 `list-objects` 命令來顯示指定儲存貯體中所有物件的名稱：  

```
aws s3api list-objects --bucket text-content --query 'Contents[].{Key: Key, Size: Size}'
```
此範例使用 `--query` 引數，將 `list-objects` 的輸出篩選為每個物件的金鑰值和大小  
如需物件的詳細資訊，請參閱 [在 Amazon S3 中使用物件](uploading-downloading-objects.md)。  
+  如需 API 詳細資訊，請參閱《AWS CLI API 參考》**中的 [ListObjects](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/list-objects.html)。

**ls**  
下列範例使用 `ls` 命令，列出儲存貯體中的所有物件和字首。  
若要使用此範例命令，請將 **amzn-s3-demo-bucket** 取代為您的儲存貯體名稱。  

```
$ aws s3 ls s3://amzn-s3-demo-bucket
```
+  如需高階命令 `ls` 的詳細資訊，請參閱《AWS Command Line Interface 使用者指南》**中的[列出儲存貯體和物件](https://docs.aws.amazon.com/cli/latest/userguide/cli-services-s3-commands.html#using-s3-commands-listing-buckets)。

------
#### [ PowerShell ]

**Tools for PowerShell V4**  
**範例 1：此命令會擷取儲存貯體 "test-files" 中所有項目的相關資訊。**  

```
Get-S3Object -BucketName amzn-s3-demo-bucket
```
**範例 2：此命令會從儲存貯體 "test-files" 擷取項目 "sample.txt" 的相關資訊。**  

```
Get-S3Object -BucketName amzn-s3-demo-bucket -Key sample.txt
```
**範例 3：此命令會從儲存貯體 "test-files" 擷取字首為 "sample" 之所有項目的相關資訊。**  

```
Get-S3Object -BucketName amzn-s3-demo-bucket -KeyPrefix sample
```
+  如需 API 詳細資訊，請參閱《AWS Tools for PowerShell Cmdlet 參考 (V4)》**中的 [ListObjects](https://docs.aws.amazon.com/powershell/v4/reference)。

**Tools for PowerShell V5**  
**範例 1：此命令會擷取儲存貯體 "test-files" 中所有項目的相關資訊。**  

```
Get-S3Object -BucketName amzn-s3-demo-bucket
```
**範例 2：此命令會從儲存貯體 "test-files" 擷取項目 "sample.txt" 的相關資訊。**  

```
Get-S3Object -BucketName amzn-s3-demo-bucket -Key sample.txt
```
**範例 3：此命令會從儲存貯體 "test-files" 擷取字首為 "sample" 之所有項目的相關資訊。**  

```
Get-S3Object -BucketName amzn-s3-demo-bucket -KeyPrefix sample
```
+  如需 API 詳細資訊，請參閱《AWS Tools for PowerShell Cmdlet 參考 (V5)》**中的 [ListObjects](https://docs.aws.amazon.com/powershell/v5/reference)。

------

# 在 Amazon S3 主控台中使用資料夾整理物件
<a name="using-folders"></a>

在 Amazon S3 一般用途儲存貯體中，物件是主要資源，而且物件會儲存在儲存貯體中。Amazon S3 一般用途儲存貯體採用單層式結構，而不是您在檔案系統中看到的階層結構。但為了簡化組織，Amazon S3 主控台支援將*資料夾*概念作為分組物件的方法。控制台透過使用分組物件的共享名稱*前置詞*來完成此操作。換句話說，分組物件的名稱使用常見的字串作為字首。此常見字串或共用字首是資料夾名稱。物件名稱也稱為*金鑰*。

例如，您可以在名為 `photos` 的主控台中的一般用途儲存貯體中建立資料夾，並在其中儲存名稱為 `myphoto.jpg` 的物件。物件接著會與金鑰名稱 `photos/myphoto.jpg` 一起存放，而 `photos/` 是字首。

以下是其他兩個範例：
+ 如果您的一般用途儲存貯體中有三個物件 (`logs/date1.txt`、`logs/date2.txt` 與 `logs/date3.txt`)，則主控台會顯示名為 `logs` 的資料夾。如果您在主控台中開啟該資料夾，則會看到三個物件：`date1.txt`、`date2.txt` 與 `date3.txt`。
+ 如果您有名為 `photos/2017/example.jpg` 的物件，則主控台會顯示名為 `photos` 的資料夾，其中包含資料夾 `2017`。資料夾 `2017` 包含物件 `example.jpg`。

資料夾內可以有資料夾，但儲存貯體內不可以有儲存貯體。您可以直接將物件上傳並複製至資料夾。您可以建立、刪除資料夾並將其設為公開，但無法對其重新命名。物件可以從某個資料夾複製至另一個資料夾。

**重要**  
當您在 Amazon S3 主控台建立資料夾時，S3 會建立 0 位元組的物件。此物件索引鍵會設定為您提供的資料夾名稱，加上結尾斜線 (`/`) 字元。例如，在 Amazon S3 主控台，若您在儲存貯體中建立名為 `photos` 的資料夾時，Amazon S3 主控台會建立一個具有索引鍵 `photos/` 的 0 位元組物件。主控台建立此物件以支援資料夾的想法。  
此外，名稱為結尾斜線字元 (`/`) 的任何預先存在物件，都會在 Amazon S3 主控台顯示為資料夾。例如，具有索引鍵名稱 `examplekeyname/` 的物件會在 Amazon S3 主控台顯示為資料夾，而非物件。否則，它的行為就像任何其他物件，可以透過 AWS Command Line Interface (AWS CLI)、 AWS SDKs或 REST API 檢視和操作。此外，您無法使用 Amazon S3 主控台上傳具有索引鍵名稱結尾為正斜線字元 (`/`) 的物件。不過，您可以使用 (`/`)、 AWS SDKs 或 REST API，上傳以結尾斜線 (AWS CLI) 字元 AWS Command Line Interface 命名的物件。  
此外，Amazon S3 主控台不會像顯示其他物件一樣來顯示資料夾物件的內容和中繼資料。使用主控台複製名稱結尾為正斜線字元 (`/`) 的物件時，會在目的地位置中建立新的資料夾，但不會複製物件的資料與中繼資料。此外，物件索引鍵名稱中的正斜線 (`/`) 可能需要特殊處理。如需詳細資訊，請參閱[命名 Amazon S3 物件](object-keys.md)。

若要在目錄儲存貯體中建立資料夾，請上傳資料夾。如需詳細資訊，請參閱[將物件上傳至目錄儲存貯體](directory-buckets-objects-upload.md)。

**Topics**
+ [建立資料夾](#create-folder)
+ [設定公有資料夾](#public-folders)
+ [計算資料夾大小](#calculate-folder)
+ [刪除資料夾](#delete-folders)

## 建立資料夾
<a name="create-folder"></a>

本節說明如何使用 Amazon S3 主控台建立資料夾。

**重要**  
如果儲存貯體政策會防止使用者在沒有標籤、中繼資料或存取控制清單 (ACL) 承授者的情況下，將物件上傳至此儲存貯體，您就無法使用下列程序建立資料夾。您必須改為上傳空的資料夾，並在上傳組態中指定下列設定。

**建立資料夾**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 開啟 Amazon S3 主控台。

1. 在左側導覽窗格中，選擇**一般用途儲存貯體**。

1. 在儲存貯體清單中，選擇要建立資料夾的儲存貯體名稱。

1. 在**物件**索引標籤上，選擇**建立資料夾**。

1. 輸入資料夾的名稱 (例如 **favorite-pics**)。
**注意**  
資料夾名稱受特定限制和準則的約束，並遭視為物件的物件索引鍵名稱的一部分，限制為 1,024 個位元組。如需詳細資訊，請參閱[命名 Amazon S3 物件](object-keys.md)。

1. (選用) 如果您的儲存貯體政策要求使用特定加密金鑰加密物件，則在**伺服器端加密**下，您必須在建立資料夾時選擇**指定加密金鑰**，並指定相同的加密金鑰。否則，資料夾的建立將會失敗。

1. 選擇 **Create folder** (建立資料夾)。

## 設定公有資料夾
<a name="public-folders"></a>

除非您特別要求使用公有資料夾或儲存貯體，否則建議封鎖所有對 Amazon S3 資料夾和儲存貯體的公開存取。將資料夾設為公有時，所有網際網路使用者都可以檢視集合在該資料夾中的所有物件。

您可以在 Amazon S3 主控台中將資料夾設為公有。您也可以建立依字首限制資料存取的儲存貯體政策，將資料夾設為公有。如需詳細資訊，請參閱[Amazon S3 的身分和存取管理](security-iam.md)。

**警告**  
在 Amazon S3 主控台中將資料夾設為公有後，就無法再次將其設為私有。您必須改為為公有資料夾中每個物件分別設定權限，才能改變由公有設為私有。如需詳細資訊，請參閱[設定 ACL](managing-acls.md)。

**Topics**
+ [建立資料夾](#create-folder)
+ [設定公有資料夾](#public-folders)
+ [計算資料夾大小](#calculate-folder)
+ [刪除資料夾](#delete-folders)

## 計算資料夾大小
<a name="calculate-folder"></a>

本節說明如何使用 Amazon S3 主控台計算資料夾大小。

**計算資料夾大小**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)：// 開啟 Amazon S3 主控台。

1. 在左側導覽窗格中，選擇**一般用途儲存貯體**。

1. 在**一般用途儲存貯體**清單中，選擇存放資料夾的儲存貯體名稱。

1. 在**物件**清單中，選取資料夾名稱旁的核取方塊。

1. 選擇 **Actions** (動作)，然後選擇 **Calculate total size** (計算總大小)。

**注意**  
在離開頁面後，資料夾資訊 (包括總大小) 不再可用。如果您想再次查看，則必須再次計算總大小。

**重要**  
當您對儲存貯體內指定的物件或資料夾使用 **Calculate total size** (計算總大小) 動作時，Amazon S3 會計算物件總數和總儲存大小。不過，未完成或進行中的分段上傳，以及先前或非目前的版本不會計入物件總數或總大小中。此動作只會針對儲存在儲存貯體中之每個物件的目前或最新版本，計算物件總數和總大小。  
例如，如果儲存貯體中有兩個物件版本，則 Amazon S3 中的儲存計算器只會將它們視為一個物件。因此，Amazon S3 主控台計算的物件總數可能與 S3 Storage Lens 中顯示的**物件計數**指標，以及 Amazon CloudWatch 指標 (`NumberOfObjects`) 所報告的數量不同。同樣地，總儲存大小也可能與 S3 Storage Lens 中顯示的 **Total Storage** (總儲存量) 指標，以及 CloudWatch 中顯示的 `BucketSizeBytes` 指標不同。

## 刪除資料夾
<a name="delete-folders"></a>

本節說明如何使用 Amazon S3 主控台刪除 S3 儲存貯體中的資料夾。

如需 Amazon S3 功能與定價的相關資訊，請參閱 [Amazon S3](https://aws.amazon.com/s3/)。



**刪除 S3 儲存貯體中的資料夾**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 開啟 Amazon S3 主控台。

1. 在左側導覽窗格中，選擇**一般用途儲存貯體**。

1. 在**一般用途儲存貯體**清單中，選擇要刪除資料夾的儲存貯體名稱。

1. 在**物件**清單中，選取要刪除的資料夾和物件旁邊的核取方塊。

1. 選擇 **刪除**。

1. 在**刪除物件**頁面中，確認您所選要刪除的資料夾和物件名稱，已列示於**指定的物件**下。

1. 在 **Delete objects** (刪除物件) 方塊中，輸入 **delete** 並選擇 **Delete objects** (刪除物件)。

**警告**  
此動作會刪除所有指定的物件。刪除資料夾時，請等待刪除動作完成，然後再將新物件加入至資料夾。否則，系統也可能會刪除新物件。

# 在 Amazon S3 主控台中檢視物件屬性
<a name="view-object-properties"></a>

您可以使用 Amazon S3 主控台來檢視物件的屬性，包括儲存類別、加密設定、標籤和中繼資料。

**檢視物件的屬性**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 開啟 Amazon S3 主控台。

1. 在左側導覽窗格中，選擇**一般用途儲存貯體**或**目錄儲存貯體**。

1. 在儲存貯體清單中，選擇包含該物件的儲存貯體名稱。

1. 在 **Objects** (物件) 清單中，選擇您要檢視其屬性的物件名稱。

   物件的 **Object overview (物件概觀)** 隨即開啟。您可以向下捲動以檢視物件屬性。

1. 在**物件概觀**頁面上，您可以檢視或設定物件的下列屬性。
**注意**  
如果您變更**儲存類別**、**加密**或**中繼資料**，則會建立新物件來取代舊物件。如果啟用 S3 版本控制，則系統會建立物件的新版本，且現有物件會變成較舊的版本。變更屬性的角色也會成為新物件或 (物件版本) 的擁有者。
如果您要為具有使用者定義標籤的物件變更**儲存類別**、**加密**或**中繼資料**屬性，您必須具有 `s3:GetObjectTagging` 許可權。如果您要為沒有使用者定義標籤但大小超過 16 MB 的物件變更這些屬性，您還必須具有 `s3:GetObjectTagging` 許可。  
如果目的地儲存貯體政策拒絕 `s3:GetObjectTagging` 動作，則會更新物件的這些屬性，但會移除物件的使用者定義標籤，而且您會收到錯誤。

   1. **Storage class (儲存類別)** – Amazon S3 中的每個物件都有相關聯的儲存類別。您選擇使用的儲存體方案取決於物件的存取頻率。一般用途儲存貯體中的 S3 物件的預設儲存類別是 STANDARD。目錄儲存貯體中 S3 物件的預設儲存類別為 S3 Express One Zone。您可以選擇要在上傳物件時使用的儲存體方案。如需儲存體方案的詳細資訊，請參閱「[了解和管理 Amazon S3 儲存類別](storage-class-intro.md)」。

      若要在上傳物件至一般用途儲存貯體後變更儲存類別，請選擇**儲存類別**。選擇您想要的儲存方案，然後選擇 **Save** (儲存)。
**注意**  
目錄儲存貯體中物件的儲存類別無法變更。

   1. **Server-side encryption settings (伺服器端加密設定)** — 您可以使用伺服器端加密來加密 S3 物件。如需詳細資訊，請參閱 [使用 AWS KMS (SSE-KMS) 指定伺服器端加密](specifying-kms-encryption.md) 或 [使用 Amazon S3 受管金鑰 (SSE-S3) 指定伺服器端加密](specifying-s3-encryption.md) 。

   1. **Metadata (中繼資料)** – Amazon S3 中的每個物件都有名稱/值對代表其中繼資料。如需將中繼資料新增至 S3 物件的資訊，請參閱「[在 Amazon S3 主控台中編輯物件中繼資料](add-object-metadata.md)」。

   1. **標籤** – 您可以將標籤新增至一般用途儲存貯體中的 S3 物件。如需詳細資訊，請參閱[使用標籤為物件分類](object-tagging.md)。

   1. **物件鎖定法務保存與保留** – 您可以防止一般用途儲存貯體中的物件遭到刪除。如需詳細資訊，請參閱[使用物件鎖定來鎖定物件](object-lock.md)。

# 使用標籤為物件分類
<a name="object-tagging"></a>

使用物件標記，可讓您分類儲存。每個標籤都是金鑰值對。

您可以在上傳新的物件時，為這些物件新增標籤，也可以對現有的物件新增標籤。
+ 一個物件最多可以與 10 個標籤相關聯。與物件相關聯的標籤，必須具備唯一的標籤金鑰。
+ 標籤索引鍵的長度上限為 128 個 Unicode 字元，標籤值的長度上限為 256 個 Unicode 字元。Amazon S3 物件標籤在 UTF-16 內部表示。請注意，在 UTF-16 中，字元佔用 1 或 2 個字元位置。
+ 金鑰與值皆會區分大小寫。
+ 如需標籤限制的詳細資訊，請參閱《AWS 帳單與成本管理使用者指南》**中的[使用者定義的標籤限制](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/custom-tags.html#allocation-tag-restrictions)。如需基本標籤限制，請參閱《Amazon EC2 使用者指南》**中的[標籤限制](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#tag-restrictions)。

**範例**  
請考量下列標記範例：

**Example PHI 資訊**  
假設物件包含受保護的醫療資訊 (PHI) 資料。您可以使用下列金鑰/值對標記物件。  

```
PHI=True
```
或  

```
Classification=PHI
```

**Example 專案檔案**  
假設您將該專案檔存放在您的 S3 儲存貯體中。您可以使用名稱為 `Project` 的金鑰與值來標記這些物件。  

```
Project=Blue
```

**Example 多個標籤**  
您可以為物件新增多個標籤，如下所示。  

```
Project=x
Classification=confidential
```

**金鑰名稱前綴和標籤**  
物件金鑰的前綴名稱可讓您分類儲存體。不過，以前綴為基礎的分類是單一維度的。請考量下列物件金鑰名稱：

```
photos/photo1.jpg
project/projectx/document.pdf
project/projecty/document2.pdf
```

這些金鑰名稱使用下列前綴：`photos/`、`project/projectx/` 及 `project/projecty/`。您可以將這些前綴應用在特定分類。亦即，某前綴下的所有項目均屬於同一個類別。例如，前綴 `project/projectx` 即表示所有與專案 x 相關的文件。

有了標記功能之後，現在可有不同的區分方式。若希望將 photo1 歸入專案 x 類別，可以依此將該物件加上標記。

**其他優勢**  
除了資料分類之外，標記功能另有其他優點，如下所示：
+ 物件標籤可以更精細地分級許可存取控制。例如，您可以將許可授權給一位使用者，只允許其讀取具有特定標籤的物件。
+ 除了金鑰名稱前綴之外，物件標籤還可以讓您依據標籤作為篩選條件，在生命週期規則中定義更精細的物件生命週期管理。
+ 使用 Amazon S3 分析時，您可以配置篩選條件，依物件標籤、金鑰名稱前綴，或同時使用前綴與標籤來將物件分組。
+ 您也可以自訂 Amazon CloudWatch 指標，依特定的標籤篩選條件顯示資訊。下列各節將詳細說明。

**重要**  
標籤可用於標記內涵機密資料 (例如個人識別資訊 (PII) 或受保護的醫療資訊 (PHI))。不過，標籤本身無法包含任何機密資訊。

**使用單一請求新增物件標籤集至多個 Amazon S3 物件**  
若要使用單一請求新增超過一個 Amazon S3 物件的物件標籤，您可以使用 S3 Batch Operations。您可以為 SS3 Batch Operations 提供一份要進行操作的物件清單。S3 批次操作會呼叫相應的 API 操作來執行指定操作。單一批次操作任務可在包含數 EB 資料的數十億個物件上執行指定的操作。

S3 Batch Operations 功能會追蹤進度、傳送通知，並存放所有動作的詳細完成報告，提供完整受管、可稽核、無伺服器的體驗。您可以透過 Amazon S3 主控台、 AWS CLI、 AWS SDKs 或 REST API 使用 S3 批次操作。 Amazon S3 如需詳細資訊，請參閱[S3 批次作業基礎知識](batch-ops.md#batch-ops-basics)。

如需物件標籤的詳細資訊，請參閱 [管理物件標籤](tagging-managing.md)。

## 與物件標記相關的 API 操作
<a name="tagging-apis"></a>

Amazon S3 支援下列專供物件標記之用的 API 操作：

**物件 API 操作**
+  [PUT 物件標記](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUTtagging.html) – 取代物件上的標籤。請在要求內文中指定標籤。下列兩種不同的狀況都可以使用此 API 管理物件標籤。
  + 物件沒有任何標籤 - 您可以使用此 API 為物件 (先前沒有任何標籤的物件) 新增一組標籤。
  + 物件目前已有一組標籤 - 若要修改現有的標籤組，您必須先擷取現有的標籤組在用戶端上修改，然後再使用此 API 取代該標籤組。
**注意**  
 若傳送此請求時附上空的標籤組，則 Amazon S3 會刪除物件上的現有標籤組。如果您使用此方法，系統會向您收取 Tier 1 Request (PUT) 的費用。如需詳細資訊，請參閱 [Amazon S3 定價](https://d0.awsstatic.com/whitepapers/aws_pricing_overview.pdf)。  
[DELETE 物件標記](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETEtagging.html)請求是更適合的方法，因為結果相同，而不會產生費用。
+  [GET 物件標記](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGETtagging.html) - 傳回與物件相關聯的標籤組。Amazon S3 會在回應內文中傳回物件的標籤。
+ [DELETE 物件標記](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETEtagging.html) – 刪除與物件相關聯的標籤組。

**其他支援標記的 API 操作**
+  [PUT 物件](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html)和[初始化分段上傳](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html) – 您可以在建立物件時指定標籤。使用 `x-amz-tagging` 要求標頭可指定標籤。
+  [GET 物件](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html) - 因為標頭回應大小不得超過 8 K 個位元組，所以 Amazon S3 不會傳回標籤組，而會在 `x-amz-tag-count` 標頭中傳回物件標籤計數 (只有當請求者有許可能讀取標籤時)。若希望檢視標籤，您必須另外發出 [GET 物件標記](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGETtagging.html) API 操作的請求。
+ [POST 物件](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html) – 您可以在 POST 請求中指定標籤。

  只要要求中的標籤未超過 8 K 個位元組的 HTTP 要求標頭大小限制，您就能使用 `PUT Object `API 建立包含標籤的物件。若指定的標籤超過了標頭大小限制，可以使用此 POST 方法，在內文中加入標籤。

   [PUT Object - Copy](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html) – 您可以在請求中指定 `x-amz-tagging-directive`，指示 Amazon S3 要複製 (預設行為) 標籤，或是用請求中提供的新標籤組取代標籤。

注意下列事項：
+ S3 物件標記強式一致。如需詳細資訊，請參閱「[Amazon S3 資料一致性模式](Welcome.md#ConsistencyModel)」。

## 其他組態
<a name="tagging-other-configs"></a>

本節說明物件標記與其他組態的相關性。

### 物件標記與生命週期管理
<a name="tagging-and-lifecycle"></a>

您可以在儲存貯體的生命週期組態中指定篩選條件，從物件中選取要套用規則的一部分物件。您可以使用金鑰名稱字首、物件標籤或同時使用兩者，來指定篩選條件。

假設您將相片 (原始與完稿格式) 存放在您的 Amazon S3 儲存貯體中。您可以標記這些物件，如下所示。

```
phototype=raw
or
phototype=finished
```

您可能會想要在建立相片之後，將原始相片封存到 Amazon Glacier。您可以使用篩選條件設定生命週期規則，指定一組金鑰名稱字首 (`photos/`) 包含特定標籤 (`phototype=raw`) 的物件。

如需詳細資訊，請參閱「[管理物件的生命週期](object-lifecycle-mgmt.md)」。

### 物件標記和複製
<a name="tagging-and-replication"></a>

您的儲存貯體如已配置複寫，且您以授予 Amazon S3 讀取標籤的許可，Amazon S3 即會複寫標籤。如需詳細資訊，請參閱[設定即時複寫概觀](replication-how-setup.md)。

### 物件標記事件通知
<a name="tagging-and-event-notifications"></a>

您可以設定在為物件新增物件標籤或刪除物件標籤時收到 Amazon S3 事件通知。`s3:ObjectTagging:Put` 事件類型會在物件上的標籤為 PUT 或現有標籤已更新時通知您。`s3:ObjectTagging:Delete` 事件類型會在標籤從物件移除時通知您。如需詳細資訊，請參閱[啟用事件通知](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-enable-disable-notification-intro.html)。

如需有關物件標記的詳細資訊，請參閱下列主題：

**Topics**
+ [與物件標記相關的 API 操作](#tagging-apis)
+ [其他組態](#tagging-other-configs)
+ [標記與存取控制政策](tagging-and-policies.md)
+ [管理物件標籤](tagging-managing.md)

# 標記與存取控制政策
<a name="tagging-and-policies"></a>

您也可以使用許可政策 (儲存貯體與使用者政策) 來管理與物件標記相關的許可。如需了解政策動作，請參閱下列主題：
+  [物件操作](security_iam_service-with-iam.md#using-with-s3-actions-related-to-objects) 
+  [儲存貯體操作](security_iam_service-with-iam.md#using-with-s3-actions-related-to-buckets)

物件標籤可以為管理許進行更精細地分級存取控制。您可以使用物件標籤來授予條件式許可。Amazon S3 支援下列條件金鑰，可讓您用於授予採用依物件標籤區分的條件式許可。
+ `s3:ExistingObjectTag/<tag-key>` - 使用此條件金鑰可驗證現有的物件標籤是否包含特定的金鑰與值。
**注意**  
對 `PUT Object` 與 `DELETE Object` 操作授予許可時，不支援此條件金鑰。亦即，您無法建立政策來根據現有的標籤授予或拒絕使用者刪除或覆寫物件的許可。
+ `s3:RequestObjectTagKeys` - 使用此條件金鑰可限制能對物件使用的標籤金鑰。當您使用 PutObjectTagging 及 PutObject 為物件新增標籤，以及使用 POST 物件進行要求時，即可使用此金鑰。
+ `s3:RequestObjectTag/<tag-key>` - 使用此條件金鑰可限制能對物件使用的標籤金鑰與值。當您使用 PutObjectTagging 及 PutObject 為物件新增標籤，以及使用 POST 儲存貯體進行要求時，即可使用此金鑰。

如需 Amazon S3 服務專用的條件金鑰詳細清單，請參閱[使用條件索引鍵的儲存貯體政策範例](amazon-s3-policy-keys.md)。下列許可政策示範物件標記如何精細分級許可管理。

**Example 1：允許使用者只讀取具有特定標籤和金鑰值的物件**  
下列許可政策會限制使用者只能讀取具有 `environment: production` 標籤金鑰和值的物件。此政策會使用 `s3:ExistingObjectTag` 條件金鑰來指定標籤金鑰和值。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
  {
    "Principal": {
      "AWS": [
        "arn:aws:iam::111122223333:role/JohnDoe"
      ]
    },
    "Effect": "Allow",
    "Action": ["s3:GetObject", "s3:GetObjectVersion"],
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
    "Condition": {
      "StringEquals": 
        {"s3:ExistingObjectTag/environment": "production"}
    }
  }
  ]
}
```

**Example 2：限制使用者可以新增哪些物件標籤金鑰**  
下列許可政策為使用者授予執行 `s3:PutObjectTagging` 動作的許可，該動作允許使用者為現有的物件新增標籤。此條件使用 `s3:RequestObjectTagKeys` 條件金鑰指定允許的標籤金鑰，例如 `Owner` 或 `CreationDate`。如需詳細資訊，請參閱《IAM 使用者指南》**中的[建立測試多個金鑰值的條件](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_multi-value-conditions.html)。  
此政策可確保請求中指定的每個索引標籤金鑰都是授權的標籤金鑰。條件中的 `ForAnyValue` 限定詞可確保請求中至少會出現其中一個指定的金鑰。    
****  

```
{
   "Version":"2012-10-17",		 	 	 
  "Statement": [
    {"Principal":{"AWS":[
            "arn:aws:iam::111122223333:role/JohnDoe"
         ]
       },
 "Effect": "Allow",
      "Action": [
        "s3:PutObjectTagging"
      ],
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket/*"
      ],
      "Condition": {"ForAnyValue:StringEquals": {"s3:RequestObjectTagKeys": [
            "Owner",
            "CreationDate"
          ]
        }
      }
    }
  ]
}
```

**Example 3：允許使用者新增物件標籤時，需要特定標籤金鑰和值**  
下列範例政策授予使用者執行 `s3:PutObjectTagging` 動作的許可，允許使用者將標籤新增至現有的物件。此條件需要使用者包括值設為 `X` 的特定標籤 (例如 `Project`)。    
****  

```
{
   "Version":"2012-10-17",		 	 	 
  "Statement": [
    {"Principal":{"AWS":[
       "arn:aws:iam::111122223333:user/JohnDoe"
         ]
       },
      "Effect": "Allow",
      "Action": [
        "s3:PutObjectTagging"
      ],
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket/*"
      ],
      "Condition": {"StringEquals": {"s3:RequestObjectTag/Project": "X"
        }
      }
    }
  ]
}
```



# 管理物件標籤
<a name="tagging-managing"></a>

本節說明如何使用適用於 Java 和 .NET AWS SDKs 或 Amazon S3 主控台來管理物件標籤。

物件標記提供您在一般用途儲存貯體中分類儲存體的方法。每一個標記都是符合以下規則的金鑰對數值：
+ 您最多可以將 10 個標籤與 物件建立關聯。與物件相關聯的標籤，必須具備唯一的標籤金鑰。
+ 標籤索引鍵的長度上限為 128 個 Unicode 字元，標籤值的長度上限為 256 個 Unicode 字元。Amazon S3 物件標籤在 UTF-16 內部表示。請注意，在 UTF-16 中，字元佔用 1 或 2 個字元位置。
+ 金鑰與值皆會區分大小寫。

如需物件標籤的詳細資訊，請參閱 [使用標籤為物件分類](object-tagging.md)。如需標籤限制的詳細資訊，請參閱*《AWS 帳單與成本管理 使用者指南》*中的[使用者定義的標籤限制](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/allocation-tag-restrictions.html)。

## 使用 S3 主控台
<a name="add-object-tags"></a>

**對物件新增標籤**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 開啟 Amazon S3 主控台。

1. 在左側導覽窗格中，選擇**一般用途儲存貯體**。

1. 在儲存貯體清單中，選擇包含該物件的儲存貯體名稱。

1. 選取您要變更之物件名稱左側的核取方塊。

1. 在 **Actions (動作)** 選單上，選擇 **Edit tags (編輯標籤)**。

1. 檢閱列出的物件，然後選擇 **Add tags (新增標籤)**。

1. 每個物件標籤都是一個鍵值對。輸入 **Key (索引鍵)** 和 **Value (數值)**。若要新增其他標籤，選擇 **Add Tag (新增標籤)**。

   一個物件最多可以輸入 10 個標籤。

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

   Amazon S3 會將標籤新增至指定的物件。

如需詳細資訊，請參閱本指南中的 [在 Amazon S3 主控台中檢視物件屬性](view-object-properties.md) 和 [上傳物件](upload-objects.md)。

## 使用 AWS SDKs
<a name="tagging-manage-sdk"></a>

------
#### [ Java ]

若要使用適用於 Java 的 AWS SDK 管理物件標籤，您可以設定新物件的標籤，並擷取或取代現有物件的標籤。如需更多物件標記的詳細資訊，請參閱「[使用標籤為物件分類](object-tagging.md)」。

使用 S3Client 將物件上傳至儲存貯體並設定索引標籤。如需範例，請參閱《Amazon S3 API 參考》**中的[將物件上傳至儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_PutObject_section.html)。

------
#### [ .NET ]

下列範例示範如何使用 適用於 .NET 的 AWS SDK 來設定新物件的標籤，以及擷取或取代現有物件的標籤。如需更多物件標記的詳細資訊，請參閱「[使用標籤為物件分類](object-tagging.md)」。

如需有關設定和執行程式碼範例的資訊，請參閱《[適用於 .NET 的 AWS SDK 開發人員指南》中的適用於 .NET 的 SDK 入門](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html)。 *AWS *

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    public class ObjectTagsTest
    {
        private const string bucketName = "*** bucket name ***";
        private const string keyName = "*** key name for the new object ***";
        private const string filePath = @"*** file path ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 client;

        public static void Main()
        {
            client = new AmazonS3Client(bucketRegion);
            PutObjectWithTagsTestAsync().Wait();
        }

        static async Task PutObjectWithTagsTestAsync()
        {
            try
            {
                // 1. Put an object with tags.
                var putRequest = new PutObjectRequest
                {
                    BucketName = bucketName,
                    Key = keyName,
                    FilePath = filePath,
                    TagSet = new List<Tag>{
                        new Tag { Key = "Keyx1", Value = "Value1"},
                        new Tag { Key = "Keyx2", Value = "Value2" }
                    }
                };

                PutObjectResponse response = await client.PutObjectAsync(putRequest);
                // 2. Retrieve the object's tags.
                GetObjectTaggingRequest getTagsRequest = new GetObjectTaggingRequest
                {
                    BucketName = bucketName,
                    Key = keyName
                };

                GetObjectTaggingResponse objectTags = await client.GetObjectTaggingAsync(getTagsRequest);
                for (int i = 0; i < objectTags.Tagging.Count; i++)
                    Console.WriteLine("Key: {0}, Value: {1}", objectTags.Tagging[i].Key, objectTags.Tagging[i].Value);


                // 3. Replace the tagset.

                Tagging newTagSet = new Tagging();
                newTagSet.TagSet = new List<Tag>{
                    new Tag { Key = "Key3", Value = "Value3"},
                    new Tag { Key = "Key4", Value = "Value4" }
                };


                PutObjectTaggingRequest putObjTagsRequest = new PutObjectTaggingRequest()
                {
                    BucketName = bucketName,
                    Key = keyName,
                    Tagging = newTagSet
                };
                PutObjectTaggingResponse response2 = await client.PutObjectTaggingAsync(putObjTagsRequest);

                // 4. Retrieve the object's tags.
                GetObjectTaggingRequest getTagsRequest2 = new GetObjectTaggingRequest();
                getTagsRequest2.BucketName = bucketName;
                getTagsRequest2.Key = keyName;
                GetObjectTaggingResponse objectTags2 = await client.GetObjectTaggingAsync(getTagsRequest2);
                for (int i = 0; i < objectTags2.Tagging.Count; i++)
                    Console.WriteLine("Key: {0}, Value: {1}", objectTags2.Tagging[i].Key, objectTags2.Tagging[i].Value);

            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine(
                        "Error encountered ***. Message:'{0}' when writing an object"
                        , e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine(
                    "Encountered an error. Message:'{0}' when writing an object"
                    , e.Message);
            }
        }
    }
}
```

------