AWS Organizations タグポリシーで組織内のタグを標準化する

記事タイトルとURLをコピーする

SRE部 佐竹です。
本日は AWS Organizations の「タグポリシー (Tag policies)」について記載します。

はじめに

AWS Organizations タグポリシー とは、AWSサービスが生成する各リソースに付与可能なタグの標準化を各AWSアカウントに強制し、結果として「タグの入力間違い」を防ぐことが可能となる制御ポリシーです。

以下はタグポリシーのイメージです。

f:id:swx-satake:20201201184529p:plain

本ブログは前提として「AWSのタグ機能」についての理解が必要になるため、以下のブログを合わせてご参考ください。

blog.serverworks.co.jp

また、Organizations における「継承」という用語については以下で説明しています。

blog.serverworks.co.jp

タグポリシーを有効化する

タグポリシーの有効化についてのドキュメントは以下を参考ください。

docs.aws.amazon.com

設定マネジメントコンソールの「ポリシー」から確認が可能です。

f:id:swx-satake:20201201190345p:plain

タグポリシーが有効化されている状態であれば、タグポリシーが利用可能です。

上画像の「タグポリシー」という文字がリンクになっているので、これを押下して先に進みます。

今回は2つのタグポリシーを作成してみます。まずは「Name」というタグポリシーです。

タグキー大文字化コンプライアンス

f:id:swx-satake:20201201191550p:plain

「タグキー大文字化コンプライアンス」は、タグキー(Key)の大文字小文字を制御する設定です。「タグキーに上記で指定した大文字を使用する」にチェックを入れると有効になります。

つまりこれはタグキー Name に対しては N が大文字の Name しか許さないことが可能となります。これによって禁止される Name のスペルは例として以下の通りです。

  • name:Nが大文字ではないためNG
  • NAME:AMEが大文字のためNG
  • NAme:Aが大文字のためNG
  • NamE:Eが大文字のためNG

上記のようなタグのキーは、入力が不可能となります。ただし、[Name ]のような最後に半角スペースが付与されたようなキーは許容されてしまいます。あくまで特定のスペルにおいて「大文字&小文字の組み合わせ」を標準化(制御)するのが目的の機能です。

タグ値コンプライアンス

f:id:swx-satake:20201201191603p:plain

「Environment」という2つ目のタグポリシーでこちら説明します。

「タグ値コンプライアンス」は Excel のプルダウンリスト(ドロップダウンリスト)の機能を提供する機能と考えて頂いて問題ありません。つまり予め規定されたタグのバリューのみが入力可能となる制御です。「このタグキーに許可される値を指定する」にチェックを入れることで有効になります。

  1. Prd
  2. Stg
  3. Dev
  4. Uat

今回は、上記4つのみを標準としました。よって、Environment をキーとして利用する場合、バリューとしてはこれらの4つ以外の入力は一切できなくなります。

f:id:swx-satake:20201201193211p:plain

実際の設定画面は上画像の通りです。また設定は1つのワイルドカード * が許可されています。

注意としては、実際の各リソースへのタグ入力時においては、Excelのようにプルダウンリスト形式で表示されるわけではなく、バリューは常に手入力が必要となります。

強制するリソースタイプ

f:id:swx-satake:20201201193414p:plain

「強制するリソースタイプ」は統制の対象としたいAWSリソースを規定するものです。「このタグの非準拠操作を防止します」にチェックを入れることで有効になります。

この設定で選択されたリソースのみが、上記2つの標準化(制御)の対象となります。

f:id:swx-satake:20201201193428p:plain

実際の設定画面は上画像の通りです。

本設定を行わない場合、どのリソースタイプにもタグポリシーが有効にならないため注意してください。

タグポリシーの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 インスタンス 作成時の制御

f:id:swx-satake:20201202104826p:plain

上画像の通り「NAME」というタグを追加してみました。これは「AME」が大文字でありタグポリシーに違反しています。

f:id:swx-satake:20201202104928p:plain

EC2 インスタンスの構築を行うと「作成失敗」となり、Name がタグポリシーによって標準化されている旨が表示されます。

f:id:swx-satake:20201202105053p:plain

「NAME」タグを削除して作成してみます。

f:id:swx-satake:20201202105124p:plain

今度は作成が成功しました。

なお、「Env」は「Environment」の代替なのですが、これは「Environment」で制御されないため、入力規則を無視してしまいます。

EC2 インスタンスのタグ修正時の制御

f:id:swx-satake:20201202105345p:plain

構築済の EC2 インスタンスに対して Environment を付与したいとします。この時タグのキーが「EnvironmenT」と、「タグキー大文字化コンプライアンス」に違反している場合上画像通りのエラーが発生します。

f:id:swx-satake:20201202105527p:plain

加えてタグキー Environment を正しく記載していたとしても Environment は入力規則が「タグ値コンプライアンス」にて設けられています。それ以外の値は上画像通りのエラーが発生します。

EBS ボリュームのタグ修正時の制御

f:id:swx-satake:20201202105716p:plain

今回の場面はタグキー Environment を正しく記載できていますが、「タグ値コンプライアンス」にて「PRD」は「Prd」と入力する必要があり、エラーとなっています。

3つのシーンでそれぞれタグポリシーによる制御状況を確認しました。想定通りの動きをしており、うまく標準化に役立ちそうです。

AWS Resource Groups におけるタグポリシー機能

Organizations に存在するタグポリシーの画面は設定画面ですが、そのタグポリシーに準拠しているかどうかは、「AWS Resource Groups > タグポリシー」の画面から確認できます。

f:id:swx-satake:20201202110922p:plain

開くと、上画像のようなコンソールが表示されます。

f:id:swx-satake:20201202110959p:plain

もし上画像のようなエラーが発生している場合は、以下の設定を有効にする必要があります。

f:id:swx-satake:20201202111209p:plain

AWS Organizations の右上にある「設定」を押下すると表示される上画像の画面で、「AWS のサービスに対する信頼されたアクセス」においてタグポリシーを有効化してください。

f:id:swx-satake:20201202115024p:plain

有効化を行うと、上画像の通り「有効にしました」と表示されます。

タグポリシーの準拠状況を確認する

f:id:swx-satake:20201202111501p:plain

タグポリシーのコンソールから、「この AWS アカウント」を表示します。

f:id:swx-satake:20201202111538p:plain

タグポリシーに準拠していないタグがあるかどうか、確認を行いたいリージョンを選択して検索を行えます。

f:id:swx-satake:20201202111747p:plain

VPC と Subnet が検索結果に表示されました。「非標準」となっている部分がリンクになっているので押下すると上画像が表示されます。検索結果の通り、Subnet の Environment には「ap-northeast-1d」と予め規定された4つの値以外が入っていることがわかります。

この機能を使うことで、規定されていないバリューを付与してしまっているリソースを洗い出すことが可能そうです。

非準拠タグがあるリソースの仕様

この「非準拠タグがあるリソース」は以下の仕様をご理解の上、ご利用ください。

  • 「タグポリシーで規定されたタグが付与されているか」どうかはチェックできない。具体的には、現在 EBS ボリューム には Name タグが付与されておらず、Environment タグだけが付与されているが、検索結果に「Nameタグが付与されていません」とは表示されない。タグが付与されているかどうかのチェックではない*1
  • Name タグは全ての値を許可していることからどのような値でも問題ないため「非準拠タグがあるリソース」としては表示されない
  • 「強制するリソースタイプ」の設定は関係なく表示される。具体的には VPC と Subnet は「強制するリソースタイプ」に設定していないが検索結果に表示されている

まとめ

f:id:swx-satake:20201201184529p:plain

今回のブログでは、AWS Organizations のタグポリシーについて記載しました。

タグポリシーを利用することで、ターゲットとしたリソースにおける「タグキーの大文字小文字」を標準化することができ、また予めリストにしておいたバリュー(値)のみを入力可とすることができます。

AWSアカウントが複数あると、Name タグキーが name になっていたり、Environment のバリューに Prod や Production や PRD などが混在してしまったりと、結果的にタグによる検索性や分析性が下がってしまうということが起きます。この問題の発生を防ぐにあたり、かなり有効な機能と考えられます。

ただし、リソースにタグを強制することはできません(これは IAM ポリシーで代替します)。加えて、タグが付与されているかどうかのチェックでもありません。

タグポリシーは「タグキーの大文字小文字のチェック」と「タグバリューに定められた値のみを入力可にする」とを「予め定めたリソースに強制する」という標準化の機能です。仕様をよくご理解頂いた上で活用頂けますと幸いです。

では、またお会いしましょう。

*1:タグエディターでは特定のタグが付与されていないリソースが検索可能です

佐竹 陽一 (Yoichi Satake) 記事一覧はコチラ

SRE3課所属。AWS資格12冠。2010年1月からAWSを利用してきました。
AWSのコスト削減、最適化を得意としています。