AWS タグの値が取りうる情報を限定する

## 概要

AWSのタグの値が取りうる情報を限定する方法を簡単にまとめる。
「タグ付けの強制設定」ではないので注意する。

## 前提

AWS Organizationsというサービスの利用が前提となる。
AWS Organizationsは「EC2」とか「S3」とかと並列するよう（に見える）なAWSアカウント一元管理サービスで、料金はかからない模様。

![AWS_Organizations___Global.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/a5ff535c-fd24-b6ba-7f9c-4dc773aa3a9c.png)

## 方法

1. AWS Organizationsを開く。
1. サイドバーの「ポリシー」をクリックし、表示された画面の「タグポリシー」をクリックする。

    ![ポリシー___AWS_Organizations.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/0418247d-90c3-7199-fa8b-88bb78413ce0.png)

1. 「タグポリシーを有効にする」をクリックする。

    ![タグポリシー___AWS_Organizations.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/e4f189dc-6ccb-9020-3b17-a58ae93c033b.png)

1. 「ポリシーを作成」をクリックする。

    ![タグポリシー___AWS_Organizations.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/32810c28-f4ab-29c7-0770-0c51f39370ed.png)

1. ポリシー名を入力し、タグキーのポリシー詳細を決める。今回は「キーIsTestは`true`か`false`のみ許容」
1. タグキーに`IsTest`と入力する。
1. 「タグキーに上記で指定した大文字を使用します。」にチェックを入れる。
1. 「このタグキーに聞かされる値を指定します。」にチェックをいれ「値を編集」をクリックする。表示されたポップアップで`true`と`false`を追加する。

    ![新しいタグポリシーを作成___AWS_Organizations.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/cf9c6827-b4e3-8dba-85b7-9273a7f53f30.png)

1. 「強制するリソースタイプ」の「このタグの非準拠操作を防止します。」のチェックボックスにチェックを入れる。
1. 「リソースタイプの指定」をクリックする。
1. 「すべて選択」をクリックし、「変更を保存」をクリックする。（これですべてのリソースのタグでポリシーに準拠しているかのチェックが行われる。）

    ![ポリシーを編集___AWS_Organizations.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/76086a75-6e9c-3d55-99c1-fb52d9b0f4b5.png)

1. 下記のようにチェックマークが入っていることを確認し、ポリシーを保存する。

    ![ポリシーを編集___AWS_Organizations.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/32700199-cc02-766f-4bcb-2710356fe3ca.png)

1. タグポリシーの一覧まで戻る。
1. 今回作成したポリシーのチェックボックスにチェックをつけ、アクションの「ポリシーをアタッチ」をクリックする。

    ![タグポリシー___AWS_Organizations.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/e0a74047-4e6e-e38e-d070-efaaac2378c0.png)

1. どの組織に今回のポリシーを適応するか確認される。今回は最も上部の組織である「Root」にポリシーを付与してみる。（「〇〇の組織の人なら好き勝手にタグの値を記載していい」訳がないので基本Rootにポリシーをアタッチするで良い気がする。）
1. Rootのチェックボックスにチェックをつけ、「ポリシーのアタッチ」をクリックする。

    ![ポリシーをアタッチ___AWS_Organizations.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/1a2b146a-fe1e-d25e-97aa-a2c8c4533341.png)

1. 下記のように緑色の帯が出ればアタッチに成功している。

    ![IsTestPolicy___AWS_Organizations.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/5f9ec9b7-d351-ecf3-f8fc-41b67c9ff165.png)

1. 本当にポリシーがアタッチされたか確認する。とあるEC2インスタンスのタグを管理の画面を開く。現在は`IsTest`が`true`に設定されている。これはポリシー通りである。

    ![タグを管理___EC2___ap-northeast-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/4dcdc8d5-9ab1-82e2-de8d-e6eb0f350318.png)

1. 下記のように`IsTest`を`x`に変えて保存してみる。

    ![タグを管理___EC2___ap-northeast-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/a8508d84-c4ba-8881-92a4-5870d15e7b13.png)

1. 下記のようにタグポリシーに違反している旨が出力され、保存する事ができない。

    ![タグを管理___EC2___ap-northeast-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/cc1dfb82-bea6-1227-343d-f5fa3a108056.png)

1. タグの内容を強制しているだけでタグの存在そのものは強制していない。なのでIsTestのキーのタグがなくても保存できる。

    ![タグを管理___EC2___ap-northeast-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/67b03ab3-d0f6-769d-794e-31e189c3641c.png)

1. 後はプロジェクト名やENV名キーなども取りうる情報を限定するポリシーを設定することで有効活用できそうだ。

## 参考文献

https://dev.classmethod.jp/articles/update-tag-policies/

https://docs.aws.amazon.com/ja_jp/organizations/latest/userguide/orgs_manage_policies_tag-policies.html