こんにちは。技術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。