ECS リソースにタグを付与し、Resource Access Management (RAM) ポリシーを使用して、カテゴリ単位の詳細なアクセスの制御を実施します。
タグベースの権限を使用する理由
リソースグループとは異なり、タグは 1 つのリソースに対して複数のラベルを付与できるため、リージョン、部門、環境、またはその他のディメンションで分類できます。
タグベースの RAM ポリシーには、以下の 3 つの利点があります。
-
詳細な制御:ロールの割り当て範囲を広げることなく、リソースのサブセットに対して権限をスコープできます。
-
ポリシーの保守負荷軽減:1 つのタグ条件付きポリシーでリソースクラス全体をカバーできるため、インフラストラクチャが拡大してもポリシー数を抑制できます。
-
ビジネスに即した属性:タグキーと値はプロジェクト名、コストセンター、デプロイメント段階などの命名規則を反映するため、ポリシーの監査が容易になります。
ベストプラクティス
同じビジネス機能を持つ ECS インスタンスにタグを付与し、RAM ポリシーの条件でそのタグを参照してアクセスルールを適用します。
以下の例では、データベース用にタグ付けされた ECS インスタンスにパブリック IP アドレスを割り当てることを防止します。
ステップ 1:インスタンスへのタグ付与
ECS インスタンスにタグを追加します。詳細については、「タグの概要」をご参照ください。
この例では、タグは function:database です。
ステップ 2:タグ条件付き RAM ポリシーの作成
以下の RAM ポリシーを作成し、対象の RAM ユーザーまたはロールにアタッチします。
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": [
"ecs:ModifyInstanceNetworkSpec"
],
"Resource": "acs:ecs:*:*:instance/*",
"Condition": {
"StringEquals": {
"acs:ResourceTag/function:database": ["*"]
},
"Bool": {
"ecs:AssociatePublicIpAddress": ["true"]
}
}
}
]
}
主なポリシー要素:
| 要素 | 値 | 説明 |
|---|---|---|
Effect |
Deny |
すべての条件が満たされた場合に操作をブロックします。 |
Action |
ecs:ModifyInstanceNetworkSpec |
インスタンスのネットワーク構成操作を対象とします。 |
Resource |
acs:ecs:*:*:instance/* |
すべてのリージョンおよびアカウントの全 ECS インスタンスに適用されます。 |
acs:ResourceTag/function:database |
["*"] |
function:database タグが付与されたインスタンスに一致します。 |
ecs:AssociatePublicIpAddress |
["true"] |
パブリック IP アドレスを割り当てるリクエストに一致します。 |
結果
ポリシーがアクティブになると、ModifyInstanceNetworkSpec 操作で function:database タグが付与されたインスタンスにパブリック IP アドレスを割り当てようとするリクエストはすべて拒否されます。タグが付与されていないインスタンスには影響しません。