📘

AWS Resource Tagging Standard の導入検証

に公開

こんにちは。エン・ジャパン株式会社のプラットフォームエンジニアリンググループ(PEG)に所属している山﨑です。

弊社では、AWSリソースを作成する際にタグを付与する運用を行っています。例えば、OwnerタグやEnvタグなどを使用し、リソースの管理者や環境を特定することで、コスト管理やリソース管理に役立てています。タグが付与されていない場合、誰が管理しているか分からず、不要なリソースであっても確認に時間がかかり、その間にコストが発生してしまいます。また、タグが付与されていないリソースはそもそも管理が不十分であることが多く、管理者が判明したとしても用途が不明なため削除できず、結果としてコストが発生し続けるという問題が生じることがあります。

タグを強制するTag Policyという機能がありますが、強制だと上手くデプロイできなくなる可能性があるため、まずはタグポリシーの違反を検出するだけのAWS Resource Tagging Standardを導入することにして検証を行いました。

概要

AWS Resource Tagging StandardはFSBP(AWS Foundational Security Best Practices)やCISと同様にセキュリティ基準の1つです。有効化するだけで簡単に利用可能になります。

デフォルトの設定では、何もタグが付いていなかったら重要度LOWの脆弱性として検出されます。そのため、LOWを検知しないような運用になっている場合は、LOWを検知するように設定したり、Automation Rulesで重要度を変更するなど、工夫が必要になります。

コントロールごとに必須とするタグを設定することができ、複数のタグを設定しておくとすべてのタグが含まれていないとFAILEDとなります。

なお、aws:で始まるキーのタグはカウントされないとのことです。

指定されたリソースにタグがあるかどうか(‘aws:’で始まるものを除く)、または tags keys が指定されている場合は指定された tags keys が存在するかどうかを調べる。タグがないか、指定したタグキーが存在しない場合、ルールは NON_COMPLIANT となる。

中央設定を利用している場合

中央設定が導入されているOrganizationの場合、個別のアカウントでAWS Resource Tagging Standardを有効化できない場合があるため、先に有効化できるようにポリシーを変更しておく必要があります。

# AWS Resource Tagging Standardを有効化できるようにするためのConfiguration Policyを個別のアカウント(xxx)に紐付け
aws securityhub start-configuration-policy-association \
  --configuration-policy-identifier "xxx" \
  --target '{"AccountId": "xxx"}'

デフォルトのリソースが検知されてしまうコントロール

Control ID 注意点
IAM.24 デフォルトのIAMロール(AWSServiceRoleForSupport, AWSServiceRoleForECSなど)も検知されてしまう。
EventBridge.2 イベントバスのdefaultも検知されてしまう。また、us-east-1のdefaultも検知される。
CloudFormation.2 CloudFormationはコンソールからタグを付けられない。
EC2.43 default SGも検知されてしまう。
Athena.3 primaryも検知されてしまう。us-east-1のprimaryも検知される。
  • IAM.24に関しては、検知されるデフォルトのIAMロールの数が多いので除外を検討した方が良いかもしれません。
  • デフォルトのリソースはアカウント発行時にタグ付けする仕組みを用意するのが良さそうです。
  • 上記のコントロール以外にも様々なケースが出てくる可能性があるため、全アカウントに同時に適用するのではなく、一部のアカウントから段階的に適用していくとスムーズに展開できると思います。

コントロールにタグを設定する方法

コントロールに対してタグを設定する方法としていくつか方法がありますが、ここではコンソールとCLIでの設定方法について紹介します。複数のコントロールに対して同時にタグを設定する場合は、コンソールではなくCLIを利用すると効率的です。

コンソールから設定

各コントロールのパラメータタブを開き、必要なタグを設定します。

CLIで設定

適切な権限を持つプロファイルに切り替えた状態で以下を実行します。(複数のコントロールに設定する場合はcontrol_idをリストにして、for文などで処理してください。)

control_id=EC2.44
tags=["Owner","Env"]

# AWS Resource Tagging Standardのコントロールで検知するタグを設定
aws securityhub update-security-control \
  --security-control-id $control_id \
  --parameters '{"requiredTagKeys": {"Value": {"StringList": $tags},"ValueType": "CUSTOM"}}' \
  --region ap-northeast-1

まとめ

AWS Resource Tagging Standardは、FBSPやCISと同様に、有効化すれば簡単に利用できるため、タグを適切に付けていくための有効な方法です。一部、デフォルトのリソースが検知されることがありますので、コントロールを除外したり、あらかじめタグを付けておくなどの工夫をすることで、適切なタグ付けの仕組みを構築できます。検証で明らかになったことは随時追加していく予定です!

エン・ジャパン テックブログ

Discussion