AWS Config を使用したコスト最適化ガバナンスの自動化を試してみた

AWS Config を使用したコスト最適化ガバナンスの自動化を試してみた

AWS Configと適合パックを活用したコスト最適化ガバナンスの自動化を検証しました。gp2からgp3への変換や未使用EBSボリュームの特定など、複数アカウント・複数リージョンに跨った自動検知と修復の実装方法を紹介します。
Clock Icon2025.03.11

こんにちは!クラウド事業本部のおつまみです。

みなさん、コスト最適化実施していますか?

Developers IOではFinOps & クラウドコスト関連ナレッジ をまとめたものを毎月ご紹介しています。

https://dev.classmethod.jp/articles/finops-and-cloudcost-knowledge-2025-02/

こちらのブログで紹介されていたAWS Config を使用したコスト最適化ガバナンスの自動化が良さそうだなと思い、試してみたのでご紹介します。

https://aws.amazon.com/jp/blogs/news/automating-cost-optimization-governance-with-aws-config/

上記のAWS公式ブログでは、Contol Towerが有効化された環境にデプロイする手順となっておりましたが、本ブログではContol Towerが有効化されていない AWS Organizations 環境にデプロイする手順をご紹介します。

3行まとめ

  • AWS Configと適合パックを活用することで、コスト最適化ガバナンスの自動化を実現できる
  • AWSから提供されているCloudFormationテンプレートでは、複数アカウント・複数リージョンに跨って以下の検知が可能になる
    • gp2からgp3への変換
    • 未使用EBSボリュームの特定
    • S3バケットのライフサイクル設定
  • 継続的な監視と改善により、長期的なコスト最適化が可能となる

AWS Configと適合パック(Conformance Packs)について

ソリューションの要となる AWS Config と適合パックについて簡単に解説します。

AWS Configは、AWSリソースの設定を継続的に評価、監査、評価するサービスです。
適合パックは、AWS Configルールと修復アクションをまとめたものであり、大規模なガバナンスチェックを可能にします。

以下イメージとなります。

aws-config-confarmance-pack-1

引用:AWS Config 適合パック (Conformance Packs) で何ができるのか分からなかったので絵を描いて理解してみた | DevelopersIO

なお今回AWSから提供されている「Cost Optimization Conformance Pack」では、コスト最適化に直結する以下のルールが含まれていました。

  • gp2からgp3への変換
  • 未使用EBSボリュームの特定
  • S3バケットのライフサイクル設定

構成図

このソリューションでは、以下がデプロイされます。

aws-config-cost-optimization-governance-implementation

  • AWS Config Organization 適合パック – ベストプラクティスのコスト最適化ロジックに照らしてリソースを評価するために使用される、AWS Config カスタムルールの集まり。
    • この Organization 適合パックは、各メンバーアカウントに個別の Cost Optimization Conformance Pack がデプロイされます。
  • AWS CloudFormation StackSet – AWS Organization 内のすべてのメンバーアカウントにデプロイされる CloudFormation StackSets の集まり。これらのスタックは以下をデプロイします。
    • AWS Lambda 関数 – AWS Config カスタムルールは、特定のリソースが上記で定義されたコストの最適化ベストプラクティスルールに 準拠 (Compliant) しているか 非準拠 (Noncompliant) かを評価するロジックを含む Lambda 関数を呼び出す。
    • IAM ロール – 2 つのカスタム IAM ロールがデプロイされます。1 つは Lambda 関数の呼び出しを可能にするもので、もう 1 つは AWS Systems Manager (SSM) が SSM ドキュメントで定義されている修復アクションを実行するために使われるものです。
  • AWS Systems Manager Automation ドキュメント – これは監査アカウントのみにデプロイされ、メンバーアカウントによって使用されます。

なお今回の検証環境OU構成は以下のようになっています。

Cursor_と_ルート___AWS_Organizations___Global

  • 管理アカウント ID : 16から始まるID
  • ソリューションのデプロイ元となる監査アカウントID :33から始まるID
  • OU1下のテストアカウントID:61から始まるID

事前作業

管理アカウントにて以下の作業を事前に実施します。

  • AWS Organizations の作成
  • AWS Config のアグリゲータの作成

手順はこちらのブログをご参考ください。

https://dev.classmethod.jp/articles/overview-introduction-to-organizations-enabled-configuration-procedure/

https://dev.classmethod.jp/articles/create-org-config-aggregator-by-cli/

  • AWS Config で特定のサービスを記録するよう設定している場合はリソースタイプで以下が有効化されていることを確認
    • AWS S3 Bucket
    • AWS EC2Volume

有効化されていないと、作成されたConfigルールの検出評価が「利用不可」になり、評価されません。

ルールの詳細___AWS_Config___ap-northeast-1 1

作業手順

以下の手順で実施します。

aws-config-cost-optimization-governance-implementation(1)

  1. AWS Organizations とAWS Config および AWS CloudFormation StackSets のサービスプリンシパルとの間に信頼関係を確立
  2. 監査アカウントに AWS Config および AWS CloudFormation の「委任管理者」権限を付与
  3. Cost Optimization Conformance Pack をデプロイ
  4. ソリューションの検証

1. AWS Organizations とAWS Config および AWS CloudFormation StackSets のサービスプリンシパルとの間に信頼関係を確立

  • AWS Organizations の管理アカウントで AWS CloudShell を使って以下のCLI コマンドを実行する。

    aws organizations enable-aws-service-access --service-principal=config-multiaccountsetup.amazonaws.com
    
    aws organizations enable-aws-service-access --service-principal=member.org.stacksets.cloudformation.amazonaws.com
    
    aws organizations register-delegated-administrator --service-principal=member.org.stacksets.cloudformation.amazonaws.com --account-id=222222222222
    
  • 以下のコマンドで、委任管理者として正常に確立されたことを確認する。

    aws organizations list-delegated-administrators --service-principal=config.amazonaws.com
    
    aws organizations list-delegated-administrators --service-principal=config-multiaccountsetup.amazonaws.com
    
    aws organizations list-delegated-administrators --service-principal=member.org.stacksets.cloudformation.amazonaws.com
    

    委任管理者アカウントのアカウント ID と共に、以下のような出力が表示されればOKです。

    {
        "EnabledServicePrincipals": [
            {
                "ServicePrincipal": "config-multiaccountsetup.amazonaws.com",
                "DateEnabled": "2025-03-04T06:51:32.632000+00:00"
            },
            {
                "ServicePrincipal": "config.amazonaws.com",
                "DateEnabled": "2025-03-04T07:13:01.089000+00:00"
            },
            {
                "ServicePrincipal": "member.org.stacksets.cloudformation.amazonaws.com",
                "DateEnabled": "2024-02-27T09:15:33.273000+00:00"
            }
        ]
    }
    

2. 監査アカウントに AWS Config および AWS CloudFormation の「委任管理者」権限を付与

監査アカウントにて AWS Config および AWS CloudFormation を実行できるよう委任管理者として有効にします。

  • 引き続きAWS Organizations の管理アカウントで AWS CloudShell を使って以下のCLI コマンドを実行する。account-id を監査アカウントの ID に置き換える。

    aws organizations register-delegated-administrator --account-id 222222222222 --service-principal config-multiaccountsetup.amazonaws.com
    
    aws organizations register-delegated-administrator --account-id 222222222222 --service-principal config.amazonaws.com
    
  • 以下のコマンドで、信頼関係が正しく確立されているかを確認する。

    aws organizations list-aws-service-access-for-organization
    

    サービスプリンシパルとの間に信頼関係を確立されていればOK。

    {
        "DelegatedAdministrators": [
            {
                "Id": "339713002222",
                "Arn": "arn:aws:organizations::164316540557:account/o-uzalc8qr8q/339713002222",
                "Email": "members-82503@account.classmethod.jp",
                "Name": "AWS Team Kana Matsunami TEST001",
                "Status": "ACTIVE",
                "JoinedMethod": "CREATED",
                "JoinedTimestamp": "2024-02-27T09:02:19.428000+00:00",
                "DelegationEnabledDate": "2025-03-04T07:13:06.787000+00:00"
            }
        ]
    }
    

3. Cost Optimization Conformance Pack をデプロイ

監査アカウントにて CloudFormationからCost Optimization Conformance Pack をデプロイする。使用するCloudFormationテンプレートは以下より最新版のYAMLファイルをダウンロードする。

https://github.com/aws-samples/aws-config-cost-optimization-conformance-pack/releases/

  • 監査アカウントのCoudShell の「アクション」メニューから「ファイルのアップロード」を選択し、ダウンロードした YAML ファイルを選択して CloudShell セッションに YAML ファイルをアップロードする。

  • 以下のコマンドを実行する。

    aws cloudformation deploy --template-file template.yaml --stack-name CostOptimizationConfPack --parameter-overrides DeployingInDelegatedAdminAccount=True --capabilities CAPABILITY_IAM
    
  • CloudFormation StackSets が正常にデプロイされたことをコンソールから確認する。同時に「StackSet-CostOptimizationConfPack-StackSet-xxxxxxx」と「awsconfigconforms-OrgConformsPack-Cost-Optimization-xxxxx-conformance-pack-xxxxx」がデプロイされます。

    Cursor_と_スタック___CloudFormation___ap-northeast-1

  • AWS Configコンソールの「適合パック」にはダッシュボードが作成されています。

    適合パック___AWS_Config___ap-northeast-1

  • ルールが初めて評価されるまでは検出評価が「利用不可」と表示されます。

    ルールの詳細___AWS_Config___ap-northeast-1 1

4. ソリューションの検証

非準拠リソースの検知

テスト用に非準拠となる Amazon EBS ボリュームを作成し、検出するか確認します。
監査アカウント及びOU1下のテストアカウントで「gp2」のEBS ボリュームを作成します。

ボリューム___EC2___ap-northeast-1

各アカウントにて、Configコンソールから「適合パック 」→「CostOpt-Ebs」が含まれるルールを選択し、「アクション」→「再評価」を選択し、ルールをトリガーしてアカウント内のリソースを評価する。

ルールの詳細___AWS_Config___ap-northeast-1 2

評価が完了すると、非準拠の EBS ボリュームが表示されます。

ルールの詳細___AWS_Config___ap-northeast-1 3

なお監査アカウントの「アグリゲータ」→「適合パック」からはアカウント全体の非準拠状況を確認できます。

集約ビュー_-_適合パック___AWS_Config___ap-northeast-1

修復テスト

「CostOpt-Ebs-Gp3-conformance-pack」ルールのように修復アクションが設定されている場合、監査アカウントの Systems Manager automation ランブックを呼び出し、ボリュームタイプを gp3 に変換することができます。

  • 「対象範囲内のリソース (Resources in scope)」から「非準拠 (Noncompliant)」と表示されている EC2 ボリュームのラジオボタンを選択する。

  • 「修復 (Remediate)」ボタンを押下する。

    ルールの詳細___AWS_Config___ap-northeast-1 4

  • 修復ルールがトリガーされると、「ステータス」列に「アクションが正常に実行されました」と表示される。

    ルールの詳細___AWS_Config___ap-northeast-1 5

  • EC2 サービスの Elastic Block Store に表示されているボリュームを確認することで、ボリュームタイプの変更が正常に完了したことを確認できます。

    ボリューム___EC2___ap-northeast-1 1

  • 再度「アクション」→「再評価」を選択し、ルールをトリガーしてアカウント内のリソースを評価すると、gp3 に変換されたボリュームが 準拠 (Compliant) となっていることが確認できます。

    ルールの詳細___AWS_Config___ap-northeast-1 6

なお修復は監査アカウントから一括ではできず、各アカウントのConfigルールからのみの実行可能となります。

さいごに

今回は、AWS Config を使用したコスト最適化ガバナンスの自動化を試した様子を紹介しました。

AWS Configと適合パックを活用することで、複数アカウント・複数リージョンに跨ったコスト最適化の自動検知と修復が可能になることがわかりました。ちなみに検知だけであれば、Cost Optimization HubをAWS Organizations 環境で使うと組織の全アカウントの推奨事項や対応状況を一元管理することが出来ます。
ただし、自動修復ができるのが、このソリューションの良いところだなと思いました。

ぜひみなさんも自社環境に導入して、効率的なクラウドコスト管理を実現してみてください。

最後までお読みいただきありがとうございました!

以上、おつまみ(@AWS11077)でした!

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.