

# ジョブタグを使用したバッチオペレーションのアクセス許可の制御
<a name="batch-ops-job-tags-examples"></a>

Amazon S3 バッチオペレーションジョブの管理に役立つように、ジョブタグを追加できます。**ジョブタグを使用すると、バッチ操作ジョブへのアクセスをコントロールし、ジョブの作成時にタグが適用されるようにできます。

バッチ操作ジョブごとに最大 50 個のジョブタグを適用できます。タグを使用することで、ジョブを編集できるユーザーのセットを制限する詳細なポリシーを設定できます。ジョブタグを使用して、ユーザーによるジョブのキャンセル、確認状態にあるジョブの有効化、ジョブの優先度レベルの変更を許可したり制限したりできます。さらに、すべての新しいジョブにタグが適用されるようにし、タグに許可されるキーと値のペアを指定できます。これらのすべての条件を [AWS Identity and Access Management IAM ポリシー言語](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_iam-tags.html)を使用して表現できます。詳細については、「サービス認証リファレンス」の「[Actions, resources, and condition keys for 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 バッチオペレーションのジョブタグを使用して、部門内で実行されているジョブのみを作成および編集するアクセス権限をユーザーに付与します。QA や本番稼働など、関連する開発のステージに基づいてジョブを割り当てます。

以下の例では、次の部門を使用しています。各部門では、バッチオペレーションをさまざまな方法で使用しています。
+ 財務
+ コンプライアンス
+ ビジネスインテリジェンス
+ エンジニアリング

**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 は、ユーザーと AWS リソースの両方にタグを付けることでアクセス許可を定義する IAM 認可戦略です。

ユーザーとジョブには、以下の部門タグのいずれかが割り当てられます。

**キー : 値**
+ `department : Finance`
+ `department : Compliance`
+ `department : BusinessIntelligence`
+ `department : Engineering`
**注記**  
ジョブタグのキーと値は大文字と小文字が区別されます。

ABAC アクセスコントロール戦略を使用して、タグ `department=Finance` をユーザーと関連付けることで、財務部門のユーザーに対して、部門内で S3 バッチ操作ジョブを作成および管理するアクセス許可を付与します。

さらにマネージドポリシーを IAM ユーザーにアタッチして、社内のすべてのユーザーに、それぞれの部門内での S3 バッチ操作ジョブの作成または変更を許可できます。

この例のポリシーには、3 つのポリシーステートメントが含まれています。
+ ポリシーの最初のステートメントでは、ユーザーに対して、ジョブ作成リクエストにそれぞれの部門に一致するジョブタグが含まれている場合に、バッチ操作ジョブの作成を許可しています。これは、`"${aws:PrincipalTag/department}"` 構文を使用して表現され、ポリシー評価時にユーザーの部門タグに置き換えられます。リクエスト `("aws:RequestTag/department")` の部門タグに指定した値がユーザーの部門と一致すると、条件が満たされます。
+ ポリシーの 2 番目のステートメントでは、ユーザーに対して、更新対象のジョブがそのユーザーの部門と一致する場合に、ジョブの優先度の変更、ジョブのステータスの更新を許可しています。
+ 3 番目のステートメントでは、ユーザーに対して、(1) 部門タグが保持され、(2) 更新対象のジョブが部門内にある限り、`PutJobTagging` リクエストによりいつでもバッチ操作ジョブのタグを更新することを許可しています。

------
#### [ 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 バッチ操作ジョブの作成と更新に対して、部門ベースの制限に加えて 2 つの新しい制限を導入します。
+ ジョブにタグ `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"        
                    ]      
                }    
            }  
        }  
    ]
}
```

------