

# Amazon EC2 起動テンプレートに必要な IAM アクセス許可
<a name="permissions-for-launch-templates"></a>

IAM アクセス許可を使用して、ユーザーが起動テンプレートまたは起動テンプレートのバージョンをリスト、表示、作成、または削除できるかどうかを制御できます。

**重要**  
リソースレベルのアクセス許可を使用して、ユーザーが起動テンプレートまたは起動テンプレートのバージョンを作成するときに起動テンプレートで指定できるリソースを制限することはできません。したがって、信頼できる管理者のみに起動テンプレートと起動テンプレートのバージョンを作成するアクセス許可が与えられるようにしてください。

起動テンプレートを使用するユーザーには、起動テンプレートで指定されたリソースの作成とアクセスに必要なアクセス許可を付与しなければなりません。例えば、次のようになります。
+ 共有のプライベート Amazon マシンイメージ (AMI) からインスタンスを起動するには、ユーザーに AMI の起動許可が必要です。
+ 既存のスナップショットからタグ付きの EBS ボリュームを作成するには、ユーザーはスナップショットへの読み取りのアクセス許可と、ボリュームを作成してタグ付けを行うためのアクセス許可が必要です。

**Topics**
+ [ec2:CreateLaunchTemplate](#permissions-for-launch-templates-create)
+ [ec2:DescribeLaunchTemplates](#permissions-for-launch-templates-view)
+ [ec2:DescribeLaunchTemplateVersions](#permissions-for-launch-template-versions-view)
+ [ec2:DeleteLaunchTemplate](#permissions-for-launch-templates-delete)
+ [バージョニングアクセス許可の制御](#permissions-for-launch-template-versions)
+ [起動テンプレートのタグへのアクセスを制御する](#permissions-for-launch-templates-tags)

## ec2:CreateLaunchTemplate
<a name="permissions-for-launch-templates-create"></a>

コンソールで、または API を使用して起動テンプレートを作成するには、プリンシパルが IAM ポリシーで `ec2:CreateLaunchTemplate` アクセス許可を持っている必要があります。可能な限り、タグを使用してアカウントで起動テンプレートへのアクセスを制御できるようにします。

例えば、次の IAM ポリシーステートメントは、テンプレートが指定されたタグ ({{`purpose`}}={{`testing`}}) を使用している場合にのみ、プリンシパルに起動テンプレートを作成する許可を付与します。

```
{
    "Sid": "IAMPolicyForCreatingTaggedLaunchTemplates",
    "Action": "ec2:CreateLaunchTemplate",
    "Effect": "Allow",
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "aws:ResourceTag/{{purpose}}": "{{testing}}"
        }
    }
}
```

起動テンプレートを作成するプリンシパルには、次のような関連するアクセス許可が必要な場合があります。
+ **ec2:CreateTags** — `CreateLaunchTemplate` 操作時に起動テンプレートにタグを追加するには、`CreateLaunchTemplate` の呼び出し元が IAM ポリシーで `ec2:CreateTags` アクセス許可を持っている必要があります。
+ **ec2:RunInstances** – 作成した起動テンプレートから EC2 インスタンスを起動するには、プリンシパルは IAM ポリシーで `ec2:RunInstances` アクセス許可も持っている必要があります。

タグを適用するリソース作成アクションでは、ユーザーが `ec2:CreateTags` アクセス許可を持っている必要があります。次の IAM ポリシーステートメントは、`ec2:CreateAction` 条件キーを使用して、ユーザーが `CreateLaunchTemplate` のコンテキストでのみタグを使用できるようにしています。ユーザーは、既存の起動テンプレートにも他のリソースにもタグ付けできません。詳細については、「[Amazon EC2 リソース作成時にタグ付けするアクセス許可の付与](supported-iam-actions-tagging.md)」を参照してください。

```
{
    "Sid": "IAMPolicyForTaggingLaunchTemplatesOnCreation",
    "Action": "ec2:CreateTags",
    "Effect": "Allow",
    "Resource": "arn:aws:ec2:{{us-east-1}}:{{111122223333}}:launch-template/*",
    "Condition": {
        "StringEquals": {
            "ec2:CreateAction": "CreateLaunchTemplate"
        }
    }
}
```

起動テンプレートを作成した IAM ユーザーに、作成した起動テンプレートを使用するアクセス許可が自動で付与されることはありません。他のプリンシパルと同様に、起動テンプレートの作成者は、IAM ポリシーを使用してアクセス許可を取得する必要があります。IAM ユーザーが起動テンプレートから EC2 インスタンスを起動する場合は、`ec2:RunInstances` アクセス許可が必要です。このアクセス許可を付与するときに、ユーザーが特定のタグまたは特定の ID を含む起動テンプレートのみを使用できるように指定できます。また、`RunInstances` 呼び出しに対するリソースレベルのアクセス許可を指定することで、起動テンプレートを使用するすべてのユーザーがインスタンスの起動時に参照および使用できる AMI やその他のリソースを制御できます。エンドポイントポリシーの例については、「[起動テンプレート](ExamplePolicies_EC2.md#iam-example-runinstances-launch-templates)」を参照してください。

## ec2:DescribeLaunchTemplates
<a name="permissions-for-launch-templates-view"></a>

アカウントの起動テンプレートをリストおよび表示するには、プリンシパルが IAM ポリシーで `ec2:DescribeLaunchTemplates` アクセス許可を持っている必要があります。`Describe` アクションはリソースレベルのアクセス許可をサポートしていないため、条件なしで指定する必要があります。また、ポリシーのリソース要素の値は `"*"` である必要があります。

例えば、次の IAM ポリシーステートメントでは、アカウントのすべての起動テンプレートをリストおよび表示する許可をプリンシパルに付与します。

```
{
    "Sid": "IAMPolicyForDescribingLaunchTemplates",
    "Action": "ec2:DescribeLaunchTemplates",
    "Effect": "Allow",
    "Resource": "*"
}
```

## ec2:DescribeLaunchTemplateVersions
<a name="permissions-for-launch-template-versions-view"></a>

起動テンプレートをリストおよび表示するプリンシパルは、起動テンプレートを構成する属性セット全体を取得するための `ec2:DescribeLaunchTemplateVersions` アクセス許可も持つようにしてください。

アカウントの起動テンプレートのバージョンをリストおよび表示するには、プリンシパルが IAM ポリシーで `ec2:DescribeLaunchTemplateVersions` アクセス許可を持っている必要があります。`Describe` アクションはリソースレベルのアクセス許可をサポートしていないため、条件なしで指定する必要があります。また、ポリシーのリソース要素の値は `"*"` である必要があります。

例えば、次の IAM ポリシーステートメントでは、アカウントにおけるすべての起動テンプレートのバージョンをリストおよび表示する許可をプリンシパルに付与します。

```
{
    "Sid": "IAMPolicyForDescribingLaunchTemplateVersions",
    "Effect": "Allow",
    "Action": "ec2:DescribeLaunchTemplateVersions",
    "Resource": "*"
}
```

## ec2:DeleteLaunchTemplate
<a name="permissions-for-launch-templates-delete"></a>

**重要**  
プリンシパルにリソースを削除する許可を与えるときは、注意する必要があります。起動テンプレートを削除すると、起動テンプレートに依存する AWS リソースに障害が発生する可能性があります。

起動テンプレートを削除するには、プリンシパルが IAM ポリシーで `ec2:DeleteLaunchTemplate` アクセス許可を持っている必要があります。可能な限り、タグベースの条件キーを使用してアクセス許可を制限します。

例えば、次の IAM ポリシーステートメントは、テンプレートが指定されたタグ ({{`purpose`}}={{`testing`}}) がある場合にのみ、プリンシパルに起動テンプレートを削除する許可を付与します。

```
{
    "Sid": "IAMPolicyForDeletingLaunchTemplates",
    "Action": "ec2:DeleteLaunchTemplate",
    "Effect": "Allow",
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "aws:ResourceTag/{{purpose}}": "{{testing}}"
        }
    }
}
```

または、ARN を使用して IAM ポリシーが適用される起動テンプレートを指定することもできます。

起動テンプレートには次の ARN が含まれます。

```
"Resource": "arn:aws:ec2:{{us-east-1}}:{{111122223333}}:launch-template/{{lt-09477bcd97b0d310e}}"
```

複数の ARN を一覧で囲んで指定することも、`Condition` 要素を使用せず `Resource` 値に `"*"` を指定して、プリンシパルがアカウントの任意の起動テンプレートを削除できるようにすることもできます。

## バージョニングアクセス許可の制御
<a name="permissions-for-launch-template-versions"></a>

信頼できる管理者には、以下の例のように IAM ポリシーを使用して、起動テンプレートのバージョンを作成および削除したり、起動テンプレートのデフォルトバージョンを変更したりするためのアクセス許可を付与できます。

**重要**  
起動テンプレートのバージョンを作成したり、起動テンプレートを変更したりするアクセス許可をプリンシパルに付与する場合は、注意が必要です。  
起動テンプレートのバージョンを作成すると、Amazon EC2 がユーザーに代わって `Latest` バージョンでインスタンスを起動できるようにするすべての AWS リソースに影響します。
起動テンプレートを変更すると、どのバージョンが `Default` になるかを変更できます。したがって、Amazon EC2 がこの変更済みバージョンを使用してユーザーに代わってインスタンスを起動できるようにするすべての AWS リソースに影響します。
また、EC2 フリートやスポットフリートなど、`Latest` または `Default` の起動テンプレートバージョンとやり取りする AWS リソースの取り扱い方にも注意が必要です。「`Latest`」または「`Default`」に別の起動テンプレートバージョンが使用されている場合、Amazon EC2 は、フリートの目標容量を満たすために新しいインスタンスを起動する際に、完了すべきアクションのユーザーアクセス許可を再確認することはありません。これは、AWS リソースとユーザーのやり取りがないためです。`CreateLaunchTemplateVersion` API と `ModifyLaunchTemplate` API を呼び出すアクセス許可をユーザーに付与すると、インスタンスプロファイル (IAM ロールのコンテナ) を含む別の起動テンプレートバージョンをフリートに指定する場合、ユーザーに `iam:PassRole` アクセス許可も効果的に付与できます。つまり、場合によっては `iam:PassRole` アクセス許可がなくても、起動テンプレートを更新して IAM ロールをインスタンスに渡すことができます。このリスクは、起動テンプレートバージョンを作成および管理できるユーザーにアクセス許可を付与する際に注意することで管理できます。

### ec2:CreateLaunchTemplateVersion
<a name="permissions-for-launch-template-versions-create"></a>

起動テンプレートの新しいバージョンを作成するには、プリンシパルが IAM ポリシーで起動テンプレートに対する `ec2:CreateLaunchTemplateVersion` アクセス許可を持っている必要があります。

例えば、次の IAM ポリシーステートメントは、バージョンが指定されたタグ ({{`environment`}}={{`production`}}) を使用している場合にのみ、プリンシパルに起動テンプレートのバージョンを作成する許可を付与します。あるいは、1 つまたは複数の起動テンプレートの ARN を指定することも、`Condition` 要素を使用せず `Resource` 値に `"*"` を指定して、プリンシパルがアカウントにおける任意の起動テンプレートのバージョンを作成できるようにすることもできます。

```
{
    "Sid": "IAMPolicyForCreatingLaunchTemplateVersions",
    "Action": "ec2:CreateLaunchTemplateVersion",
    "Effect": "Allow",
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "aws:ResourceTag/{{environment}}": "{{production}}"
        }
    }
}
```

### ec2:DeleteLaunchTemplateVersion
<a name="permissions-for-launch-template-versions-delete"></a>

**重要**  
プリンシパルにリソースを削除する権限を与えるときは、いつものように注意する必要があります。起動テンプレートのバージョンを削除すると、起動テンプレートのバージョンに依存する AWS リソースに障害が発生する可能性があります。

起動テンプレートのバージョンを削除するには、プリンシパルが IAM ポリシーで起動テンプレートに対する `ec2:DeleteLaunchTemplateVersion` アクセス許可を持っている必要があります。

例えば、次の IAM ポリシーステートメントは、バージョンが指定されたタグ ({{`environment`}}={{`production`}}) を使用している場合にのみ、プリンシパルに起動テンプレートのバージョンを削除する許可を付与します。あるいは、1 つまたは複数の起動テンプレートの ARN を指定することも、`Condition` 要素を使用せず `Resource` 値に `"*"` を指定して、プリンシパルがアカウントにおける任意の起動テンプレートのバージョンを削除できるようにすることもできます。

```
{
    "Sid": "IAMPolicyForDeletingLaunchTemplateVersions",
    "Action": "ec2:DeleteLaunchTemplateVersion",
    "Effect": "Allow",
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "aws:ResourceTag/{{environment}}": "{{production}}"
        }
    }
}
```

### ec2:ModifyLaunchTemplate
<a name="permissions-for-launch-templates-update"></a>

起動テンプレートに関連付けられている `Default` バージョンを変更するには、プリンシパルが IAM ポリシーで起動テンプレートに対する `ec2:ModifyLaunchTemplate` アクセス許可を持っている必要があります。

例えば、次の IAM ポリシーステートメントは、起動テンプレートが指定されたタグ ({{`environment`}}={{`production`}}) を使用している場合にのみ、プリンシパルに起動テンプレートを変更する許可を付与します。あるいは、1 つまたは複数の起動テンプレートの ARN を指定することも、`Condition` 要素を使用せず `Resource` 値に `"*"` を指定して、プリンシパルがアカウントにおける任意の起動テンプレートのバージョンを変更できるようにすることもできます。

```
{
    "Sid": "IAMPolicyForModifyingLaunchTemplates",
    "Action": "ec2:ModifyLaunchTemplate",
    "Effect": "Allow",
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "aws:ResourceTag/{{environment}}": "{{production}}"
        }
    }
}
```

## 起動テンプレートのタグへのアクセスを制御する
<a name="permissions-for-launch-templates-tags"></a>

リソースが起動テンプレートの場合、条件キーを使用してタグ付け許可を制限できます。例えば、次の IAM ポリシーでは、指定されたアカウントとリージョンの起動テンプレートから `{{temporary}}` キーを持つタグのみを削除できます。

```
{
    "Sid": "IAMPolicyForDeletingTagsOnLaunchTemplates",
    "Action": "ec2:DeleteTags",
    "Effect": "Allow",
    "Resource": "arn:aws:ec2:{{us-east-1}}:{{111122223333}}:launch-template/*",
    "Condition": {
        "ForAllValues:StringEquals": {
            "aws:TagKeys": ["{{temporary}}"]
        }
    }
}
```

Amazon EC2 リソースに適用できるタグキーとタグ値を制御するのに使用できる条件キーの詳細については、「[特定のタグへのアクセスの制御](supported-iam-actions-tagging.md#control-tagging)」を参照してください。