AWS

AWS Security Hub「タグ付け標準」に37の新コントロール追加!運用時の注意点と自動化のポイント

sho

はじめに

西藤です。

AWS Security Hubには「タグ付け標準」という標準があり、AWSリソースに対してタグの有無をチェックできます。
組織内のAWSリソースにおけるタグ付与状況をチェックしたいときに便利な仕組みです。

参考:AWS Security Hub が AWS リソースのタグ付け標準を発表

そして、そのSecurity Hubのドキュメントを見ると、直近で次のような更新が入っています。

ChangeDescriptionDate
New security controlsSecurity Hub released 37 new controls for the AWS Resource Tagging Standard.January 22, 2025

引用:https://docs.aws.amazon.com/securityhub/latest/userguide/doc-history.html 2025/02/01参照

本記事執筆時点では英語版のドキュメントにのみ記載があり、AWS Security Hubのタグ付け標準(AWS Resource Tagging Standard)に関する37個の新しいコントロールが追加されたことが確認できます。

タグ付け標準のドキュメントページでの詳細な更新内容は以下の通りで、追加されたコントロールの顔ぶれがわかります。

AppConfigからIoT SiteWiseまで、さまざまなリソースタイプに対するコントロールが追加されています。

この追加により、AWS Security Hubでチェック可能なAWSリソースは122種類に拡大し、組織のタグ管理ツールとしての利便性が向上しました。

今回は、新たに37個の標準コントロールが追加されたため、「タグ付け標準」の活用時の注意点と対応策について整理します。

注意点1:デフォルトではタグの有無しかチェックできない

まずは、タグ付け標準の活用時における基本的な注意点として、デフォルトだとタグの有無だけをチェックするという点があります。

これは以前の記事でも触れているのですが、タグ付け標準は「タグキーの有無」をチェックする仕組みであり、後述するパラメータ指定をしない場合は「そもそもタグがついているか」をチェックします。

このことは以前の私の記事でも紹介しました。

"requiredTagKeys"を指定するとそのタグキーの有無を確認しますが、その指定がないデフォルトの場合は「少なくとも1つのタグキーがついているか」を確認するという仕様になっています。
「最低限何かしらのタグはついているべきなのに、何もついていないリソースを検出する」という目的に使うことができるということです。

AWSのリソースタグについて注意するべき10のポイント

組織内において、各AWSリソースに対して何らかのタグ付けを必須とする運用はよく行われていると思いますが、大抵は何らかのタグキーの種類を定めているはずです。

(例:「CostCenterタグを必ず付与して、コストの発生所管を明確にすること」など)

そのため、タグ付け標準を活用する際にはコントロールのパラメータを別途指定して「どのタグキーの有無を検査するか」を定める必要があることを覚えておきましょう。

注意点2:すべてのコントロールのパラメータを一括更新できない

タグ付け標準は、コントロールのパラメータで検査対象のタグキーを指定できます。以下のような画面で設定します。

しかし、このパラメータは一つひとつのコントロールごとに設定するような仕組みになっており、すべてのコントロールのパラメータを一括で更新できるような機能は提供されていません。

そのため、たとえば

  • 「リソースには必ずCostCenterのタグをつける」

のような社内共通で同じタグキーをつけることを想定している場合、すべてのコントロール(今回の新規追加を踏まえると122個)それぞれに対してすべて同じ値でパラメータを設定する必要があります。
そして、今回のように新規コントロールが追加された際に、自動的に対応できる仕組みを構築する必要があります。

注意点3:中央管理でも一括更新できない

AWS Organizationsを利用すれば、AWS Security Hubの中央管理が可能です。これにより、複数のAWSアカウントに対し、統一された標準とコントロールの設定を適用できます。

参考:Security Hubの中央管理機能の発表リリース記事
参考:Security Hubの中央管理のセットアップ解説記事

「タグ付け標準」を適用するポリシーを組織内に適用するとしたら以下のようなイメージです。

これにより、多数のAWSアカウントとコントロールに対して、一括で効率的に設定できるようになります。

ただし、中央管理でも設定の手間が発生します。設定方法を確認しましょう。

まず、中央管理を行う際にはSecurity Hubの「設定」画面から設定を行います。

そして、「ポリシー」の作成

作成画面から「タグ付け標準」を選択して、コントロールのパラメータ設定を行います。

「すべてのコントロールを有効化」を選択し、「コントロールパラメータのカスタマイズ」にチェックを入れると、パラメータを設定できます。

そして、ここからが手間のかかる部分なのですが、各コントロールのパラメータをそれぞれ設定する必要があることに注意が必要です。

コントロールを選択してはタグキーを入力し、コントロールを選択してはタグキーを入力し・・・という作業を繰り返すことになります。今回のようにコントロールが増えた時には、増えた分のコントロールに対しても同様の設定を行う必要があります。

そして、コントロールの設定を指定した上で、Organizationの中でどのOU・アカウントに適用するかを選択して設定を完了します。

対策案:コントロールのパラメータの設定・追加対応の自動化

以上のように、タグ付け標準のコントロールのパラメータ設定には手間がかかるということがわかりました。
そして、コントロールが後から増えた場合への対応も考えておく必要があります。

なので、そういった手間を削減するために「注意点2」のような、中央管理せずAWSアカウント内でSecurity Hubの設定を行う場合を例に、コントロールのパラメータの設定自動化を考えてみましょう。

たとえば、以下のようなコードでLambda関数を作成し、それを日時実行するなどして今回のような新規コントロール追加に備えるのはいかがでしょうか。

このLambda関数を使えば、新しいコントロールが追加された際にも、自動的にタグキーの設定を更新できます。
これにより、管理者が手動で新しいコントロールを確認し、毎回設定を変更する手間を省けます。

処理の流れは以下のとおりです

  • Security Hubの「タグ付け標準」に紐づくコントロールを取得
  • すべてのコントロールに対し、タグキーのパラメータ(requiredTagKeys)を更新

コードは以下のようになります。

import boto3
import os
# 環境変数にて必須のタグキーを指定
required_tag_key = os.environ.get("RequiredTagKey")
keys_list = [required_tag_key]
def lambda_handler(event, context):
    try:
        client = boto3.client("securityhub")
        account_id = boto3.client("sts").get_caller_identity().get("Account")
        # タグ付け標準に紐づくコントロール情報を取得
        response = client.describe_standards_controls(
            StandardsSubscriptionArn=f"arn:aws:securityhub:{os.environ.get('AWS_REGION')}:{account_id}:subscription/aws-resource-tagging-standard/v/1.0.0"
        )
        controls = response["Controls"]
        # コントロール一つひとつのパラメータを更新して、必須のタグキーを指定する
        for control in controls:
            print(f"Updating control {control['StandardsControlArn']}")
            standards_control_arn = control["StandardsControlArn"]
            control_id = control["ControlId"]
            # 環境変数で指定されている値で"requiredTagKeys"のパラメータをセット
            client.update_security_control(
                SecurityControlId=control_id,
                Parameters={
                    "requiredTagKeys": {
                            "ValueType": "CUSTOM",
                            "Value": {
                            "StringList": keys_list,
                            },
                    }
                },
            )
            print(f"Updated control {standards_control_arn}")
        return {
            "statusCode": 200,
            "body": "Updated all controls",
        }
    except Exception as e:
        print(f"Error: {e}")
        raise e

これを日次で実行する際のフローとしては以下のような具合でしょうか。

この関数を日々実行すれば、現在122個のコントロールが今後増えても、増加分を含めて同一のパラメータを自動設定できます。

AWS Security Hubで検査可能なリソースタイプに限られますが、組織において定めたタグのポリシーに基づいた適用状況のチェックを取りこぼすことなく行えるようになるでしょう。

まとめ

今回は、AWS Security Hubのタグ付け標準に関するコントロールが37個も追加されたということで、その活用時の注意点について整理してみました。

Security Hubの中央管理の有無にかかわらず、一律にパラメータを設定することが難しいため、自動化する仕組みを構築することが重要です。

今回、中央管理を行っている場合の自動化の例は載せられませんでしたが、本記事が、組織内のタグ管理やAWS Security Hubのタグ付け標準の活用による運用効率化に役立てば幸いです。

参考資料

AUTHOR
sho
sho
記事URLをコピーしました