[アップデート]Amazon ECSに8つの新しいIAM条件キーが追加されました

[アップデート]Amazon ECSに8つの新しいIAM条件キーが追加されました

Amazon ECSに8つの新しいIAM条件キーが追加されました
Clock Icon2025.02.28

お疲れさまです。とーちです。

Amazon ECSのIAM条件キーが追加されたというアップデートがありました。今回は新しく追加された8つの条件キーについて、実際に試してみた内容を紹介します。

とりあえずまとめ

  • Amazon ECSに8つの新しいIAM条件キーが追加されました
  • 追加された条件キーを使うことで、例えばECSタスク定義やサービスの作成・更新時にタスクのCPU使用量に制限をかけることができるようになります

IAM条件キーとは

IAM条件キーについてはAWS公式ドキュメントに詳しく記載されていますが、ざっくり言うとIAMを使用したリクエスト元の情報を使ってアクセス許可をより細かく制御できる機能です。IPアドレス、時間帯、タグなどの条件に基づいてリソースへのアクセスを制限できます。

IAM条件キーには以下の2種類があります

  1. グローバル条件キー:すべてのAWSサービスで指定できる条件キー
  2. サービス固有の条件キー:サービスごとに決められた条件キー

今回は、ECSのサービス固有の条件キーが8つ追加された形です。

追加された条件キー一覧

追加された条件キーは以下の通りです

  • ecs:task-cpu
  • ecs:task-memory
  • ecs:compute-compatibility
  • ecs:privileged
  • ecs:auto-assign-public-ip
  • ecs:subnet
  • ecs:propagate-tags
  • ecs:enable-ecs-managed-tags

なお、公式ドキュメント上もちゃんと新しい条件キーが反映されています。

https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerservice.html

それでは、これらの条件キーを順番に見ていきましょう。

リソース構成関連の条件キー

ecs:task-cpu

タスクCPUの数値に制限を設けます。Conditionの値としてはNumeric(数値)を指定します。1024=1vCPUです。

この条件を指定できるアクションは以下の通りで、例えばRegisterTaskDefinitionのConditionとして指定した場合、条件を満たすvCPU量のタスク定義の作成のみが許可される形です。

ecs:task-memory

タスクメモリの数値に制限を設けます。Conditionの値としてはNumeric(数値)を指定します。単位はMiBです。

この条件を指定できるアクションは以下の通りで、例えばRegisterTaskDefinitionのConditionとして指定した場合、条件を満たすメモリ量のタスク定義の作成のみが許可される形です。

ecs:compute-compatibility

タスク定義の compatibilities の値を制限します。マネージメントコンソールで言うと以下の起動タイプの箇所にあたる部分ですね。

image.png

Conditionの値としてはArrayOfString(文字列配列)を指定します。

この条件を指定できるアクションは以下の通りです

コンテナ権限関連の条件キー

ecs:privileged

タスク定義の privileged の値を制限します。この値はコンテナにホストインスタンスのrootと同じレベルの権限を与えるかどうかを指定するパラメータです。

Conditionの値としては String(文字列)を指定します。

この条件を指定できるアクションは以下の通りです

ネットワーク構成関連の条件キー

ecs:auto-assign-public-ip

ネットワークモードとしてawsvpcを指定している場合に、ECSサービス設定ではタスクのENIに対してパブリックIPを割当てるかどうかを指定できますが、その設定を制限するconditionになっています。

Conditionの値としては Bool(true or false)を指定します。

この条件を指定できるアクションは以下の通りです

ecs:subnet

ネットワークモードとしてawsvpcを指定している場合に、ECSサービス設定でタスク(のENI)を配置するサブネットを指定できますが、その設定を制限するconditionになっています。

Conditionの値としては ArrayOfString(文字列配列)を指定します。

この条件を指定できるアクションは以下の通りです

タグ伝搬関連の条件キー

ECSサービスのタグ関連の設定を制限するためのconditionですね。マネージメントコンソールでいうと以下の箇所になります。

image.png

ecs:propagate-tags

ECSサービス設定ではサービスにより生成されるECSタスクに付与するタグをECSサービスやタスク定義につけたタグから伝搬させることができます。その設定を制限するconditionになっています。

Conditionの値としては String(文字列)を指定します。

この条件を指定できるアクションは以下の通りです

ecs:enable-ecs-managed-tags

ECSサービスの設定でECSマネージドタグを有効にするとクラスターとサービス名に対応する2つのタグを使用して、サービスにより生成されるECSタスクに自動的にタグを付けることが可能なのですが、その設定を制限するconditionになっています。

Conditionの値としては Bool(true or false)を指定します。

この条件を指定できるアクションは以下の通りです

実際に検証してみる

では、実際にecs:task-cpuを使って作成できるECSタスクのCPU量に制限をかけてみましょう。

準備:IAMロールの作成

まず、以下のようなポリシーを持つIAMロールを作成しました。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "NotAction": [
                "ecs:*"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ecs:Get*",
                "ecs:List*",
                "ecs:DescribeCapacityProviders",
                "ecs:DescribeServiceDeployments",
                "ecs:DescribeServiceRevisions",
                "ecs:DescribeServices",
                "ecs:DescribeTaskSets",
                "ecs:DescribeContainerInstances",
                "ecs:DescribeTasks",
                "ecs:DescribeTaskDefinition",
                "ecs:DescribeClusters"
            ],
            "Resource": "*"
        }
    ]
}

このポリシーでは、ECS関連の権限は読み取り関連の権限のみを付与しています。念のため、この状態でECSタスク定義が作成できないことを確認しました。

image.png

条件キーを使ったポリシーの追加

続いて、今回のアップデートで追加されたconditionを確かめるためのポリシーとして以下をIAMロールに追加します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ecs:CreateService",
                "ecs:RegisterTaskDefinition"
            ],
            "Resource": "*",
            "Condition": {
                "NumericLessThanEquals": {
                    "ecs:task-cpu": "1024"
                }
            }
        }
    ]
}

想定通りであれば、1024以下の値(1vCPU以下)を指定した場合のみ、ECSタスク定義の登録やECSサービスの作成ができるはずです。

ちなみにIAMのポリシーエディタ上でもちゃんと今回追加された条件キーが表示されていました。

image.png

1vCPUのタスク定義の作成

まず1vCPUのタスク定義を作成してみます。

image.png

これは正常に作成できました。

image.png

2vCPUのタスク定義の作成

次に2vCPUのタスク定義を作成してみます。

image.png

想定どおりエラーになりました。

image.png

ECSサービスの作成

続いてサービス設定を試してみます。ちょうど2vCPUの設定がされたタスク定義があったので、このタスク定義を使ってECSサービスを作成してみます。

image.png

タスク定義として上記のものを指定してECSサービスを作ってみます。

image.png

すると以下のエラーが出ました。サービス作成時にもECSタスク定義のvCPU設定を見たうえで、許可・拒否を判定してくれるようですね。

image.png

おまけ

ECSサービスの作成に失敗したあと、再度同じ名前のECSサービスを作ろうとしたら、以下のエラーが出ました。ECSサービスってマネージメントコンソールから作る場合CloudFormationで作られてたんですね。いつもterraformで作ってたんで知りませんでした。

image.png

まとめ

今回は、Amazon ECSに追加された8つのIAM条件キーについて紹介しました。これらの条件キーを使うことで、以下のようなより細かい権限管理が可能になります

  • タスクのCPUやメモリリソースに制限を設ける
  • 特定の起動タイプのみを許可する
  • 特権コンテナの使用を制限する
  • ネットワーク設定(サブネットやパブリックIP割り当て)を制限する
  • タグ関連の設定を制御する

これらの条件キーはもちろんSCPにも使えるので例えばSCPで開発環境で作成できるvCPUの最大値を指定したりするのは効果的かもしれないですね。

以上、とーちでした。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.