Auto Scaling では、タグを使用してスケーリンググループを分類し、アクセスを制御できます。個々のスケーリンググループ、または特定のタグを共有する複数のグループに対して、詳細な権限を付与できます。このトピックでは、タグベース認証を使用して RAM ユーザーの権限を管理し、管理効率の向上とデータ漏えいリスクの低減を実現する方法について説明します。
背景情報
-
タグは、クラウドリソースの識別子です。タグを使用すると、さまざまなディメンションから同じ特性を持つクラウドリソースを分類、検索、集約できます。詳細については、「タグ」をご参照ください。
-
Resource Access Management (RAM) を使用すると、ユーザー ID を管理し、ポリシーに基づいてクラウドリソースへのアクセスと操作を制御できます。詳細については、「RAM とは」をご参照ください。
Resource Access Management (RAM) ポリシーでタグを条件として使用することで、Auto Scaling に対する詳細な制御を実装できます。
次の図は、タグを使用して RAM ユーザーのリソースアクセス権限と操作権限を管理する方法 (タグベース認証) を示しています。
タグ認証をサポートしない API
タグベース認証のポリシーを RAM ユーザーにアタッチした後、RAM ユーザーが次の API オペレーションを呼び出して Auto Scaling を管理する場合、タグベース認証はサポートされません。
|
API |
タグ認証のサポート |
|
DescribeRegions |
いいえ |
|
スケーリンググループに関連付けられていない定期タスクの場合:
|
いいえ |
|
スケーリンググループに関連付けられていない監視タスクの場合:
|
いいえ |
シナリオ例
このトピックでは、次のシナリオを使用して、タグベース認証を実装する方法を示します。
ゲーム開発用に 2 つのスケーリンググループを作成したと仮定します。各スケーリンググループには、環境とチームによってタグが付けられています。RAM ユーザーに、次のスケーリンググループに対する特定の権限を付与する必要があります。
|
スケーリンググループ |
名前 |
タグ |
|
スケーリンググループ 1 |
asg-001 |
|
|
スケーリンググループ 2 |
asg-002 |
|
特定のアクセス制御要件は次のとおりです。
-
シナリオ 1: タグなしでスケーリンググループを作成することはできません。スケーリンググループ 1 は、作成時に
environment:testとteam:game1のタグを追加した場合にのみ正常に作成できます。 -
シナリオ 2: スケーリンググループをクエリするとき、
environment:testとteam:game1のタグがバインドされているスケーリンググループ 1 のリソースのみを表示できます。 -
シナリオ 3: スケーリンググループ 1 (タグ
environment:testとteam:game1を持つ) のリソースのみを管理でき、スケーリンググループ 2 (タグenvironment:devとteam:game2を持つ) のリソースは管理できません。
操作手順
開始する前に、RAM ユーザーが作成されていることを確認してください。詳細については、「RAM ユーザーの作成」をご参照ください。
-
2 つのスケーリンググループを作成します。
詳細については、「スケーリンググループの設定」をご参照ください。スケーリンググループの詳細については、「シナリオ例」をご参照ください。
-
RAM コンソールにログインします。
-
カスタムポリシーを作成します。
詳細については、「カスタムポリシーの作成」をご参照ください。
ポリシーの
Conditionブロックでクラウドリソースに複数のタグ条件を設定して、Auto Scaling リソースに対する操作権限を制限できます。サポートされているタグベースの認証条件:タグベースの条件
説明
acs:RequestTagリクエストに特定のタグが含まれているかどうかを確認します。
API リクエストにタグパラメーターが含まれていない場合、
acs:RequestTagを使用すると認証が失敗します。acs:ResourceTagリクエストで指定されたリソースに特定のタグが含まれているかどうかを確認します。
リソース ID パラメーターを含まない API リクエストで
acs:ResourceTagを使用すると、認証は失敗します。-
シナリオ 1: スケーリンググループ作成時に特定のタグを強制する
つまり、スケーリンググループ 1 は、作成時に
environment:testとteam:game1のタグがバインドされている場合にのみ正常に作成できます。次のポリシーがこのシナリオに対応します:
{ "Effect": "Allow", "Action": "ess:Create*", "Resource": "*", "Condition": { "StringEquals": { "acs:RequestTag/environment": "test", "acs:RequestTag/team": "game1" } } } -
シナリオ 2: ユーザーにスケーリンググループ 1 のみの表示を許可する
これは、
environment:testとteam:game1のタグをスケーリンググループ 1 にアタッチした場合、スケーリンググループをクエリするとスケーリンググループ 1 のリソースのみが返されることを意味します。次のポリシーがこのシナリオに対応します:
{ "Effect": "Allow", "Action": "ess:Describe*", "Resource": "*", "Condition": { "StringEquals": { "acs:RequestTag/environment": "test", "acs:RequestTag/team": "game1" } } } -
シナリオ 3: ユーザーにスケーリンググループ 1 のみの管理を許可し、スケーリンググループ 2 へのアクセスを拒否する
たとえば、スケーリンググループ 1 には
environment:testとteam:game1のタグがバインドされ、スケーリンググループ 2 にはenvironment:devとteam:game2のタグがバインドされています。次のポリシーがこのシナリオに対応します:
{ "Version": "1", "Statement": [ { "Action": "ess:*", "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "acs:ResourceTag/environment": "test", "acs:ResourceTag/team": "game1" } } }, { "Action": "ess:*", "Effect": "Deny", "Resource": "*", "Condition": { "StringEquals": { "acs:ResourceTag/environment": "dev", "acs:ResourceTag/team": "game2" } } }, { "Effect": "Allow", "Action": [ "ess:DescribeRegions", "ess:CreateScheduledTask", "ess:ModifyScheduledTask", "ess:DescribeScheduledTasks", "ess:DeleteScheduledTask", "ess:CreateAlarm", "ess:DescribeAlarms", "ess:ModifyAlarm", "ess:EnableAlarm", "ess:DeleteAlarm" ], "Resource": "*" } ] }
-
-
カスタムポリシーを RAM ユーザーにアタッチします。
詳細については、「RAM ユーザーへの権限付与」をご参照ください。
-
ポリシーが有効であることを確認します。
-
スケーリンググループ 1 を作成してシナリオ 1 を検証する
-
スケーリンググループ 1 には
environment:testとteam:game1のタグがあるため、正常に作成できます。 -
指定されたタグなしでスケーリンググループを作成すると、権限が不十分なため作成は拒否されます。Auto Scaling に必要な OpenAPI 権限がない場合は、別のエラーが発生します:
Forbidden.Unauthorizedエラーが返され、「ユーザーは ESS の OpenAPI インターフェイスを完全に承認していません。承認してから、もう一度お試しください。」というメッセージが表示されます。この場合、必要な権限を付与して操作をリトライしてください。
-
-
スケーリンググループをクエリしてシナリオ 2 を検証する
-
environment:testとteam:game1のタグを持つスケーリンググループについては、タグでフィルターせずにクエリを実行しても、その情報を取得できます。 -
environment:testとteam:game1のタグが付いていないスケーリンググループ 1 以外のスケーリンググループをクエリした場合、クエリは結果を返しません。 -
スケーリンググループを指定せず、
environment:testとteam:game1のタグのみを検索した場合、クエリはこれらのタグを持つすべてのスケーリンググループを返します。
-
-
スケーリンググループを削除してシナリオ 3 を検証する
-
スケーリンググループ 1 に
environment:testとteam:game1のタグがある場合、そのスケーリンググループを削除できます。 -
スケーリンググループが
environment:testとteam:game1のタグに関連付けられていない場合、または他のタグがある場合、スケーリンググループを削除する権限がないことを示すメッセージが表示されます。
-
-
関連ドキュメント
-
API オペレーションを呼び出してスケーリンググループを作成、表示、または削除するには、「CreateScalingGroup」、「DescribeScalingGroups」、または「DeleteScalingGroup」をご参照ください。
-
API オペレーションを呼び出してカスタムポリシーを作成するには、「CreatePolicy」をご参照ください。
-
API オペレーションを呼び出して RAM ユーザーに権限を付与するには、「AttachPolicyToUser」をご参照ください。
-
複数のスケーリンググループがある場合は、リソースグループを使用してそれらを管理できます。詳細については、「リソースグループを使用したスケーリンググループの管理」をご参照ください。
-
Auto Scaling の委任管理にリソースレベルの認証を使用する場合は、「リソースレベルの認証を使用した Auto Scaling の管理」をご参照ください。