AWS Organizationsのタグポリシーを使ってみた

# タグポリシーとは

　タグポリシーをOU（組織単位）にアタッチすることで、タグの標準化を推進してくれます。
　タグポリシーの機能として
　　キーの大文字小文字の統一
　　バリューの制限
があり、非準拠のリソースを作成しないようにすることもできます。
　ただし、タグを強制できる機能ではありませんので、その点はしっかりと覚えておく必要があります。
　大文字小文字の統一では、作成するキーが`name`,`Name`とばらけるのを防いでくれます。
　指定したキーを正しく入力さえしていれば、指定したバリューでしかリソースを作成できません。指定外のバリューを設定して作成すると、エラーが起きます。
　しかし、タグポリシーでキーを`name`と指定し、実際に設定したものが`named`であれば、バリューの制限はできません。
　キーは一言一句一致していなければなりません。
　なお、以上の作成を防いでくれる機能は、デフォルトでは無効化されているので有効化する必要があります。

# タグポリシーを使ってみる

![01Organizationsポリシー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/61c44157-cc50-a22e-c361-aea4b8e6e5e7.png)

Organizationsのポリシータブからタグポリシーを選択。

![02Organizationsタグポリシー有効化.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/48e3046e-bde1-f2f3-8a03-c11dc9c6f7f8.png)

タグポリシーはOU単位だけでなく、個々のアカウントにも適用できる。いいですね。
単なる有効化だけでは他のリソースに影響を及ぼすこともなさそうです。
有効化します。

![03Organizationsタグポリシー有効化後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/e19b7195-ad57-c27a-73c0-22a67ad70f14.png)

早速ポリシーを作成します。

![04Organizationタグポリシー作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/37afc3a6-5607-adb2-a15b-fd752360691e.png)

設定項目の入力が終わりました。

いまいち分かりませんでしたが、中段のタグセクションでキーとバリューを入れてみました。
このタグは、アタッチ先のリソースに自動的に付与されるということでしょうか？アタッチした後に確認してみましょう。
→単にタグポリシーにタグを付与しているだけでした。リソースにタグを付与しているのと同じ意味です。

タグキー大文字コンプライアンスは小難しいことを書いていますが、指定した文字通りのキーでないと作成できないという意味だと思います。
例えば、project、PROJECTはダメで、ProjectのみOK。

タグ値コンプライアンスは分かりやすいですね。
Projectキーは、Private,Hands-on-*,ControlTowerしか値が付けられないという意味です。
ワイルドカードが使えるのはいいですね。ただしワイルドカードは一つの値につき一度だけしか使えません。

一番の注意点は、強制するリソースタイプでしょう。
今回はデフォルトのまま有効化しませんでした。
ドキュメントもタグポリシーの使用経験がないならデフォルトのままがいいと言っていますので、従いましょう。
ただし、非準拠操作を防止しないので非準拠タグが作成できそうですが、とりあえずこのまま進めてみましょう。

![05Organizationsアタッチ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/aa45eb89-e53d-5ddd-3e00-943ab698c3ee.png)

適当なアカウントにタグポリシーをアタッチします。

では、試しにタグポリシーをアタッチしたアカウントにサインインしてVPCをタグをつけずに作成してみます。
結果は、エラーも起きず普通に作成できました。

次に、タグキーに`PROJECT`、バリューに`Public`として作成してみます。
非準拠のタグですが、エラーも起きずそのとおりに作成されました。

AWS Resouce Groupsのタグポリシーを確認すると、非準拠として把握はされています。
しかし、非準拠操作を防止していないので、タグが作成されてしまったようです。

これではあまり意味がないので、タグポリシーの非準拠操作を防止してみます。
また、上述しましたが、タグポリシー自体につけたタグは、アタッチしたアカウントやOUでのリソース作成時に自動的に付与されるタグではなく、単にタグポリシーのタグという意味でした。
リソースにタグをつけるのと同様に、ポリシーにタグをつけているだけです。
ということでタグポリシーにつけたタグは削除しておきます。

タグポリシーにつけていたタグの削除と、非準拠操作防止を有効化しましたので、再度VPCを作成してみます。

![06Organizationsエラー①.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/de66382e-bdef-e1b9-c7bd-22093838bec4.png)

![07Organizationsエラー②.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/e17ecf9d-98aa-5b23-1e67-024f31b2d061.png)

タグポリシーに準拠していないタグを作成しようとしたら、エラーになって作成できませんでした。いいですね。

また、非準拠操作防止を有効化するに当たっての注意点として、ドキュメントに以下の記載がありました。

>Understand interactions with some services – Some AWS services have container-like groupings of resources that automatically create resources for you, and tags can propagate from a resource in one service to another. For example, tags on Amazon EC2 Auto Scaling groups and Amazon EMR clusters can automatically propagate to the contained Amazon EC2 instances. You may have tag policies for Amazon EC2 that are more strict than for Auto Scaling groups or EMR clusters. If you enable enforcement, the tag policy prevents resources from being tagged and may block dynamic scaling and provisioning.

間違っているかもしれませんが、自分の言葉で要約してみます。
EC2オートスケーリンググループなどは、リソース（インスタンス）を自動的に作成します。
インスタンスのタグはオートスケーリングのタグが反映されますが、インスタンス自体がオートスケーリンググループより厳しいタグポリシーがあったとします。
その場合、インスタンスが自動で作成されなくなってしまうという大惨事が起きてしまう可能性があります。
例えば、オートスケーリングのタグキー`Name`の値は`A`,`B`しか許されず、インスタンスのタグキー`Name`の値は`A`しか許されない場合などが、インスタンスの方が厳しいタグポリシーがある、ということになると思います。
オートスケーリングの値が`B`の場合、インスタンスの値も`B`になりますが、インスタンスが`A`の値しか許されていないので、作成できません。
このようなことが起きる可能性があるので、タグポリシーで非準拠操作を防止する際は、注意する必要があります。

# 終わりに

タグのルールが決まっている環境だと便利な機能だと思いました。
タグポリシーを複数作成している場合、上述のようにリソースが作成できないと言う予期せぬ出来事が起こりやすそうなので、便利ではありますが十分に配慮して使用した方がよさそうですね。