Amazon EC2 Auto Scaling アイデンティティベースのポリシーの例 - Amazon EC2 Auto Scaling

Amazon EC2 Auto Scaling アイデンティティベースのポリシーの例

デフォルトで、まったく新しい IAM ユーザーには、何かを実行する許可は一切ありません。IAM 管理者は、Amazon EC2 Auto Scaling API アクションを実行するためのアクセス許可をエンドユーザーに付与する IAM ポリシーを作成して割り当てる必要があります。

これらの JSON ポリシードキュメント例を使用して IAM ポリシーを作成する方法については、IAM ユーザーガイドの「JSON タブでのポリシーの作成」を参照してください。

以下に示しているのは、アクセス許可ポリシーの例です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "autoscaling:CreateAutoScalingGroup", "autoscaling:UpdateAutoScalingGroup", "autoscaling:DeleteAutoScalingGroup" ], "Resource": "*", "Condition": { "StringEquals": { "autoscaling:ResourceTag/environment": "test" } } }, { "Effect": "Allow", "Action": [ "autoscaling:*LaunchConfiguration*", "autoscaling:Describe*" ], "Resource": "*" }] }

このサンプルポリシーでは、Auto Scaling グループで environment=test タグを使用している場合に限り、このグループを作成、変更、削除するアクセス許可をユーザーに付与します。起動設定はタグをサポートしておらず、Describe アクションはリソースレベルのアクセス権限をサポートしていないため、これらは条件なしで別のステートメントで指定する必要があります。IAM ポリシーステートメント内の要素の詳細については、「Amazon EC2 Auto Scaling のアイデンティティベースのポリシー」を参照してください。

ポリシーのベストプラクティス

ID ベースのポリシーは、ユーザーのアカウント内で誰かが Amazon EC2 Auto Scaling リソースを作成、アクセス、または削除できるどうかを決定します。これらのアクションを実行すると、AWS アカウント に追加料金が発生する可能性があります。アイデンティティベースポリシーを作成したり編集したりする際には、以下のガイドラインと推奨事項に従ってください。

  • AWS マネージドポリシーを使用して開始し、最小特権の許可に移行する – ユーザーとワークロードへの許可の付与を開始するには、多くの一般的なユースケースのために許可を付与する AWS マネージドポリシーを使用します。これらは AWS アカウント で使用できます。ユースケースに応じた AWS カスタマーマネージドポリシーを定義することで、許可をさらに減らすことをお勧めします。詳細については、「IAM ユーザーガイド」の「AWS マネージドポリシー」または「AWS ジョブ機能の管理ポリシー」を参照してください。

  • 最小特権を適用する – IAM ポリシーで許可を設定するときは、タスクの実行に必要な許可のみを付与します。これを行うには、特定の条件下で特定のリソースに対して実行できるアクションを定義します。これは、最小特権アクセス許可とも呼ばれています。IAM を使用して許可を適用する方法の詳細については、「IAM ユーザーガイド」の「IAM でのポリシーとアクセス許可」を参照してください。

  • IAM ポリシーで条件を使用してアクセスをさらに制限する – ポリシーに条件を追加して、アクションやリソースへのアクセスを制限できます。例えば、ポリシー条件を記述して、すべてのリクエストを SSL を使用して送信するように指定することができます。また、AWS のサービス などの特定の AWS CloudFormation を介して使用する場合、条件を使用してサービスアクションへのアクセスを許可することもできます。詳細については、[IAM User Guide] (IAM ユーザーガイド) の [IAM JSON policy elements: Condition] (IAM JSON ポリシー要素:条件) を参照してください。

  • IAM Access Analyzer を使用して IAM ポリシーを検証し、安全で機能的な許可を確保する - IAM Access Analyzer は、新規および既存のポリシーを検証して、ポリシーが IAM ポリシー言語 (JSON) および IAM のベストプラクティスに準拠するようにします。IAM Access Analyzer は 100 を超えるポリシーチェックと実用的な推奨事項を提供し、安全で機能的なポリシーを作成できるようサポートします。詳細については、「IAM ユーザーガイド」の「IAM Access Analyzer ポリシーの検証」を参照してください。

  • 多要素認証 (MFA) を要求する – アカウントで IAM ユーザーまたはルートユーザーを要求するシナリオがある場合は、セキュリティを強化するために MFA をオンにします。API オペレーションが呼び出されるときに MFA を必須にするには、ポリシーに MFA 条件を追加します。詳細については、「IAM ユーザーガイド」の「MFA 保護 API アクセスの設定」を参照してください。

IAM でのベストプラクティスの詳細については、「IAM ユーザーガイド」の「IAM でのセキュリティのベストプラクティス」を参照してください。

注記

Amazon EC2 Auto Scaling API アクションの中には、アクションによって作成/変更できるポリシー内に特定の Auto Scaling グループを持つことを許可するものもあります。これらのアクションの対象となるリソースを制限するには、Auto Scaling グループの ARN を個別に指定します。ただし、ベストプラクティスとして、特定のタグを持つ Auto Scaling グループに対するアクションを許可 (または拒否) するタグベースのポリシーを使用することをお勧めします。

カスタマーマネージドポリシーの例

独自のカスタム IAM ポリシーを作成して、IAM ユーザーまたはグループが Amazon EC2 Auto Scaling アクションを実行するためのアクセス許可を付与または拒否することができます。これらのカスタムポリシーは、指定されたアクセス許可が必要な IAM ユーザーまたはグループにアタッチできます。次の例では、いくつかの一般的ユースケースのアクセス許可を示します。

初めてポリシーを作成する場合は、まずアカウントに IAM ユーザーを作成し、このユーザーにポリシーをアタッチすることをお勧めします。コンソールを使用して、ユーザーにポリシーをアタッチしながら各ポリシーの効果を検証できます。

Auto Scaling グループを作成および更新する場合、アクションによっては、他の特定のアクションを実行する必要があります。これらの他のアクションは、IAM ポリシーステートメントの Action 要素で指定できます。たとえば、ユーザーに付与するアクセス権によっては、Elastic Load Balancing、CloudWatch、Amazon SNS の API アクションを追加する必要があります。

使用できるタグキーとタグ値を制御する

IAM ポリシーの条件を使用して、Auto Scaling グループに適用できるタグキーとタグ値を制御できます。

特定のタグを指定する場合に限り、Auto Scaling グループを作成またはタグ付けするアクセス許可をユーザーに付与するには、aws:RequestTag 条件キーを使用します。特定のタグキーのみ許可するには、aws:TagKeys 修飾子とともに ForAllValues 条件キーを使用します。

次のポリシーでは、そのリクエストでキー environment を使用してタグを指定することをユーザーに要求します。"?*" 値は、タグキーに何らかの値を含めることを強制します。ワイルドカードを含める場合は、StringLike 条件演算子を使用する必要があります。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "autoscaling:CreateAutoScalingGroup", "autoscaling:CreateOrUpdateTags" ], "Resource": "*", "Condition": { "StringLike": { "aws:RequestTag/environment": "?*" } } }] }

次のポリシーでは、ユーザーが Auto Scaling グループに付けることができるタグを purpose=webservercost-center=cc123 に限定し、purpose タグと cost-center タグのみを許可します (他のタグは指定できません)。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "autoscaling:CreateAutoScalingGroup", "autoscaling:CreateOrUpdateTags" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/purpose": "webserver", "aws:RequestTag/cost-center": "cc123" }, "ForAllValues:StringEquals": { "aws:TagKeys": ["purpose", "cost-center"] } } }] }

次のポリシーでは、ユーザーがリクエストで少なくとも 1 つのタグを指定することを要求し、cost-center および owner キーのみ使用できます。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "autoscaling:CreateAutoScalingGroup", "autoscaling:CreateOrUpdateTags" ], "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "aws:TagKeys": ["cost-center", "owner"] } } }] }
注記

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

タグに基づいて Auto Scaling リソースへのアクセスを制御する

IAM ポリシーにタグ情報を指定し、autoscaling:ResourceTag 条件キーを使用して Auto Scaling グループにアタッチしたタグに基づいてアクセスを制御することもできます。

Auto Scaling グループとスケーリングポリシーの作成と管理へのアクセスを制御する

次のポリシーでは、Auto Scaling グループにタグ purpose=webserver がある限り、名前に文字列 Scaling を含むすべての Amazon EC2 Auto Scaling アクションを使用するアクセス許可をユーザーに付与します。Describe アクションはリソースレベルのアクセス権限をサポートしないため、条件のない別のステートメントでそれらのアクセス権限を指定する必要があります。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["autoscaling:*Scaling*"], "Resource": "*", "Condition": { "StringEquals": { "autoscaling:ResourceTag/purpose": "webserver" } } }, { "Effect": "Allow", "Action": "autoscaling:Describe*Scaling*", "Resource": "*" }] }

削除できるスケーリングポリシーを制御する

次のポリシーでは、autoscaling:DeletePolicy アクションを使用してスケーリングポリシーを削除することをユーザーに許可します。ただし、処理対象の Auto Scaling グループに environment=production タグがある場合、そのアクションを拒否します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "autoscaling:DeletePolicy", "Resource": "*" }, { "Effect": "Deny", "Action": "autoscaling:DeletePolicy", "Resource": "*", "Condition": { "StringEquals": { "autoscaling:ResourceTag/environment": "production" } } }] }

Auto Scaling グループの最小と最大のキャパシティーを制御する

Amazon EC2 Auto Scaling では、作成できる Auto Scaling グループのサイズを制限できます。次のポリシーでは、最小サイズとして 1 未満または最大サイズとして 10 より大きい値を指定しない限り、allowed=true タグを持つすべての Auto Scaling グループを作成および更新するアクセス許可をユーザーに付与します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "autoscaling:CreateAutoScalingGroup", "autoscaling:UpdateAutoScalingGroup" ], "Resource": "*", "Condition": { "StringEquals": { "autoscaling:ResourceTag/allowed": "true" }, "NumericGreaterThanEqualsIfExists": { "autoscaling:MinSize": 1 }, "NumericLessThanEqualsIfExists": { "autoscaling:MaxSize": 10 } } }] }

どの IAM ロールを渡せるかを制御する (PassRole を使用)

ユーザーがインスタンスプロファイル (IAM ロールのコンテナ) を指定する Amazon EC2 Auto Scaling リソースを作成するには、次の例に示すように、ロールを渡すことをユーザーに許可するステートメントが含まれたポリシーを使用する必要があります。ARN を指定することにより、名前が qateam- で始まるロールのみを渡すアクセス許可をポリシーでユーザーに付与できます。詳細については、「Amazon EC2 インスタンスで実行中のアプリケーション用の IAM ロール」を参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::123456789012:role/qateam-*", "Condition": { "StringEquals": { "iam:PassedToService": [ "ec2.amazonaws.com", "ec2.amazonaws.com.cn" ] } } } ] }

Auto Scaling グループのキャパシティーの変更をユーザーに許可する

次のポリシーでは、API アクションとして SetDesiredCapacity および TerminateInstanceInAutoScalingGroup を使用するアクセス許可をユーザーに付与します。Resource 要素は、ワイルドカード (*) を使用して、ユーザーが任意の Auto Scaling グループのキャパシティーを変更できることを指定します。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "autoscaling:SetDesiredCapacity", "autoscaling:TerminateInstanceInAutoScalingGroup" ], "Resource": "*" }] }

Auto Scaling グループへのアクセス制御にタグを使用しない場合は、前のステートメントを調整して、名前が devteam- で始まる Auto Scaling グループのキャパシティーのみを変更するアクセス許可をユーザーに付与できます。ARN 値の指定については、「Amazon EC2 Auto Scaling 内のリソースベースのポリシー」を参照してください。

"Resource": "arn:aws:autoscaling:region:123456789012:autoScalingGroup:*:autoScalingGroupName/devteam-*"

複数の ARN をリストに含めて指定することもできます。UUID を含めることで、特定の Auto Scaling グループに確実にアクセス権が付与されます。新しいグループの UUID は、削除された同じ名前のグループの UUID とは異なります。

"Resource": [ "arn:aws:autoscaling:region:123456789012:autoScalingGroup:7fe02b8e-7442-4c9e-8c8e-85fa99e9b5d9:autoScalingGroupName/devteam-1", "arn:aws:autoscaling:region:123456789012:autoScalingGroup:9d8e8ea4-22e1-44c7-a14d-520f8518c2b9:autoScalingGroupName/devteam-2", "arn:aws:autoscaling:region:123456789012:autoScalingGroup:60d6b363-ae8b-467c-947f-f1d308935521:autoScalingGroupName/devteam-3" ]

起動設定の作成と使用をユーザーに許可する

次のポリシーでは、インスタンスタイプが t2.micro であり、起動設定の名前が qateam- で始まる場合に限り、起動設定を作成するアクセス許可をユーザーに付与します。ARN 値の指定については、「Amazon EC2 Auto Scaling 内のリソースベースのポリシー」を参照してください。名前が qateam- で始まる場合にのみ、Auto Scaling グループの起動設定を指定することができます。

ステートメントの最後の部分では、起動設定を記述し、アカウントの特定の Amazon EC2 リソースにアクセスするためのアクセス許可をユーザーに付与します。これにより、Amazon EC2 Auto Scaling コンソールから起動設定を作成および管理するための最小限のアクセス許可がユーザーに付与されます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "autoscaling:CreateLaunchConfiguration", "Resource": "arn:aws:autoscaling:region:123456789012:launchConfiguration:*:launchConfigurationName/qateam-*", "Condition": { "StringEquals": { "autoscaling:InstanceType": "t2.micro" } } }, { "Effect": "Allow", "Action": [ "autoscaling:CreateAutoScalingGroup", "autoscaling:UpdateAutoScalingGroup" ], "Resource": "*", "Condition": { "StringLikeIfExists": { "autoscaling:LaunchConfigurationName": "qateam-*" } } }, { "Effect": "Allow", "Action": [ "autoscaling:DescribeLaunchConfigurations", "ec2:DescribeImages", "ec2:DescribeVolumes", "ec2:DescribeInstances", "ec2:DescribeInstanceAttribute", "ec2:DescribeKeyPairs", "ec2:DescribeSecurityGroups", "ec2:DescribeSpotInstanceRequests", "ec2:DescribeSpotPriceHistory", "ec2:DescribeVpcClassicLink", "ec2:DescribeVpcs", "ec2:DescribeSubnets" ], "Resource": "*" }] }

このポリシーに次のような API アクションを追加して、ユーザーに追加のオプションを提供できます。

  • iam:ListInstanceProfiles: インスタンスプロファイルを一覧表示します。

  • ec2:CreateSecurityGroup: 新しいセキュリティグループを作成するには

  • ec2:AuthorizeSecurityGroupIngress: インバウンドルールを追加します。

  • ec2:CreateKeyPair: 新しいキーペアを作成します。

起動テンプレートの作成と使用をユーザーに許可する

エンドポイントポリシーの例については、「起動テンプレートのサポート」を参照してください。

サービスにリンクされたロールを作成するために必要なアクセス許可

Amazon EC2 Auto Scaling では、サービスにリンクされたロールを作成するアクセス許可が必要です。これは、AWS アカウントAmazon EC2 Auto Scaling API アクションを呼び出します。サービスにリンクされたロールがまだ存在しない場合は、Amazon EC2 Auto Scaling によってアカウント内に作成されます。サービスにリンクされたロールは、Amazon EC2 Auto Scaling に、ユーザーに代わって他の AWS のサービス を呼び出すために必要なアクセス許可を与えます。

この自動ロール作成を成功させるには、ユーザーには iam:CreateServiceLinkedRole アクションへのアクセス権限が必要です。

"Action": "iam:CreateServiceLinkedRole"

以下は、Amazon EC2 Auto Scaling に対する Amazon EC2 Auto Scaling のサービスにリンクされたロールの作成をユーザーに許可するアクセス権限ポリシーの例です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:CreateServiceLinkedRole", "Resource": "arn:aws:iam::*:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling", "Condition": { "StringLike": { "iam:AWSServiceName":"autoscaling.amazonaws.com" } } } ] }

どのサービスにリンクされたロールを渡せるかを制御する (PassRole を使用)

カスタムサフィックスの付いたサービスにリンクされたロールを Auto Scaling グループに渡すことをユーザーが必要とする場合は、必要なアクセスに応じてユーザーまたはロールにポリシーをアタッチします。ユーザーがアクセスする必要のあるサービスにリンクされたロールのみにこのポリシーを制限することをお勧めします。カスタムサフィックス付きのサービスにリンクされたロールの詳細については、「Amazon EC2 Auto Scaling のサービスにリンクされたロール」を参照してください。

以下の例は、別のサービスにリンクされたロールに別のキーへのアクセスを許可する場合に、AWS KMS カスタマーマネージド型キーのセキュリティを高めるのに役立ちます。必要に応じて、開発チームに 1 つの キー、QA チームにもう 1 つの キー、そして財務チームにもう 1 つの キー を設定できます。まず、必要なキーへのアクセス権があるサービスにリンクされたロールを作成します (例: AWSServiceRoleForAutoScaling_devteamkeyaccess)。次に、このサービスにリンクされたロールを Auto Scaling グループに渡すアクセス権限を付与するために、示されているようにポリシーをIAM ユーザーに付与します。

この例のポリシーは、ユーザーに AWSServiceRoleForAutoScaling_devteamkeyaccess ロールを使用して、名前が devteam- で始まる任意の Auto Scaling グループを作成します。ユーザーが別のサービスにリンクされたロールを指定しようとすると、エラーが発生します。サービスにリンクされたロールを選択しない場合、代わりにデフォルトの AWSServiceRoleForAutoScaling ロールが使用されます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::123456789012:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling_devteamkeyaccess", "Condition": { "StringEquals": { "iam:PassedToService": [ "autoscaling.amazonaws.com" ] }, "StringLike": { "iam:AssociatedResourceARN": [ "arn:aws:autoscaling:region:123456789012:autoScalingGroup:*:autoScalingGroupName/devteam-*" ] } } } ] }

Amazon EC2 Auto Scaling に必要な API 許可

Amazon EC2 Auto Scaling API から以下のアクションを呼び出す場合、ユーザーは、特定のアクションを実行するには、Amazon EC2 および IAM からのアクセス許可を持っている必要があります。IAM ポリシーステートメントの Action 要素では、以下のアクションを指定します。

Auto Scaling グループを作成する
  • autoscaling:CreateAutoScalingGroup

  • iam:CreateServiceLinkedRole ( 既定のサービスリンクロールを使用していて、そのロールがまだ存在していない場合に必要)

  • iam:PassRole (既定以外のサービスリンクロールを使用している場合、ライフサイクルフックの RoleARN パラメータの IAM ロールを指定している場合、Auto Scaling グループ内のインスタンスが使用できる IAM ロールを指定する起動テンプレートを使用している場合に必要)

  • ec2:RunInstance (起動テンプレートを使用している場合に必要)

  • ec2:CreateTags (インスタンスと EBS ボリュームに適用するタグを指定する起動テンプレートを使用している場合に必要)

起動設定を作成する
  • autoscaling:CreateLaunchConfiguration

  • ec2:DescribeImages

  • ec2:DescribeInstances

  • ec2:DescribeInstanceAttribute

  • ec2:DescribeKeyPairs

  • ec2:DescribeSecurityGroups

  • ec2:DescribeSpotInstanceRequests

  • ec2:DescribeVpcClassicLink

  • iam:PassRole ( IamInstanceProfileパラメータのIAM ロールを指定している場合に必要)

ライフサイクルフックを作成する
  • autoscaling:PutLifecycleHook

  • iam:PassRole ( RoleARNパラメータのIAM ロールを指定している場合だけに必要)