みなさん、こんばんは。サニービュー事業部の小寺です。
タグ毎にコストを分けて計上されたいというご要望を伺うことが多いのですが、いざ付けられているタグを見ると、「Proj」、「proj」、「Project」などばらけてしまったご経験をお持ちの方もいらっしゃるかと思います。
今日はOrganizationsの機能で「タグポリシー」についてお伝えします。
タグポリシーとは
タグポリシーはポリシーの一種で、組織のアカウント内のリソース間でタグを標準化するのに役立ちます。タグポリシーでは、リソースのタグ付けの際に適用されるタグ付けルールを決めることができます。
例えば、タグポリシーでは、「CostCenter」タグがリソースにアタッチされる際に、タグポリシーで定義されている大文字小文字の処理とタグ付けが必要があることを指定できます。
タグポリシーは、指定したリソースタイプで非準拠だと保存ができないようにすることもできます。つまり、指定されたリソースタイプで非準拠のタグ付けの操作が完了できません。
タグなしリソースまたはタグポリシーで定義されていないタグについては、タグポリシーに準拠しているかどうかは特に評価がされない仕組みです。
タグポリシーを設定してみる
(1) Organizationsの「ポリシー」から「タグポリシー」を選びます。

(2)「タグポリシー有効にする」をクリックします。

(3)「ポリシーを作成」からポリシーを作ってみます。

(4)「詳細」部分に「ポリシー名」を入力します。ここでもタグを入力できますが、タグポリシーのタグは今回は設定しません。

(5)タグキーの指定と以下のチェックができます。
試しに「Name」として以下をチェックしてみます。
・タグキー大文字化コンプライアンス
・タグ値コンプライアンス
・強制するリソースタイプ
タグ値コンプライアンスでは、タグに設定する値も指定ができます。
アスタリスク等の指定もできます。

また、強制するリソースタイプは確認してみましたが、全てのサービスに対応している訳ではないようです。

EC2で検索してみました。絶対入力必須としたいものとして、とりあえず「ec2:instance」を選びました。大文字化コンプライアンスのチェックにより「NAME」しか保存できないのかどうかが気になります。

もう一つ、テストのため「PROJECT」も作ってみて、「ポリシーを作成」をクリックします。

(6) 無事にポリシーが作成できました。

(7)「ターゲット」タブに移動して、作成したポリシーをアタッチします。
今の状態は、ポリシーの作成だけができていて、ポリシーが効いているアカウントがない状態です。

(8)「アタッチ」をクリックしてOUもしくはAWSアカウント単位で選ぶことができます。「ポリシーのアタッチ」をクリックします。

ポリシーのアタッチが完了した旨、メッセージが表示されます。
タグポリシーの確認
(1)先ほどアタッチしたOrganizationsのLinked Accountにログインして、EC2インスタンスにタグ付けをしてみます。元々、設定していたタグについてはポリシーアタッチ前であれば有効のままでした。

(2) まずはNameタグで指定していないタグ値「sunny2」を入れてみました。こちらは予想通り、タグ値に設定できない値があるため、タグが更新できないエラーになっています。

(3) 次に先ほど追加した「Name」「sunny2」の行を「削除」し「保存」ボタンをクリックしてみましたが、ポリシー適応前だからか、そのまま保存ができました。
(4)次はNameタグで指定してある「DEV」をタグ値に設定してみます。「DEV」と途中まで入力しただけで、「DEV」を使用が表示されました。保存してみます。

(5)タグの管理が正常にリクエストされましたメッセージが表示され、タグ付けが完了しています。

(6) 「nAme」として「Name」タグを設定してみました。今回は大文字、小文字設定がポリシーに準拠していないエラーで保存ができませんでした。

「NAME」の場合も同様のエラーになります。

(7)今度は新規にEC2インスタンスを起動してみました。Nameタグには「test」を入力しました。「 The tag policy does not allow the specified value for the following tag key: ‘Name’. 」とのエラーになり、インスタンス起動に失敗しました。

(8) 今度は正しく起動されるようにNameタグには「DEV」を入力し、 EC2インスタンスを起動してみました。

(9) 正常にインスタンスが起動することが確認できました。

まとめ
タグポリシーを設定することで、タグに入力できる値を制御できるようになったので、組織として共通でタグの運用が簡単になっています。また、ポリシー設定前のタグはそのまま使えることも分かりました。自動的に更新されるものではなかったです。新規に作成するリソースにも適用されることが分かりました。
注意事項としてはあくまで「タグ」を共通化して間違いがないよう管理できる機能です。
