Auto Scaling グループで Amazon EC2 起動テンプレートの使用を制御する - Amazon EC2 Auto Scaling

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Auto Scaling グループで Amazon EC2 起動テンプレートの使用を制御する

Amazon EC2 Auto Scaling は、Auto Scaling グループでの Amazon EC2 起動テンプレートの使用をサポートしています。起動テンプレートから Auto Scaling グループを作成することをユーザーに許可することをお勧めします。これにより、ユーザーは Amazon EC2 Auto Scaling と Amazon EC2 の最新機能を使用できます。例えば、ユーザーは混合インスタンスポリシーを使用するための起動テンプレートを指定する必要があります。

AmazonEC2FullAccess ポリシーを使用すると、アカウント内の Amazon EC2 Auto Scaling リソース、起動テンプレート、およびその他の EC2 リソースを使用するための完全なアクセス許可をユーザーに付与できます。または、このトピックで説明するように、独自のカスタム IAM ポリシーを作成して、起動テンプレートを使用するきめ細かなアクセス許可をユーザーに付与することもできます。

独自の用途に合わせてカスタマイズできるサンプルポリシー

次に、独自の用途に合わせてカスタマイズできる基本アクセス許可ポリシーの例を表示します。ポリシーは、グループが purpose=testing タグを使用している場合に限り、すべての Auto Scaling グループを作成、更新、削除することを許可します。その後、すべての Describe アクションに許可を与えます。Describe アクションはリソースレベルの許可をサポートしないため、条件のない別のステートメントで指定する必要があります。

このポリシーを持つ IAM アイデンティティ (ユーザーまたはロール) は、ec2:RunInstances アクションを使用する許可も与えられているため、起動テンプレートを使用して Auto Scaling グループを作成または更新する許可があります。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "autoscaling:CreateAutoScalingGroup", "autoscaling:UpdateAutoScalingGroup", "autoscaling:DeleteAutoScalingGroup" ], "Resource": "*", "Condition": { "StringEquals": { "autoscaling:ResourceTag/purpose": "testing" } } }, { "Effect": "Allow", "Action": [ "autoscaling:Describe*", "ec2:RunInstances" ], "Resource": "*" } ] }

Auto Scaling グループを作成または更新するユーザーには、関連する次のような権限が必要になる場合があります。

インスタンス起動時に完了するアクションに対するこれらのアクセス許可は、ユーザーが Auto Scaling グループを操作するときにチェックされます。詳細については、「ec2:RunInstances と iam:PassRole の許可の検証」を参照してください。

次の例では、IAM ユーザーが起動テンプレートを使用するためのアクセスを制御できる、ポリシーステートメントを示しています。

特定のタグを持つ起動テンプレートを要求する

ec2:RunInstances アクセス許可を付与する場合、ユーザーが特定のタグまたは特定の ID を持つ起動テンプレートのみを使用できるように指定すると、起動テンプレートを使用してインスタンスを起動する際にアクセス許可を制限できます。また、RunInstances 呼び出しに対するリソースレベルの追加のアクセス許可を指定することで、起動テンプレートを使用するすべてのユーザーがインスタンスの起動時に参照および使用できる AMI やその他のリソースを制御できます。

次の例では、指定されたリージョンにある起動テンプレートを持ち、タグ purpose=testing を持つ ec2:RunInstances アクションへのアクセス許可を制限します。また、ユーザーは起動テンプレートで指定されているリソース (AMI、インスタンスタイプ、ボリューム、キーペア、ネットワークインターフェイス、セキュリティグループ) にもアクセスできるようになります。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:region:account-id:launch-template/*", "Condition": { "StringEquals": { "aws:ResourceTag/purpose": "testing" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region::image/ami-*", "arn:aws:ec2:region:account-id:instance/*", "arn:aws:ec2:region:account-id:subnet/*", "arn:aws:ec2:region:account-id:volume/*", "arn:aws:ec2:region:account-id:key-pair/*", "arn:aws:ec2:region:account-id:network-interface/*", "arn:aws:ec2:region:account-id:security-group/*" ] } ] }

起動テンプレートでタグベースのポリシーを使用する方法の詳細については、「Amazon EC2 ユーザーガイド」の「IAM アクセス許可を使用して起動テンプレートへのアクセスを制御する」を参照してください。 Amazon EC2

起動テンプレートとバージョン番号を要求する

IAM のアクセス許可を使用して、Auto Scaling グループを作成または更新するときに、起動テンプレートと、起動テンプレートのバージョン番号を指定するように強制することもできます。

次の例では、起動テンプレートおよび起動テンプレートのバージョン番号が指定されている場合にのみ、ユーザーが Auto Scaling グループを作成および更新できるようにします。このポリシーを持つユーザーが、$Latest または $Default の起動テンプレートのバージョンを指定するためのバージョン番号を省略したり、代わりに起動設定を使用しようとしたりすると、アクションは失敗します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "autoscaling:CreateAutoScalingGroup", "autoscaling:UpdateAutoScalingGroup" ], "Resource": "*", "Condition": { "Bool": { "autoscaling:LaunchTemplateVersionSpecified": "true" } } }, { "Effect": "Deny", "Action": [ "autoscaling:CreateAutoScalingGroup", "autoscaling:UpdateAutoScalingGroup" ], "Resource": "*", "Condition": { "Null": { "autoscaling:LaunchConfigurationName": "false" } } } ] }

インスタンスメタデータサービスバージョン 2 (IMDSv2) の使用を要求する

セキュリティを強化するために、IMDSv2 を必要とする起動テンプレートの使用を要求するようにユーザーのアクセス許可を設定できます。詳細については、「Amazon EC2 ユーザーガイド」の「インスタンスメタデータサービスの設定」を参照してください。 Amazon EC2

次のポリシーでは、IMDSv2 の使用を要求するようにインスタンスもオプトインされていない限り("ec2:MetadataHttpTokens":"required" で指定)、ユーザーは ec2:RunInstances アクションを呼び出せないことを示しています。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RequireImdsV2", "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringNotEquals": { "ec2:MetadataHttpTokens": "required" } } } ] }
ヒント

インスタンスのメタデータオプションが設定された、新しい起動テンプレートまたは新しいバージョンの起動テンプレートを使用している、代替の Auto Scaling インスタンスを強制的に起動することで、インスタンスの更新を開始できます。詳細については、「Auto Scaling インスタンスの更新」を参照してください。

Amazon EC2 リソースへのアクセスを制限する

次の例では、Amazon EC2 リソースへのアクセスを制限してユーザーが起動できるインスタンスの設定を制御します。起動テンプレートで指定されたリソースにリソースレベルのアクセス許可を指定するには、RunInstances アクションステートメントにそのリソースを含める必要があります

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region:account-id:launch-template/*", "arn:aws:ec2:region::image/ami-04d5cc9b88example", "arn:aws:ec2:region:account-id:subnet/subnet-1a2b3c4d", "arn:aws:ec2:region:account-id:volume/*", "arn:aws:ec2:region:account-id:key-pair/*", "arn:aws:ec2:region:account-id:network-interface/*", "arn:aws:ec2:region:account-id:security-group/sg-903004f88example" ] }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:region:account-id:instance/*", "Condition": { "StringEquals": { "ec2:InstanceType": ["t2.micro", "t2.small"] } } } ] }

この例には、 2 つのステートメントがあります。

  • 1 番目のステートメントは、ユーザーが、特定のセキュリティグループ (sg-903004f88example) と、特定の AMI (ami-04d5cc9b88example) を使用して、特定のサブネット (subnet-1a2b3c4d) でインスタンスを起動することを要求します。また、ユーザーは起動テンプレートで指定されているリソース (ネットワークインターフェイス、キーペア、ボリューム) にもアクセスできるようになります。

  • 2 番目のステートメントでは、ユーザーは t2.micro または t2.small インスタンスタイプのみを使用してインスタンスを起動でき、コストを管理できます。

    ただし、起動テンプレートを使用してインスタンスを起動するアクセス許可を持つユーザーが他のインスタンスタイプを起動することを完全に防ぐ効果的な方法は現在ないことに注意してください。これは、起動テンプレートで指定されたインスタンスタイプを上書きして、属性ベースのインスタンスタイプの選択を使用して定義されたインスタンスタイプを使用できるためです。

ユーザーが起動するインスタンスの設定の制御に使用できるリソースレベルのアクセス許可の完全なリストについては、「サービス認可リファレンス」の「Amazon EC2 のアクション、リソース、および条件キー」を参照してください。

インスタンスおよびボリュームにタグ付けするために必要なアクセス許可

次の例では、インスタンスとボリュームの作成時に、以下のタグを付けることをユーザーに許可します。このポリシーは、起動テンプレートにタグが指定されている場合に必要です。詳細については、「Amazon EC2 ユーザーガイド」の「作成時にリソースにタグを付けるアクセス許可を付与する」を参照してください。 Amazon EC2

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "arn:aws:ec2:region:account-id:*/*", "Condition": { "StringEquals": { "ec2:CreateAction": "RunInstances" } } } ] }

起動テンプレートの追加アクセス許可

コンソールユーザーには、ec2:DescribeLaunchTemplatesおよびec2:DescribeLaunchTemplateVersionsアクションへのアクセス許可を与える必要があります。これらのアクセス許可なしでは、起動テンプレートとネットワークオプションが Auto Scaling グループウィザードに読み込まれないため、ユーザーはウィザードをステップ実行できず、起動テンプレートを使用してインスタンスを起動することができません。これらの追加のアクションは、IAM ポリシーステートメントの Action 要素で指定できます。

ec2:RunInstances と iam:PassRole の許可の検証

ユーザーは、Auto Scaling グループが使用する起動テンプレートのバージョンを指定できます。許可に応じて、これは特定の番号付きバージョン、または起動テンプレートの $Latest もしくは $Default バージョンになります。後者の場合は特に注意してください。これにより、制限することを意図していた ec2:RunInstances および iam:PassRole の許可がオーバーライドされる可能性があります。

このセクションでは、Auto Scaling グループで最新またはデフォルトバージョンの起動テンプレートを使用するシナリオについて説明します。

ユーザーが CreateAutoScalingGroupUpdateAutoScalingGroup、または StartInstanceRefresh API を呼び出すと、Amazon EC2 Auto Scaling は、リクエストを続行する前に、その時点での最新またはデフォルトのバージョンである起動テンプレートのバージョンに照らしてユーザーの許可をチェックします。これにより、インスタンスの起動時に完了するアクション(ec2:RunInstances や iam:PassRole アクションなど) の許可が検証されます。これを実現するために、Amazon EC2 のRunInstancesドライランコールを発行して、ユーザーが実際にリクエストを行うことなく、アクションに必要なアクセス許可を持っているかどうかを検証します。レスポンスが返されると、Amazon EC2 Auto Scaling がそのレスポンスを読み取ります。ユーザーの許可が所定のアクションが許可しない場合、Amazon EC2 Auto Scaling はリクエストを失敗させ、欠落している許可に関する情報が含まれたエラーをユーザーに返します。

初期検証とリクエストが完了すると、インスタンスが起動するたびに、Amazon EC2 Auto Scaling は、サービスにリンクされたロールの許可を使用して、変更されている場合でも最新またはデフォルトのバージョンを使用してインスタンスを起動します。つまり、起動テンプレートを使用しているユーザは、iam:PassRole アクセス許可を持っていなくても、インスタンスに IAM ロールを渡すように更新できる可能性があります。

$Latest または $Default バージョンを使用するようにグループを設定するアクセス許可を持つ人を制限したい場合は、autoscaling:LaunchTemplateVersionSpecified 条件キーを使用します。これにより、ユーザーが CreateAutoScalingGroup および UpdateAutoScalingGroup API を呼び出す際に、Auto Scaling グループが特定の番号付きバージョンのみを受け入れることが保証されます。この条件キーを IAM ポリシーに追加する方法を示す例については、「起動テンプレートとバージョン番号を要求する」を参照してください。

$Latest または $Default 起動テンプレートのバージョンを使用するように構成されているAuto Scalingグループについては、デフォルトの起動テンプレートのバージョンをユーザーが指定できる ec2:ModifyLaunchTemplate アクションを含め、起動テンプレートのバージョンを作成および管理できるユーザーを制限することを検討してください。詳細については、Amazon EC2 ユーザーガイド」の「バージョニング許可の制御」を参照してください。

起動テンプレートと起動テンプレートのバージョンを表示、作成、削除するアクセス許可の詳細については、「Amazon EC2 ユーザーガイド」の「IAM アクセス許可を使用して起動テンプレートへのアクセスを制御する」を参照してください。 Amazon EC2

RunInstances 呼び出しへのアクセスを制御するために使用できるリソースレベルのアクセス許可の詳細については、「サービス認可リファレンス」の「Amazon EC2 のアクション、リソース、および条件キー」を参照してください。