

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

# 使用標籤控制存取和標記任務
<a name="batch-ops-job-tags"></a>

您可以透過新增*標籤*，標示和控制對 S3 Batch Operations 任務的存取權。標籤可用來識別負責批次操作任務的人員。任務標籤的存在可以授與或限制使用者的以下能力：取消任務、啟動處於確認狀態的任務或變更任務的優先順序層級。您可以建立已連接標籤的作業，也可以在建立作業之後為其新增標籤。每個標籤都是一個鍵值對，可以在建立任務時包含或稍後更新。

**警告**  
請確定您的作業標籤不包含任何機密資訊或個人資料。

請考慮下列標記範例：假設您希望財務部門建立批次作業任務。您可以撰寫 AWS Identity and Access Management (IAM) 政策，允許使用者叫用 `CreateJob`，前提是任務是使用指派值 的`Department`標籤建立的`Finance`。此外，您可以將該政策連接到屬於財務部門成員的所有使用者。

您可以繼續使用此範例撰寫政策，允許使用者更新具有所需標籤之任何任務的優先順序，或取消任何具有該些標籤的任務。如需詳細資訊，請參閱[使用作業標籤控制 Batch Operations 的許可](batch-ops-job-tags-examples.md)。

您可以在建立新的 S3 批次作業任務時新增標籤，或將新增至現有任務。

請注意以下標籤限制：
+ 您最多可以將 50 個標籤與一項任務建立關聯，只要它們具有唯一的標籤鍵。
+ 標籤金鑰最長可包含 128 個 Unicode 字元，標籤值最長可包含 256 個 Unicode 字元。
+ 金鑰與值皆會區分大小寫。

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

## 與 S3 批次作業任務標記相關的 API 作業
<a name="batch-ops-job-tags-api"></a>

Amazon S3 支援以下專屬於 S3 批次作業任務標記的 API 操作：
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetJobTagging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetJobTagging.html) – 傳回與 Batch Operations 作業相關聯的標籤組。
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutJobTagging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutJobTagging.html) – 取代與作業相關聯的標籤組。使用此 API 動作進行 S3 批次作業任務標籤管理時，有兩種不同的情況：
  + 作業沒有標籤 – 您可以為作業新增一組標籤 (作業之前沒有標籤)。
  + 作業有一組現有的標籤 – 若要修改現有的標籤組，您可以完全取代現有的標籤組，或是使用 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetJobTagging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetJobTagging.html) 擷取現有的標籤組在現有的標籤組內進行變更，修改該標籤組，然後使用此 API 動作將標籤組換成您修改過的標籤組。
**注意**  
若傳送此請求時附上空的標籤組，則 S3 批次作業會刪除物件上的現有標籤組。如果您使用此方法，則須支付 Tier 1 Request (`PUT`) 的費用。如需詳細資訊，請參閱 [Amazon S3 定價](https://aws.amazon.com/s3/pricing)。  
若要刪除批次作業任務的現有標籤，建議採取 `DeleteJobTagging` 動作，因為這可以達到相同的結果，而不會產生費用。
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteJobTagging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteJobTagging.html) – 刪除與 Batch Operations 作業相關聯的標籤組。

# 建立具有任務標籤 (用於標示) 的批次作業任務
<a name="batch-ops-tags-create"></a>

您可以透過新增「標籤」**來標記 Amazon S3 Batch Operations 作業並控制其存取。標籤可用來識別負責批次操作任務的人員。您可以建立已連接標籤的任務，也可以在建立任務後將標籤新增至任務。如需詳細資訊，請參閱[使用標籤控制存取和標記任務](batch-ops-job-tags.md)。

## 使用 AWS CLI
<a name="batch-ops-example-cli-job-tags-create-job"></a>

下列 AWS CLI 範例會使用任務標籤做為`S3PutObjectCopy`任務的標籤來建立 S3 批次操作任務。

1. 選取您要批次操作任務執行的動作或 `OPERATION`，然後選擇您的 `TargetResource`。

   ```
   read -d '' OPERATION <<EOF
   {
     "S3PutObjectCopy": {
       "TargetResource": "arn:aws:s3:::amzn-s3-demo-destination-bucket"
     }
   }
   EOF
   ```

1. 識別您要用於任務的 `TAGS`。在本例中，您套用兩個標籤，`department` 和`FiscalYear`，分別具有數值 `Marketing` 和 `2020`。

   ```
   read -d '' TAGS <<EOF
   [
     {
       "Key": "department",
       "Value": "Marketing"
     },
     {
       "Key": "FiscalYear",
       "Value": "2020"
     }
   ]
   EOF
   ```

1. 指定批次操作任務的 `MANIFEST`。

   ```
   read -d '' MANIFEST <<EOF
   {
     "Spec": {
       "Format": "EXAMPLE_S3BatchOperations_CSV_20180820",
       "Fields": [
         "Bucket",
         "Key"
       ]
     },
     "Location": {
       "ObjectArn": "arn:aws:s3:::amzn-s3-demo-manifest-bucket/example_manifest.csv",
       "ETag": "example-5dc7a8bfb90808fc5d546218"
     }
   }
   EOF
   ```

1. 設定批次操作任務的 `REPORT`。

   ```
   read -d '' REPORT <<EOF
   {
     "Bucket": "arn:aws:s3:::amzn-s3-demo-completion-report-bucket",
     "Format": "Example_Report_CSV_20180820",
     "Enabled": true,
     "Prefix": "reports/copy-with-replace-metadata",
     "ReportScope": "AllTasks"
   }
   EOF
   ```

1. 執行 `create-job` 動作，使用上述步驟中設定的輸入來建立您的批次操作任務。

   ```
   aws \
       s3control create-job \
       --account-id 123456789012 \
       --manifest "${MANIFEST//$'\n'}" \
       --operation "${OPERATION//$'\n'/}" \
       --report "${REPORT//$'\n'}" \
       --priority 10 \
       --role-arn arn:aws:iam::123456789012:role/batch-operations-role \
       --tags "${TAGS//$'\n'/}" \
       --client-request-token "$(uuidgen)" \
       --region us-west-2 \
       --description "Copy with Replace Metadata";
   ```

## 使用適用於 Java 的 AWS 開發套件
<a name="batch-ops-examples-java-job-with-tags-create"></a>

若要使用適用於 Java 的 AWS SDK 建立具有標籤的 S3 批次操作任務，您可以使用 S3Control 用戶端來設定任務參數，包括資訊清單位置、任務操作、報告設定，以及用於組織和追蹤目的的標籤。

如需如何使用適用於 Java 的 AWS SDK 建立具有標籤的 S3 批次操作任務的範例，請參閱《*Amazon S3 API 參考*》中的[建立批次任務以複製物件](https://docs.aws.amazon.com/AmazonS3/latest/API/s3-control_example_s3-control_CreateJob_section.html)。

# 從 S3 批次作業任務中刪除標籤
<a name="delete-job-tags"></a>

您可以使用下列範例來刪除 Amazon S3 Batch Operations 作業的標籤。

## 使用 AWS CLI
<a name="batch-ops-example-cli-job-tags-delete-job-tagging"></a>

下列範例會使用 AWS CLI從批次操作任務中刪除標籤。

```
aws \
    s3control delete-job-tagging \
    --account-id 123456789012 \
    --job-id Example-e25a-4ed2-8bee-7f8ed7fc2f1c \
    --region us-east-1
```

## 刪除批次操作任務的任務標籤
<a name="batch-ops-examples-java-job-with-tags-delete"></a>

若要使用適用於 Java 的 AWS SDK 刪除 S3 批次操作任務的標籤，您可以使用 S3Control 用戶端搭配任務 ID 來移除與批次操作任務相關聯的所有標籤。

如需如何使用適用於 Java 的 AWS SDK 刪除任務標籤的範例，請參閱《*Amazon S3 API 參考*》中的[從批次任務刪除標籤](https://docs.aws.amazon.com/AmazonS3/latest/API/s3-control_example_s3-control_DeleteJobTagging_section.html)。

# 為現有的 Batch Operations 作業新增作業標籤
<a name="put-job-tags"></a>

您可以使用 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutJobTagging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutJobTagging.html) API 操作，為現有的 Amazon S3 Batch Operations 作業新增作業標籤。如需詳細資訊，請參閱下列範例。

## 使用 AWS CLI
<a name="batch-ops-example-cli-job-tags-put-job-tagging"></a>

以下示範如何使用 `s3control put-job-tagging`，透過 AWS CLI為 S3 Batch Operations 作業新增作業標籤。若要使用這些範例，請以您自己的資訊取代 *`user input placeholders`*。

**注意**  
若傳送此請求時附上空的標籤組，則 Batch Operations 會刪除物件上的現有標籤組。不過，如果您使用此方法，則須支付 Tier 1 Request (`PUT`) 的費用。如需詳細資訊，請參閱 [Simple Storage Service (Amazon S3) 定價](https://aws.amazon.com/s3/pricing)。  
反之，若要刪除 Batch Operations 作業的現有標籤，建議使用 `DeleteJobTagging` 操作，因為這可以達到相同的結果，而不會產生費用。

1. 識別您要用於任務的 `TAGS`。在本例中，您套用兩個標籤，`department` 和`FiscalYear`，分別具有數值 `Marketing` 和 `2020`。

   ```
   read -d '' TAGS <<EOF
   [
     {
       "Key": "department",
       "Value": "Marketing"
     },
     {
       "Key": "FiscalYear",
       "Value": "2020"
     }
   ]
   EOF
   ```

1. 執行下列 `put-job-tagging` 命令並提供必要參數：

   ```
   aws \
       s3control put-job-tagging \
       --account-id 123456789012 \
       --tags "${TAGS//$'\n'/}" \
       --job-id Example-e25a-4ed2-8bee-7f8ed7fc2f1c \
       --region us-east-1
   ```

## 使用適用於 Java 的 AWS 開發套件
<a name="batch-ops-examples-java-job-with-tags-put"></a>

若要使用適用於 Java 的 AWS SDK 在 S3 批次操作任務上放置標籤，您可以使用 S3Control 用戶端新增或更新具有索引鍵值對的標籤，以用於組織和追蹤目的。

如需如何使用適用於 Java 的 AWS SDK 放置任務標籤的範例，請參閱《*Amazon S3 API 參考*》中的[將標籤新增至批次任務](https://docs.aws.amazon.com/AmazonS3/latest/API/s3-control_example_s3-control_PutJobTagging_section.html)。

# 取得 S3 批次作業任務的標籤
<a name="get-job-tags"></a>

若要擷取 Amazon S3 Batch Operations 作業的標籤，您可以使用 `GetJobTagging` API 操作。如需詳細資訊，請參閱下列範例。

## 使用 AWS CLI
<a name="batch-ops-example-cli-job-tags-get-job-tagging"></a>

下列範例會使用 AWS CLI取得批次操作任務的標籤。若要使用此範例，請以您自己的資訊取代 *`user input placeholders`*。

```
aws \
    s3control get-job-tagging \
    --account-id 123456789012 \
    --job-id Example-e25a-4ed2-8bee-7f8ed7fc2f1c \
    --region us-east-1
```

## 使用適用於 Java 的 AWS 開發套件
<a name="batch-ops-examples-java-job-with-tags-get"></a>

若要使用適用於 Java 的 AWS SDK 取得 S3 批次操作任務的標籤，您可以使用具有任務 ID 的 S3Control 用戶端來擷取與批次操作任務相關聯的所有標籤，並將其傳回為清單。

如需如何使用適用於 Java 的 AWS SDK 取得任務標籤的範例，請參閱《*Amazon S3 API 參考*》中的[從批次任務取得標籤](https://docs.aws.amazon.com/AmazonS3/latest/API/s3-control_example_s3-control_GetJobTagging_section.html)。

# 使用作業標籤控制 Batch Operations 的許可
<a name="batch-ops-job-tags-examples"></a>

為了協助您管理 Amazon S3 Batch Operations 作業，您可以新增「作業標籤」**。您可以使用任務標籤控制對批次操作任務的存取，並強制在建立任何任務時套用標籤。

您最多可以將 50 個任務標籤套用至每個批次操作任務。透過使用標籤，您可以設定精細的政策來限制一組能夠編輯作業的使用者。任務標籤可以授與或限制使用者的以下能力：取消任務、啟動處於確認狀態的任務或變更任務的優先順序層級。此外，您可以強制將標籤套用至所有新任務，並為標籤指定允許的鍵值對。您可以使用 [AWS Identity and Access Management (IAM) 政策語言](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_iam-tags.html)來表達所有這些條件。如需詳細資訊，請參閱服務授權參考**中的 [Amazon S3 的動作、資源和條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html)。

如需依 S3 資源類型列出 S3 API 操作許可的詳細資訊，請參閱[Amazon S3 API 操作所需的許可](using-with-s3-policy-actions.md)。

下列範例顯示如何使用 S3 批次操作任務標籤授予使用者僅能建立和編輯在特定部門 (例如財務或合規部門) 內執行的任務的許可。您也可以根據與其相關的開發階段指派任務，例如 QA 或生產。

在此範例中，您可以在 IAM 政策中使用 S3 Batch Operations 作業標籤，准許使用者僅能建立和編輯在其部門內執行的作業。您可以根據任務相關的開發階段指派任務，例如 QA 或生產。

下列範例使用以下部門，其中每個部門會以不同的方式使用 Batch Operations：
+ 財務
+ 合規
+ 商業智慧
+ 工程設計

**Topics**
+ [透過指派標籤到使用者和資源來控制存取](#job-tags-examples-attaching-tags)
+ [依階段標記批次操作任務，並強制執行工作優先順序限制](#tagging-jobs-by-stage-and-enforcing-limits-on-job-priority)

## 透過指派標籤到使用者和資源來控制存取
<a name="job-tags-examples-attaching-tags"></a>

在本例中，系統管理員使用[屬性型存取控制 (ABAC)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)。ABAC 是一種 IAM 授權策略，透過將標籤連接到使用者 AWS 和資源來定義許可。

系統會為使用者和任務指派下列其中一個部門標籤：

**索引鍵：數值**
+ `department : Finance`
+ `department : Compliance`
+ `department : BusinessIntelligence`
+ `department : Engineering`
**注意**  
任務標籤鍵與數值皆區分大小寫。

使用 ABAC 存取控制策略，您可以藉由將標籤 `department=Finance` 與其使用者關聯，以授予財務部門的使用者建立和管理其部門內 S3 批次操作任務的許可。

此外，您可以將受管政策連接至 IAM 使用者，以允許該公司內任何使用者建立或修改各自部門內的 S3 批次操作任務。

此範例中的政策包含三個政策陳述式：
+ 政策中的第一個陳述式可讓使用者建立批次操作任務，前提是建立任務請求包含符合其各自部門的任務標籤。這是使用 `"${aws:PrincipalTag/department}"` 語法表示，該語法在政策評估時會以使用者的部門標籤取代。當為 `("aws:RequestTag/department")` 請求中的部門標籤提供的數值符合使用者的部門時，即滿足條件。
+ 政策中的第二個陳述式可讓使用者變更任務的優先順序或更新任務狀態，只要使用者正在更新的任務符合使用者的部門即可。
+ 第三個陳述式可讓使用者隨時透過 `PutJobTagging` 請求更新批次操作任務的標籤，只要 (1) 有保留其部門標籤，(2) 他們正在更新的任務在其部門內。

------
#### [ JSON ]

****  

```
{
      "Version":"2012-10-17",		 	 	 
      "Statement": [
            {
                  "Effect": "Allow",
                  "Action": "s3:CreateJob",
                  "Resource": "*",
                  "Condition": {
                        "StringEquals": {
                              "aws:RequestTag/department": "${aws:PrincipalTag/department}"        
                }      
            }    
        },
            {
                  "Effect": "Allow",
                  "Action": [
                        "s3:UpdateJobPriority",
                        "s3:UpdateJobStatus"      
            ],
                  "Resource": "*",
                  "Condition": {
                        "StringEquals": {
                              "aws:ResourceTag/department": "${aws:PrincipalTag/department}"        
                }      
            }    
        },
            {
                  "Effect": "Allow",
                  "Action": "s3:PutJobTagging",
                  "Resource": "*",
                  "Condition": {
                        "StringEquals": {
                              "aws:RequestTag/department": "${aws:PrincipalTag/department}",
                              "aws:ResourceTag/department": "${aws:PrincipalTag/department}"        
                }      
            }    
        }  
    ]
}
```

------

## 依階段標記批次操作任務，並強制執行工作優先順序限制
<a name="tagging-jobs-by-stage-and-enforcing-limits-on-job-priority"></a>

所有 S3 批次操作任務都具有數字優先順序，Amazon S3 會用來決定執行任務的順序。在此範例中，您可以限制大多數使用者可以指派給任務的最大優先順序，較高的優先順序範圍會保留給有限的特殊權限使用者，如下所示：
+ QA 階段優先順序範圍 (低)：1-100
+ 生產階段優先順序範圍 (高)：1-300

若要進行此動作，請引入一組新標籤來代表任務之階段：

**索引鍵：數值**
+ `stage : QA`
+ `stage : Production`

### 建立與更新部門內的低優先順序任務
<a name="creating-and-updating-low-priority-jobs"></a>

除了以部門為基礎的限制外，此政策還會引入兩項新的 S3 批次操作任務建立與更新限制：
+ 它允許使用者建立或更新部門中的任務，並有一項新條件要求任務必須包含標籤 `stage=QA`。
+ 它允許使用者建立或更新任務的優先順序，新的優先順序最高為 100。

```
{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
        {
        "Effect": "Allow",
        "Action": "s3:CreateJob",
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "aws:RequestTag/department": "${aws:PrincipalTag/department}",
                "aws:RequestTag/stage": "QA"
            },
            "NumericLessThanEquals": {
                "s3:RequestJobPriority": 100
            }
        }
    },
    {
        "Effect": "Allow",
        "Action": [
            "s3:UpdateJobStatus"
        ],
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "aws:ResourceTag/department": "${aws:PrincipalTag/department}"
            }
        }
    },
    {
        "Effect": "Allow",
        "Action": "s3:UpdateJobPriority",
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "aws:ResourceTag/department": "${aws:PrincipalTag/department}",
                "aws:ResourceTag/stage": "QA"
            },
            "NumericLessThanEquals": {
                "s3:RequestJobPriority": 100
            }
        }
    },
    {
        "Effect": "Allow",
        "Action": "s3:PutJobTagging",
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "aws:RequestTag/department" : "${aws:PrincipalTag/department}",
                "aws:ResourceTag/department": "${aws:PrincipalTag/department}",
                "aws:RequestTag/stage": "QA",
                "aws:ResourceTag/stage": "QA"
            }
        }
    },
    {
        "Effect": "Allow",
        "Action": "s3:GetJobTagging",
        "Resource": "*"
    }
    ]
}
```

### 建立與更新部門內的高優先順序任務
<a name="creating-and-updating-high-priority-jobs"></a>

少數使用者可能需要在 QA 或生產中建立高優先順序的任務。若要支援這項需求，您可以建立受管政策，根據上一節中的低優先順序政策調整該政策。

此政策會執行下列動作：
+ 允許使用者使用標籤 `stage=QA` 或 `stage=Production` 來建立或更新其部門中的任務。
+ 允許使用者建立或更新任務的優先順序，最多可達 300。

------
#### [ JSON ]

****  

```
{
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
                "Effect": "Allow",
                "Action": "s3:CreateJob",
                "Resource": "*",
                "Condition": {
                      "ForAnyValue:StringEquals": {
                            "aws:RequestTag/stage": [
                                  "QA",
                                  "Production"        
                    ]      
                },
                      "StringEquals": {
                            "aws:RequestTag/department": "${aws:PrincipalTag/department}"      
                },
                      "NumericLessThanEquals": {
                            "s3:RequestJobPriority": 300      
                }    
            }  
        },
          {
                "Effect": "Allow",
                "Action": [
                      "s3:UpdateJobStatus"    
            ],
                "Resource": "*",
                "Condition": {
                      "StringEquals": {
                            "aws:ResourceTag/department": "${aws:PrincipalTag/department}"      
                }    
            }  
        },
          {
                "Effect": "Allow",
                "Action": "s3:UpdateJobPriority",
                "Resource": "*",
                "Condition": {
                      "ForAnyValue:StringEquals": {
                            "aws:ResourceTag/stage": [
                                  "QA",
                                  "Production"        
                    ]      
                },
                      "StringEquals": {
                            "aws:ResourceTag/department": "${aws:PrincipalTag/department}"      
                },
                      "NumericLessThanEquals": {
                            "s3:RequestJobPriority": 300      
                }    
            }  
        },
          {
                "Effect": "Allow",
                "Action": "s3:PutJobTagging",
                "Resource": "*",
                "Condition": {
                      "StringEquals": {
                            "aws:RequestTag/department": "${aws:PrincipalTag/department}",
                            "aws:ResourceTag/department": "${aws:PrincipalTag/department}"      
                },
                      "ForAnyValue:StringEquals": {
                            "aws:RequestTag/stage": [
                                  "QA",
                                  "Production"        
                    ],
                            "aws:ResourceTag/stage": [
                                  "QA",
                                  "Production"        
                    ]      
                }    
            }  
        }  
    ]
}
```

------