

# Amazon EC2 リソース作成時にタグ付けするアクセス許可の付与
<a name="supported-iam-actions-tagging"></a>

一部のリソース作成 Amazon EC2 API アクションではリソースの作成時にタグを指定できます。リソースタグを使用して、属性ベースの制御 (ABAC) を実装できます。詳細については[リソースのタグ付け](Using_Tags.md#tag-resources)および[属性ベースのアクセスを使用するアクセスの制御](iam-policies-for-amazon-ec2.md#control-access-with-tags)を参照してください。

ユーザーがリソースの作成時にタグを付けるにはリソースを作成するアクション (`ec2:RunInstances` や `ec2:CreateVolume` など) を使用するためのアクセス許可が必要です。タグがリソース作成アクションで指定されている場合、Amazon は `ec2:CreateTags` アクションで追加の認可を実行してユーザーがタグを作成するアクセス許可を持っているかどうかを確認します。そのため、ユーザーには`ec2:CreateTags` アクションを使用する明示的なアクセス権限が必要です。

`ec2:CreateTags` アクションの IAM ポリシー定義で、`Condition` 要素と `ec2:CreateAction` 条件キーを使用して、リソースを作成するアクションにタグ付けのアクセス許可を付与します。

次のポリシー例ではインスタンスを起動し、起動時にインスタンスとボリュームにタグを適用することをユーザーに許可します。ユーザーには既存のリソースへのタグ付けが許可されません (`ec2:CreateTags` アクションを直接呼び出すことはできません)。

```
{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
         "ec2:RunInstances"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
         "ec2:CreateTags"
      ],
      "Resource": "arn:aws:ec2:us-east-1:111122223333:*/*",
      "Condition": {
         "StringEquals": {
             "ec2:CreateAction" : "RunInstances"
          }
       }
    }
  ]
}
```

同様に、次のポリシーではユーザーがボリュームを作成し、ボリューム作成時にボリュームにタグを適用することができます。ユーザーには既存のリソースへのタグ付けが許可されません (`ec2:CreateTags` アクションを直接呼び出すことはできません)。

```
{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
         "ec2:CreateVolume"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
         "ec2:CreateTags"
      ],
      "Resource": "arn:aws:ec2:us-east-1:111122223333:*/*",
      "Condition": {
         "StringEquals": {
             "ec2:CreateAction" : "CreateVolume"
          }
       }
    }
  ]
}
```

`ec2:CreateTags` アクションはタグがリソース作成アクション時に適用された場合のみ評価されます。したがって、リクエストでタグが指定されていない場合、リソースを作成するアクセス許可を持っているユーザー (タグ付け条件がないと仮定) には`ec2:CreateTags` アクションを実行するアクセス許可は必要ありません。ただし、ユーザーがタグを使用してリソースを作成しようとした場合、ユーザーが `ec2:CreateTags` アクションを使用するアクセス権限を持っていない場合はリクエストに失敗します。

`ec2:CreateTags` アクションはタグが起動テンプレートに指定されている場合にも評価されます。ポリシーの例については[起動テンプレートのタグ](ExamplePolicies_EC2.md#iam-example-tags-launch-template)を参照してください。

## 特定のタグへのアクセスの制御
<a name="control-tagging"></a>

IAM ポリシーの `Condition` 要素で追加の条件を使用して、リソースに適用できるタグキーとタグ値を制御できます。

次の条件キーは前のセクションの例で使用できます。
+ `aws:RequestTag`: 特定のタグキーまたはタグキーと値がリクエストに存在している必要があることを指定する場合に使用します。リクエストでは他のタグも指定できます。
  + `StringEquals` 条件演算子とともに使用して、特定のタグキーと値の組み合わせを適用します。例えば、タグ `cost-center`=`cc123`: を適用します。

    ```
    "StringEquals": { "aws:RequestTag/cost-center": "cc123" }
    ```
  + `StringLike` 条件演算子とともに使用して、リクエストで特定のタグキーを適用します。例えば、タグキー `purpose` を適用します。

    ```
    "StringLike": { "aws:RequestTag/purpose": "*" }
    ```
+ `aws:TagKeys`: リクエストで使用されるタグキーを適用する場合に使用します。
  + リクエストにタグが指定されている場合は`ForAllValues` 修飾子を使用して特定のタグキーのみを適用します (リクエストにタグが指定されている場合、特定のタグキーのみが許可されます。他のタグは許可されません)。例えば、タグキー `environment` または `cost-center` が適用されます:

    ```
    "ForAllValues:StringEquals": { "aws:TagKeys": ["environment","cost-center"] }
    ```
  + `ForAnyValue` 修飾子とともに使用して、指定されたタグキーの少なくとも 1 つがリクエストに存在することを要求します。例えば、タグキー `environment` または `webserver` のうち少なくとも 1 つがリクエストに存在している必要があります。

    ```
    "ForAnyValue:StringEquals": { "aws:TagKeys": ["environment","webserver"] }
    ```

これらの条件キータグ付けをサポートするリソース作成アクションと、`ec2:CreateTags` および `ec2:DeleteTags` アクションに適用できます。Amazon EC2 API アクションがタグ付けをサポートしているかどうかについては[Amazon EC2 のアクション、リソース、および条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html)を参照してください

リソースの作成時にタグを指定するようにユーザーに強制するにはリソース作成アクションで `aws:RequestTag` 修飾子とともに `aws:TagKeys` 条件キーまたは `ForAnyValue` 条件キーを使用する必要があります。ユーザーがリソース作成アクションのタグを指定しない場合、`ec2:CreateTags` アクションは評価されません。

条件においては条件キーでは大文字と小文字が区別されず、条件値では大文字と小文字が区別されます。したがって、タグキーの大文字と小文字を区別するには条件の値としてタグキーが指定される `aws:TagKeys` 条件キーを使用します。

IAM ポリシーの例は[Amazon EC2 API へのアクセスを制御するポリシーの例](ExamplePolicies_EC2.md)を参照してください。詳細については「*IAM ユーザーガイド*」の「[複数のキーまたは値を含む IAM 条件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-logic-multiple-context-keys-or-values.html)」参照してください。