LoginSignup
3
1

【AWS】IAMポリシーでEC2へタグ付けを強制する

Posted at

はじめに

組織内で利用しているAWS環境の利用ルールを整備している過程で、「EC2へ特定のタグ付けを強制するIAMポリシー」を作成したのでここに記しておきます。
こちらのポリシーを適用することで、特定のタグをつけなければEC2の起動が拒否されるようになります。

前提条件

前提として、IAMユーザはEC2へのすべてのアクションを許可されているとします。
そのユーザに対して、Denyステートメントを用いて「EC2へ特定のタグ付けを強制するIAMポリシー」を適用します。

ポリシーではDenyがAllowより優先されます。

該当するポリシーに Deny ステートメントが含まれている場合、リクエストは明示的に拒否されます。リクエストに適用されるポリシーに Allow ステートメントと Deny ステートメントが含まれている場合は、Deny ステートメントが Allow ステートメントより優先されます。リクエストは明示的に拒否されます。
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#AccessPolicyLanguage_Interplay

IAMポリシーの作成・適用

今回はEC2へProjectというタグを強制するポリシーを作成し、IAMユーザに適用します。

IAMポリシーの作成

  1. 管理コンソールから「IAM」→「ポリシー」→「ポリシーの作成」をクリックします。

  2. ポリシーエディタでJSONを選択し、以下のポリシーを入力します。
    image.png

    ポリシー定義
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "DenyRunInstancesWithoutTag",
                "Effect": "Deny",
                "Action": "ec2:RunInstances",
                "Resource": "arn:aws:ec2:*:*:instance/*",
                "Condition": {
                    "Null": {
                        "aws:RequestTag/Project": "true"
                    }
                }
            }
        ]
    }
    

    こちらのポリシーでは、Actionec2:RunInstancesを指定し、EC2インスタンスの起動操作がこのポリシーにより制御されるようにします。
    Resourcearn:aws:ec2:*:*:instance/*を指定し、すべてのEC2インスタンスを対象とします。
    Conditionは、このポリシーが適用される具体的な条件を指定します。ここでのNullコンディションは、指定されたキーが存在しない場合にマッチします。つまり、aws:RequestTag/Projecttrueとなっているので、EC2インスタンス作成リクエストがProjectタグを持っていない場合に、このポリシーが適用されます。
    (参考:条件キーの有無をチェックする条件演算子

  3. ポリシー名を設定し、「ポリシーを作成」をクリックします。
    (今回は「DenyRunInstancesWithoutTag」というポリシー名を設定しました。)
    image.png

ポリシーの適用

今回は簡易的に動作確認を実施するために、testユーザへ直接ポリシーを適用します。

  1. 「IAM」→「ユーザー」からポリシーを適用するユーザを選択します。
  2. 「許可」タブ→「許可を追加」をクリックします。
  3. 許可のオプションから「ポリシーを直接アタッチする」を選択し、先ほど作成したIAMポリシーを選択します。「次へ」をクリックします。
    image.png
  4. 「許可を追加」をクリックします。

動作確認

testユーザで管理コンソールへログインし、動作確認を行います。

指定されたタグ無しでEC2を起動

  1. Prjectタグを設定せずにEC2を起動します。
    image.png

  2. インスタンスの起動に失敗したことを確認できました。
    68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f323831323931352f66393534643463632d343531362d326563302d346335342d3237363739336533323933652e706e6.png

指定されたタグ付きでEC2を起動

  1. Prjectタグを設定してEC2を起動します。
    image.png

  2. インスタンスの起動に成功したことが確認できました。
    image.png

ポリシー条件のキー名では、大文字と小文字は区別されないため、タグ名をprojectと設定しても起動できます。

ポリシー条件のキー名では、大文字と小文字は区別されません。
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access_tags.html#access_tags_control-tag-keys

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1