IAM アクセス許可を使用して起動テンプレートへのアクセスを制御する - Amazon Elastic Compute Cloud

IAM アクセス許可を使用して起動テンプレートへのアクセスを制御する

IAM アクセス許可を使用して、起動テンプレートの表示、作成、削除など、ユーザーが実行できる起動テンプレートのアクションを制御できます。

起動テンプレートと起動テンプレートのバージョンを作成するアクセス許可をユーザーに付与する場合、リソースレベルのアクセス許可では、起動テンプレートで指定できるリソースを制限することはできません。したがって、起動テンプレートと起動テンプレートのバージョンを作成するアクセス許可を、適切な管理者のみに付与していることを確認してください。

起動テンプレートを使用するユーザーには、起動テンプレートで指定されたリソースの作成とアクセスに必要なアクセス許可を付与しなければなりません。例:

  • 共有のプライベート Amazon マシンイメージ (AMI) からインスタンスを起動するには、ユーザーに AMI の起動許可が必要です。

  • 既存のスナップショットからタグ付きの EBS ボリュームを作成するには、ユーザーはスナップショットへの読み取りのアクセス許可と、ボリュームを作成してタグ付けを行うためのアクセス許可が必要です。

ec2:CreateLaunchTemplate

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

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

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

起動テンプレートを作成するプリンシパルには、次のような関連するアクセス許可が必要な場合があります。

  • ec2:CreateTagsCreateLaunchTemplate 操作時に起動テンプレートにタグを追加するには、CreateLaunchTemplate の呼び出し元が IAM ポリシーで ec2:CreateTags アクセス許可を持っている必要があります。

  • ec2:RunInstances – 作成した起動テンプレートから EC2 インスタンスを起動するには、プリンシパルは IAM ポリシーで ec2:RunInstances アクセス許可も持っている必要があります。

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

{ "Sid": "IAMPolicyForTaggingLaunchTemplatesOnCreation", "Action": "ec2:CreateTags", "Effect": "Allow", "Resource": "arn:aws:ec2:region:account-id:launch-template/*", "Condition": { "StringEquals": { "ec2:CreateAction": "CreateLaunchTemplate" } } }

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

ec2:DescribeLaunchTemplates

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

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

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

ec2:DescribeLaunchTemplateVersions

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

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

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

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

ec2:DeleteLaunchTemplate

重要

プリンシパルにリソースを削除する許可を与えるときは、注意する必要があります。起動テンプレートを削除すると、起動テンプレートに依存する 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:region:account-id:launch-template/lt-09477bcd97b0d310e"

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

バージョニングアクセス許可の制御

信頼できる管理者には、以下の例のように 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

起動テンプレートの新しいバージョンを作成するには、プリンシパルが 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

重要

プリンシパルにリソースを削除する権限を与えるときは、いつものように注意する必要があります。起動テンプレートのバージョンを削除すると、起動テンプレートのバージョンに依存する 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

起動テンプレートに関連付けられている 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" } } }

起動テンプレートのタグへのアクセスを制御する

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

{ "Sid": "IAMPolicyForDeletingTagsOnLaunchTemplates", "Action": "ec2:DeleteTags", "Effect": "Allow", "Resource": "arn:aws:ec2:region:account-id:launch-template/*", "Condition": { "ForAllValues:StringEquals": { "aws:TagKeys": ["temporary"] } } }

Amazon EC2 リソースに適用できるタグキーとタグ値を制御するのに使用できる条件キーの詳細については、「特定のタグへのアクセスの制御」を参照してください。