EC2作成時、タグ付けを強制する方法

記事タイトルとURLをコピーする

こんにちは。技術4課の福島です。
観葉植物を買いたいと思っている今日この頃です。

さて今回は、EC2へのタグ付けを強制する方法をご紹介したいと思います。

結論

結論から先に書くとIAMポリシーを利用することで
EC2へのタグ付けを強制することができます!
(タグを付与しないとEC2を作成できないようにする感じです。)

◆参考)
 https://aws.amazon.com/jp/premiumsupport/knowledge-center/iam-policy-tags-restrict/

検証

ここからは、実際に検証していきます。
検証の流れは、以下の通りです。

◆流れ
 ①IAMポリシーの作成
 ②IAMユーザの作成&ポリシーのアタッチ
 ③動作確認
  パターン1)タグを付与して、EC2を作成
  パターン2)タグを付与せずに、EC2を作成

前提条件

・EC2を展開するサブネットが用意されていること
・セキュリティグループが作成されていること
・キーペアが作成されていること
・AWS CLIが利用できること

①IAMポリシーの作成

AWSマネジメントコンソールからIAMポリシーを作成します。
まずは、IAMの画面を開き、左側のナビゲーションペインで「ポリシー」を選択します。
その後、「ポリシーの作成」を選択します。

ポリシーの作成画面が表示されたら、以下のイメージでポリシーを定義します。

ポリシー定義

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowRunInstancesWithRestrictions",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "aws:TagKeys": [
                        "Name"
                    ]
                }
            }
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "ec2:CreateTags",
            "Resource": [
                "arn:aws:ec2:*:*:instance/*",
                "arn:aws:ec2:*:*:volume/*"
            ],
            "Condition": {
                "StringEquals": {
                    "ec2:CreateAction": "RunInstances"
                }
            }
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": "ec2:Describe*",
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor3",
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": [
                "arn:aws:ec2:*:*:subnet/*",
                "arn:aws:ec2:*:*:key-pair/*",
                "arn:aws:ec2:*::snapshot/*",
                "arn:aws:ec2:*:*:security-group/*",
                "arn:aws:ec2:*:*:network-interface/*",
                "arn:aws:ec2:*::image/*"
            ]
        }
    ]
}

ポリシーを定義できたら、ポリシーの「名前」と「説明」を入力して、ポリシーを作成します。
今回は、「test-policy」にしました。

②IAMユーザの作成&ポリシーのアタッチ

IAMポリシーを作成できたら、次は、IAMユーザの作成&ポリシーのアタッチとなります。

まずは、IAMの画面を開き、左側のナビゲーションペインで「ユーザー」を選択します。
その後、「ユーザーを追加」を選択します。

ユーザを追加の画面が表示されたら、以下のイメージで設定します。次のステップで、アクセス許可の設定を以下のイメージで設定します。
指定するポリシーは、「①ポリシーの作成」で作成したポリシーを選択します。次のステップで、タグを必要に応じて設定します。
最後に設定を確認し、「ユーザの作成」をクリックします。

作成が完了したら、以下の画面が表示されますので、
「アクセスキーID」と「シークレットアクセスキー」を
メモしておきます。(③の手順で利用します。)

③動作確認

IAMユーザーの作成が完了しましたら、次は、動作確認です。
以下のパターンで動作確認したいと思います。

  パターン1)タグを付与して、EC2を作成
  パターン2)タグを付与せずに、EC2を作成

AWS CLIの設定は、以下を参考に設定しておきます。

 ◆参考)
  https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-configure.html

 パターン1)タグを付与して、EC2を作成

では、パターン1を検証したいと思います。
以下のコマンドでタグを付与して、EC2を作成できますので、実行してみます。

aws ec2 run-instances \
--image-id ami-0064e711cbc7a825e \
--count 1 \
--instance-type t2.micro \
--key-name test-key \
--security-group-ids sg-03dbbd69870756403 \
--subnet-id subnet-0531e07031ef6f92a \
--tag-specifications 'ResourceType=instance,Tags={Key=Name,Value=test-ec2}' 'ResourceType=volume,Tags={Key=Name,Value=test-ebs}'
オプション 説明
--image-id AMIのIDを指定します。
(自分の環境に合わせて変更してください。)
--count 起動するインスタンスの数を指定します。
--instance-type インスタンスタイプを指定します。
--key-name キーペアを指定します。
(自分の環境に合わせて変更してください。)
--security-group-ids セキュリティーグループのIDを指定します。
(自分の環境に合わせて変更してください。)
--subnet-id サブネットIDを指定します。
(自分の環境に合わせて変更してください。)
--tag-specifications タグの設定です。(EC2とEBSにNameタグを付与します。)

◆参考)
 https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html

上記コマンド実行後、作成したEC2の情報が表示され、問題なく作成できました。
念のため、AWSマネジメントコンソールからも確認してみます。うん、無事に作成できてますね!

パターン2)タグを付与せずに、EC2を作成

では、続いて、タグを付与しなかった場合、どうなるか、確認したいと思います。

実行するコマンドは、パターン1で実行したコマンドから
タグを付与するオプションを削除したものです。

aws ec2 run-instances \
--image-id ami-0064e711cbc7a825e \
--count 1 \
--instance-type t2.micro \
--key-name test-key \
--security-group-ids sg-03dbbd69870756403 \
--subnet-id subnet-0531e07031ef6f92a

実行すると・・・

An error occurred (UnauthorizedOperation) when calling the RunInstances operation: You are not authorized to perform this operation. Encoded authorization failure message: T108bdlc3gCadtPMdOzn3HcWmthc0L2m1A8VUn8WxsnPt7MImmCeFc7m32dn43G7MCZHciZPjPZItJ0cgiLPIJmkoc0-HazQv0yj2wHHUUCDNDyGvKGn0AgSu-00XxCAbwZN-vZAyUnNVbz1_xYxJGom_QeIErVdREX9xX6WPrRzl0lRZ_EtRHgdntIZJ8Z5vkSpChk_AgHx1XIdMCr8NKen26TERbEtAeY3U-4eoMbJc4hK6iA3ufbZ2EMUvmPyO9b9-leAPaEvgsE-08KFcMz0NgKJMUQr--uHyoUPq2nDVVTTgfOR9x0tfrFYCa35fNxGpgscIIgPmFgeJWWmgS7dWmnqlqO7RQQuWSYVkbF-38l5-rGbFo19VXRfPQUAweFbAeYlcnOfZo4mv9AbALNkQlKCIVHv7CwFZvJOI74B5vFbfdZHcpjNCoL4X80YQKMpQC9qR23asU8vxP1Iap0V6-siU_vMjfZPthkQIgyoFQ8sly51iBwHutbj8y1DHmOvPzXdbcG5sBaxiOYkjcr6-T_f-yPmqedeW90Tcl7xcKT_bdhqg2XD3O7nX59d1lbXVhuPVKLQXTi_YA1uQmuwaSo_fJ93eAFAq-oG8tYJ6l80epXLQsKEw9X_qR5SBGQYrlNtU6wNseF4HTg_HMRcBvHBwf0hlis

なんかエラーっぽいメッセージが出力されました。
翻訳してみると・・・

RunInstances操作を呼び出すときにエラー(UnauthorizedOperation)が発生しました:この操作を実行する権限がありません。エンコードされた認証失敗メッセージ:T108bdlc3gCadtPMdOzn3HcWmthc0L2m1A8VUn8WxsnPt7MImmCeFc7m32dn43G7MCZHciZPjPZItJ0cgiLPIJmkoc0-HazQv0yj2wHHUUCDNDyGvKGn0AgSu-00XxCAbwZN-vZAyUnNVbz1_xYxJGom_QeIErVdREX9xX6WPrRzl0lRZ_EtRHgdntIZJ8Z5vkSpChk_AgHx1XIdMCr8NKen26TERbEtAeY3U-4eoMbJc4hK6iA3ufbZ2EMUvmPyO9b9-leAPaEvgsE-08KFcMz0NgKJMUQr-uHyoUPq2nDVVTTgfOR9x0tfrFYCa35fNxGpgscIIgPmFgeJWWmgS7dWmnqlqO7RQQuWSYVkbF-38l5-rGbFo19VXRfPQUAweFbAeYlcnOfZo4mv9AbALNkQlKCIVHv7CwFZvJOI74B5vFbfdZHcpjNCoL4X80YQKMpQC9qR23asU8vxP1Iap0V6-siU_vMjfZPthkQIgyoFQ8sly51iBwHutbj8y1DHmOvPzXdbcG5sBaxiOYkjcr6-T_F-yPmqedeW90Tcl7xcKT_bdhqg2XD3O7nX59d1lbXVhuPVKLQXTi_YA1uQmuwaSo_fJ93eAFAq-oG8tYJ6l80epXLQsKEw9X_qR5SBGQYrlNtU6wNseF4HTg_HMRcBvHBwf0hlis

「この操作を実行する権限がありません」と出力されていますので、上手くいきました!

まとめ

このようにIAMポリシーを利用することでEC2作成時、タグの付与を強制することができます。
ちなみにですが、ポリシー定義の18行目を変更することでName以外のタグも
強制することが可能です。(複数設定もできます。)

以上です。それでは、またお会いしましょう。

福島 和弥 (記事一覧)

2019/10 入社

AWS CLIが好きです。

AWS資格12冠。2023 Japan AWS Partner Ambassador/APN ALL AWS Certifications Engineer。