SRE部 佐竹です。
本日は AWS Organizations の「タグポリシー (Tag policies)」について記載します。
はじめに
AWS Organizations タグポリシー とは、AWSサービスが生成する各リソースに付与可能なタグの標準化を各AWSアカウントに強制し、結果として「タグの入力間違い」を防ぐことが可能となる制御ポリシーです。
以下はタグポリシーのイメージです。
本ブログは前提として「AWSのタグ機能」についての理解が必要になるため、以下のブログを合わせてご参考ください。
また、Organizations における「継承」という用語については以下で説明しています。
タグポリシーを有効化する
タグポリシーの有効化についてのドキュメントは以下を参考ください。
設定マネジメントコンソールの「ポリシー」から確認が可能です。
タグポリシーが有効化されている状態であれば、タグポリシーが利用可能です。
上画像の「タグポリシー」という文字がリンクになっているので、これを押下して先に進みます。
今回は2つのタグポリシーを作成してみます。まずは「Name」というタグポリシーです。
タグキー大文字化コンプライアンス
「タグキー大文字化コンプライアンス」は、タグキー(Key)の大文字小文字を制御する設定です。「タグキーに上記で指定した大文字を使用する」にチェックを入れると有効になります。
つまりこれはタグキー Name
に対しては N
が大文字の Name
しか許さないことが可能となります。これによって禁止される Name
のスペルは例として以下の通りです。
- name:Nが大文字ではないためNG
- NAME:AMEが大文字のためNG
- NAme:Aが大文字のためNG
- NamE:Eが大文字のためNG
上記のようなタグのキーは、入力が不可能となります。ただし、[Name ]のような最後に半角スペースが付与されたようなキーは許容されてしまいます。あくまで特定のスペルにおいて「大文字&小文字の組み合わせ」を標準化(制御)するのが目的の機能です。
タグ値コンプライアンス
「Environment」という2つ目のタグポリシーでこちら説明します。
「タグ値コンプライアンス」は Excel のプルダウンリスト(ドロップダウンリスト)の機能を提供する機能と考えて頂いて問題ありません。つまり予め規定されたタグのバリューのみが入力可能となる制御です。「このタグキーに許可される値を指定する」にチェックを入れることで有効になります。
- Prd
- Stg
- Dev
- Uat
今回は、上記4つのみを標準としました。よって、Environment をキーとして利用する場合、バリューとしてはこれらの4つ以外の入力は一切できなくなります。
実際の設定画面は上画像の通りです。また設定は1つのワイルドカード *
が許可されています。
注意としては、実際の各リソースへのタグ入力時においては、Excelのようにプルダウンリスト形式で表示されるわけではなく、バリューは常に手入力が必要となります。
強制するリソースタイプ
「強制するリソースタイプ」は統制の対象としたいAWSリソースを規定するものです。「このタグの非準拠操作を防止します」にチェックを入れることで有効になります。
この設定で選択されたリソースのみが、上記2つの標準化(制御)の対象となります。
実際の設定画面は上画像の通りです。
本設定を行わない場合、どのリソースタイプにもタグポリシーが有効にならないため注意してください。
タグポリシーのjson
設定は json として保存されます。一例として、 Environment のタグポリシー json を掲載します。
{ "tags": { "Environment": { "tag_key": { "@@assign": "Environment" }, "tag_value": { "@@assign": [ "Prd", "Stg", "Dev", "Uat" ] }, "enforced_for": { "@@assign": [ "ec2:instance", "ec2:volume", "rds:cluster-pg", "s3:bucket" ] } } } }
動作確認
実際にリソースにタグを付与しながらどのような制御が行われるのか確認します。
EC2 インスタンス 作成時の制御
上画像の通り「NAME」というタグを追加してみました。これは「AME」が大文字でありタグポリシーに違反しています。
EC2 インスタンスの構築を行うと「作成失敗」となり、Name
がタグポリシーによって標準化されている旨が表示されます。
「NAME」タグを削除して作成してみます。
今度は作成が成功しました。
なお、「Env」は「Environment」の代替なのですが、これは「Environment」で制御されないため、入力規則を無視してしまいます。
EC2 インスタンスのタグ修正時の制御
構築済の EC2 インスタンスに対して Environment
を付与したいとします。この時タグのキーが「EnvironmenT」と、「タグキー大文字化コンプライアンス」に違反している場合上画像通りのエラーが発生します。
加えてタグキー Environment
を正しく記載していたとしても Environment
は入力規則が「タグ値コンプライアンス」にて設けられています。それ以外の値は上画像通りのエラーが発生します。
EBS ボリュームのタグ修正時の制御
今回の場面はタグキー Environment
を正しく記載できていますが、「タグ値コンプライアンス」にて「PRD」は「Prd」と入力する必要があり、エラーとなっています。
3つのシーンでそれぞれタグポリシーによる制御状況を確認しました。想定通りの動きをしており、うまく標準化に役立ちそうです。
AWS Resource Groups におけるタグポリシー機能
Organizations に存在するタグポリシーの画面は設定画面ですが、そのタグポリシーに準拠しているかどうかは、「AWS Resource Groups > タグポリシー」の画面から確認できます。
開くと、上画像のようなコンソールが表示されます。
もし上画像のようなエラーが発生している場合は、以下の設定を有効にする必要があります。
AWS Organizations の右上にある「設定」を押下すると表示される上画像の画面で、「AWS のサービスに対する信頼されたアクセス」においてタグポリシーを有効化してください。
有効化を行うと、上画像の通り「有効にしました」と表示されます。
タグポリシーの準拠状況を確認する
タグポリシーのコンソールから、「この AWS アカウント」を表示します。
タグポリシーに準拠していないタグがあるかどうか、確認を行いたいリージョンを選択して検索を行えます。
VPC と Subnet が検索結果に表示されました。「非標準」となっている部分がリンクになっているので押下すると上画像が表示されます。検索結果の通り、Subnet の Environment には「ap-northeast-1d」と予め規定された4つの値以外が入っていることがわかります。
この機能を使うことで、規定されていないバリューを付与してしまっているリソースを洗い出すことが可能そうです。
非準拠タグがあるリソースの仕様
この「非準拠タグがあるリソース」は以下の仕様をご理解の上、ご利用ください。
- 「タグポリシーで規定されたタグが付与されているか」どうかはチェックできない。具体的には、現在 EBS ボリューム には Name タグが付与されておらず、Environment タグだけが付与されているが、検索結果に「Nameタグが付与されていません」とは表示されない。タグが付与されているかどうかのチェックではない*1
- Name タグは全ての値を許可していることからどのような値でも問題ないため「非準拠タグがあるリソース」としては表示されない
- 「強制するリソースタイプ」の設定は関係なく表示される。具体的には VPC と Subnet は「強制するリソースタイプ」に設定していないが検索結果に表示されている
まとめ
今回のブログでは、AWS Organizations のタグポリシーについて記載しました。
タグポリシーを利用することで、ターゲットとしたリソースにおける「タグキーの大文字小文字」を標準化することができ、また予めリストにしておいたバリュー(値)のみを入力可とすることができます。
AWSアカウントが複数あると、Name
タグキーが name になっていたり、Environment
のバリューに Prod や Production や PRD などが混在してしまったりと、結果的にタグによる検索性や分析性が下がってしまうということが起きます。この問題の発生を防ぐにあたり、かなり有効な機能と考えられます。
ただし、リソースにタグを強制することはできません(これは IAM ポリシーで代替します)。加えて、タグが付与されているかどうかのチェックでもありません。
タグポリシーは「タグキーの大文字小文字のチェック」と「タグバリューに定められた値のみを入力可にする」とを「予め定めたリソースに強制する」という標準化の機能です。仕様をよくご理解頂いた上で活用頂けますと幸いです。
では、またお会いしましょう。
*1:タグエディターでは特定のタグが付与されていないリソースが検索可能です
佐竹 陽一 (Yoichi Satake) エンジニアブログの記事一覧はコチラ
マネージドサービス部所属。AWS資格全冠。2010年1月からAWSを利用してきています。2021-2022 AWS Ambassadors/2023-2024 Japan AWS Top Engineers/2020-2024 All Certifications Engineers。AWSのコスト削減、最適化を得意としています。