タグポリシーのレポート機能をためしてみた

2023.01.11

こんにちは。たかやまです。

タグの入力間違いを防止する機能で「タグポリシー」というOrganizaitonsの機能があります。
コスト配分タグのような登録されるタグの値を厳格に管理したい場合に使える機能になります。

今回はタグポリシーの準拠状況をエクスポートするレポート生成機能をためす機会があったのでご紹介します。

ためしてみた

タグポリシー設定

こちらのブログを参考にタグポリシーを設定してください。

S3設定

レポートはS3にエクスポートするかたちになるため、S3バケットを用意していきます。
このS3バケットはバージニア北部(us-east-1)に作成されている必要があります。

To create an organization-wide compliance report, you must grant access for the tag policies service principal to an Amazon S3 bucket in the US East (N. Virginia) Region for report storage.

Prerequisites and permissions - AWS Tag Editor

なので適応な名前のS3バケットをバージニア北部(us-east-1)に用意してください。
ここではtag-policies-report-bucketというバケットを用意しています。

また、レポートを生成するバケットには以下のバケットポリシーを設定する必要があります。

{
    "Version": "2012-10-17", 
    "Statement": [ 
        { 
            "Sid": "TagPolicyACL", 
            "Effect": "Allow", 
            "Principal": { 
                "Service": [ 
                    "tagpolicies.tag.amazonaws.com" 
                 ]
            }, 
            "Action": "s3:GetBucketAcl", 
            "Resource": "arn:aws:s3:::<your-bucket-name>",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "<organization-management-account-id>",
                    "aws:SourceArn": "arn:aws:tag:us-east-1:<organization-management-account-id>:*"
                }
            } 
         }, 
         { 
            "Sid": "TagPolicyBucketDelivery", 
            "Effect": "Allow", 
            "Principal": { 
                "Service": [ 
                    "tagpolicies.tag.amazonaws.com" 
                 ]
            }, 
            "Action": [ 
                "s3:PutObject", 
                "s3:PutObjectAcl"
            ], 
            "Resource": "arn:aws:s3:::<your-bucket-name>/AwsTagPolicies/<your-organization-id>/*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "<organization-management-account-id>",
                    "aws:SourceArn": "arn:aws:tag:us-east-1:<organization-management-account-id>:*"
                }
            }
         } 
    ] 
}

Prerequisites and permissions - AWS Tag Editor

your-organization-idはこちらのコマンドで確認できます。

aws organizations describe-organization \
--query Organization.Id \
--output text

設定した値はこのような感じ

レポート生成

S3バケットを用意したら実際にレポートを生成していきます。
Resource Groupsのタグポリシ -> この組織 -> レポートを生成を選択します。

ポップアップが表示されたら、バケットポリシーを設定したS3バケット名を指定して、レポートを生成します。

下記のエラーが出る場合はバケットポリシーまたはS3バケットのリージョンが誤っている可能性があるので設定内容に誤りがないかご確認ください。

tagpolicy-export-bucket is not a valid S3 bucket writable by the service.

レポートが生成されると格納先S3へのリンクが生成されます。

あとはダウンロードしてレポートを確認することができます。

Appendix : レポート生成(EventBridge Scheduler)

タグポリシーは現在EventBridgeに対応しておらず、Noncompliantリソースが発生した場合に通知するといった対応はできません。ただ、定期的にレポートを生成したいといった場合にはEventBridge Schedulerを使うことはできます。

ただレポート生成するのも味気ないので、EventBridge Scheldulerの設定も合わせてご紹介します。

EventBridge Schedulerはバージニア北部(us-east-1)に作成してください。
ここでのcron式はcron(0 0 L * ? *)にすることで月末に実行するようなスケジュールにしています。

APIはResource Groups TaggingStartReportCreationを使います。

jsonには先ほど設定したレポート生成先のバケット名を指定します。

{
  "S3Bucket": "tag-policies-report-bucket"
}

あとは環境に合わせて再試行ポリシー/DLQ等の設定をしてください。

設定後は通常のレポート生成と同様にスケジュール毎にタグポリシーのレポートが生成されます。
レポートの格納先はS3バケットなので、S3イベント通知機能を使ってメール通知などを実装すればより運用しやすいかと思います。

最後に

コスト配分タグの値を誤っていると費用確認のときに面倒になるので、こちらのレポート機能を活用して定期的にタグ値の棚卸しするのもいいかと思います!

以上、たかやま(@nyan_kotaroo)でした。