Amazon Web Services ブログ
AWS Config を使用したコスト最適化ガバナンスの自動化
概要
Amazon Web Services (AWS) クラウドを使う大きな利点として、利用したサービスに対してのみ料金を支払うことができる、という点があります。このきめ細かな制御と弾力性のあるモデルにより、オンプレミスのインフラと比較して大幅なコスト削減を実現できます。投資から最大限の価値を引き出すための手法であり、Well-Architected Framework の基本的な柱の 1 つが、コスト最適化です。
長い間、コスト最適化は財務チームが毎月月末に実施する遡及的な取り組みと考えられていましたが、その考え方はもはや当てはまりません。これは全員が継続的に共同で取り組む必要がある “共有責任” です。価値を最大限に引き出すためには、戦略的観点と戦術的観点の両方からコスト最適化を実施する必要があります。戦略的 (strategic) な観点とは、ベストプラクティス、クラウドネイティブサービスの使用、およびデータ主導型アプローチを組み合わせたものです。戦術的 (tactical) な観点とは、即時のコスト削減につながる具体的かつプロアクティブなアクションに関するものです。これらのアプローチを組み合わせつつ、さらに重要となるのは、最適なベースライン基準を自動的に確立および維持することで、ビジネス価値および AWS クラウドにおけるワークロードのコストパフォーマンスの効率を最大化できることです。
AWS Config は AWS、オンプレミス、およびその他のクラウド上のリソースの設定や関係を継続的に査定・監査・評価するサービスです。この投稿では、AWS Config の適合パックという機能を利用して、コスト最適化のためのベストプラクティスのロジックに照らしてリソースを自動的に評価するソリューションを Organization 全体にデプロイすることで AWS Config サービスの価値を高める方法について紹介します。
適合パックとその利点とは?
適合パックは、AWS Config ルールと修復アクションの集まりであり、汎用のコンプライアンスフレームワークを提供します。これにより、戦略的なセキュリティや、運用もしくはコスト最適化のガバナンスチェックを単一のアカウントとリージョン、もしくは AWS Organization 全体にわたって大規模に体系化したりデプロイしたりすることができます。これらのルールはリソースを自動的に監視および評価し、各ルールで定義されたロジックに対するコンプライアンス体制を特定します。AWS Config には、事前定義済みのカスタマイズ可能なルールのリストである AWS Config マネージドルールのほか、AWS Lambda 関数や policy-as-code 言語である AWS CloudFormation Guard を使用して独自のカスタムロジックを定義できる AWS Config カスタムルールが用意されています。
リソースがルールで定義されたロジックに準拠していない場合、そのリソースは “非準拠 (Noncompliant)” としてマークされます。AWS のアプリケーションやリソースの運用ハブを提供するサービスである AWS Systems Manager Automation を使用して、戦術的な修復手順を手動もしくは自動で呼び出すことができます。このサービスは、非準拠のリソースを自動的に修復したり、チームにアクションを起こすよう警告するなどのイベント駆動型ワークフローをトリガーしたりする、事前定義済みのランブックを備えています。
ソリューションの概要
Cost Optimization Conformance Pack ソリューションは、コスト最適化ガバナンスを統合してサービス価値を高めることで、すでに AWS Config を利用しているお客様がサービスへの投資を最大化できるようにします。このカスタマイズ可能なソリューションには、ベストプラクティスのコスト最適化ロジックを含む 3 つのカスタムルール例が含まれています。これらのルールでは、リソースを監視および評価してコスト最適化のコンプライアンス体制を特定し、その結果を単一の「委任管理者」アカウントの AWS Config アグリゲータに複製することで、管理と報告を簡素化します。以下のルールが含まれています。
ルール 1: EBS gp2 ボリュームをチェックする (修復: gp2 ボリュームを gp3 ボリュームに変換する)
ルール 2: EC2 インスタンスにアタッチされていない EBS ボリュームをチェックする
ルール 3: ライフサイクル設定ポリシーのない S3 バケットをチェックする
リソースがルールで定義された基準のいずれも満たさない場合、リソース、Config ルール、および適合パックはすべて “非準拠 (Noncompliant)” としてマークされます。ルール 1 には、手動または自動で呼び出すことのできる修復アクションも含まれています。これにより SSM Automation ランブックがトリガーされ、EBS ボリュームは gp2 から gp3 に変換されます。gp3 ボリュームを使用すると、ストレージサイズを増やすことなく IOPS とスループットを個別にプロビジョニングでき、gp2 ボリュームと比較して GB あたりのコストも最大 20% 低くなります。
注: AWS Config は有料サービスです。まだ使用していない場合は、料金例を参照して、Organization 全体でサービスを有効にすることによるコストへの影響を理解してください。
このソリューションは、AWS Control Tower が有効になっているかどうかに関係なく、AWS Organization 全体にデプロイできます。AWS Control Towerは、規範的なベストプラクティスに従って、AWS マルチアカウント環境のセットアップとガバナンスを簡素化するオーケストレーションソリューションです。図 1 は、AWS Control Tower が提供する、メンバーアカウントを含む OU 構造例全体への Cost Optimization Conformance Pack のデプロイを示しています。
Security OU 内では監査アカウントを AWS Config と AWS CloudFormation の委任管理者として登録します。これにより、Cost Optimization Conformance Pack とCloudFormation スタックで定義されている関連リソースを Organization 内のアカウント全体にデプロイする権限が監査アカウントに付与されます。
CloudFormation スタックには Cost Optimization Conformance Pack のカスタムルールと共に、ルールによって参照される AWS Lambda 関数と AWS Systems Manager ドキュメントが含まれています。Lambda 関数と Systems Manager ドキュメントを実行できるように、CloudFormation StackSets を使って 2 つのカスタム AWS Identity and Access Management (IAM) ロールが作成されます。これらのリソースとロールは一元化する監査アカウントから Organization 内のすべてのアカウントにデプロイされ、ソリューションの管理を簡素化します。
AWS Config では、定期的に、または環境内の設定変更に応じて、リソースが適合パックルールへ準拠しているかどうかをチェックできます。監査アカウントの AWS Config アグリゲータは、AWS Config によって各メンバーアカウントでキャプチャされたデータを照合して一元化し、リージョンごとにさらなる分析をできるようにします。
前提条件
この投稿では、OU 構造、監査アカウント、AWS Config アグリゲータをデプロイする AWS Organizations と AWS Control Tower が既に有効になっていることを前提としています。もし AWS Control Tower を使用する予定がないならば、先に進む前に「AWS Organizations を使用した組織の作成」および「AWS Config のアグリゲータの作成」に関するガイドを参照してください。
さらに、以下のことも必要になります:
- Cost Optimization Conformance Pack ソリューションのデプロイのために、Organization の管理アカウントと管理権限を委任している監査アカウントの両方にアクセスする権限。
- AWS Organizations が有効化されている StackSets への信頼されたアクセス。これを確認する手順については「AWS Organizations を使用してスタックセットのための信頼されたアクセスをアクティブ化する」ドキュメントをご参照ください。
- ソリューションがデプロイされているメンバーアカウントの AWS Config への AWS コンソールアクセス。
ウォークスルー
この投稿では、以下の手順を実行する方法について説明します。
- AWS Organizations と、AWS Config および AWS CloudFormation StackSets のサービスプリンシパルとの間に信頼関係を確立します。
- 監査アカウントに AWS Config および AWS CloudFormation の「委任管理者」権限を付与します。
- Control Tower が有効になっていない場合は、AWS Config アグリゲータがデプロイされているアカウントを使用して「監査」アカウントを参照する手順を実行します。
- Cost Optimization Conformance Pack をデプロイします。
- CloudFormation を使用して、ソリューションに含まれる適合パック、Lambda 関数、IAM ロール、および Systems Manager ドキュメントをデプロイします。
- ソリューションをテストします。
このウォークスルーでは、管理アカウント ID は 111111111111、ソリューションのデプロイ元となる監査アカウントのアカウント ID は 222222222222 であるものとします。
ソリューションをデプロイする
AWS Organizations と AWS CloudFormation のサービスプリンシパルの間の信頼関係を確立する
AWS Organizations と AWS Config の間の信頼関係は、前提条件となる手順に従って既に部分的に確立されています。AWS Config ルールと AWS CloudFormation の信頼関係をさらに深めるには、Organization の管理アカウントで AWS CloudShell を使って以下の CLI コマンドを実行します。
信頼関係を作成して確認するには (コンソール)
※訳注:以下は管理アカウントでの操作です。
- AWS コンソールを開きます。
- Organization の管理アカウントに管理者 (administrator) としてログインします。
- コンソールの検索バーに「CloudShell」と入力し、「CloudShell」を選択します。
- 画面下部のブラウザ内に CloudShell ターミナルウィンドウが起動します。
- 以下のコマンドを実行します。
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 list-aws-service-access-for-organization
- 出力には、図 2 に示す値が含まれているはずです。
AWS Config の「委任管理者」アカウントを有効化する
この手順により、監査アカウントが AWS Config サービスおよび Config ルールの委任管理者として有効になります。委任管理者とは、追加の管理権限が付与された、特定の AWS Organization 内のアカウントです。この場合、その管理権限とは AWS Config サービスがアカウント間でルールをデプロイおよび管理するためのものになります。
AWS Config の委任管理者アカウントを設定するには (コンソール)
※訳注:以下は管理アカウントでの操作です。
- 手順を繰り返して CloudShell にログインします。
- account-id を監査アカウントの ID に置き換えて以下のコマンドを実行します。
aws organizations register-delegated-administrator --account-id 222222222222 --service-principal config-multiaccountsetup.amazonaws.com
- account-id を監査アカウントの ID に置き換えて以下のコマンドを実行します。
aws organizations register-delegated-administrator --account-id 222222222222 --service-principal config.amazonaws.com
- 監査アカウントが AWS Config の委任管理者として正常に確立されたことを確認するために、以下のコマンドを実行します:
aws organizations list-delegated-administrators --service-principal=config.amazonaws.com
および
aws organizations list-delegated-administrators --service-principal=config-multiaccountsetup.amazonaws.com
- 委任管理者アカウントのアカウント ID と共に、各コマンドに対して図 3 のような出力が表示されるはずです。
AWS CloudFormation の「委任管理者」アカウントを有効化する
委任管理者の権限を AWS CloudFormation の監査アカウントに付与するには、AWS CloudFormation StackSets および AWS Organizations を使用する必要があります。この機能により、各メンバーアカウントに 必要な IAM ロールが作成され、Cost Optimization Conformance Pack のリソースを含む CloudFormation StackSet を Organization 全体にデプロイできるようになります。
AWS CloudFormation の委任管理者アカウントを設定するには (コンソール)
※訳注:以下は管理アカウントでの操作です。
- 手順を繰り返して CloudShell にログインします。
- account-id を監査アカウントの ID に置き換えて以下のコマンドを実行します。
aws organizations register-delegated-administrator --service-principal=member.org.stacksets.cloudformation.amazonaws.com --account-id=222222222222
- 監査アカウントが AWS Config の委任管理者として正常に確立されたことを確認するために、以下のコマンドを実行します:
aws organizations list-delegated-administrators --service-principal=member.org.stacksets.cloudformation.amazonaws.com
- 委任管理者アカウントのアカウント ID と共に、図 3 のような出力が表示されるはずです。
Cost Optimization Conformance Pack をデプロイする
この手順では、AWS Samples の Cost Optimization Conformance Pack GitHub リポジトリからこの CloudFormation YAML テンプレートを使用して、適合パックを監査アカウントにダウンロードおよびデプロイします。CloudFormation StackSets は AWS リソースのデプロイや管理のプロセスを簡素化します。
(訳注:原文では https://github.com/aws-samples/aws-config-cost-optimization-conformance-pack/blob/main/template.yaml の YAML テンプレートがリンクされていますが、実際には https://github.com/aws-samples/aws-config-cost-optimization-conformance-pack/releases/ の最新リリースの YAML ファイルをダウンロードしてください。)
このソリューションでは、以下がデプロイされます。
- 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 ドキュメント – これは監査アカウントのみにデプロイされ、メンバーアカウントによって使用されます。
Cost Optimization Conformance Pack をダウンロードおよびデプロイするには (コンソール)
※訳注:以下は管理アカウントではなく監査アカウントでの操作です。
- 手順を繰り返して CloudShell にログインします。
- CloudShell の「アクション (Actions)」メニューから「ファイルのアップロード (Upload file)」を選択し、ダウンロードした YAML ファイルを選択して CloudShell セッションに YAML ファイルをアップロードします。
- 以下のコマンドを実行します。
aws cloudformation deploy --template-file template.yaml --stack-name CostOptimizationConfPack --parameter-overrides DeployingInDelegatedAdminAccount=True --capabilities CAPABILITY_IAM
- CloudFormation StackSets が正常にデプロイされたことを確認するために、コンソールの検索バーに「CloudFormation」と入力し、「CloudFormation」を選択します。
- 左側のメニューで「スタック (Stack)」を選択します。出力には図 4 のようにデプロイされたスタックが CREATE_COMPLETE ステータスで表示されるはずです。
- 適合パックが正常にデプロイされたことを確認するには、コンソールの検索バーに「AWS Config」と入力し、「AWS Config」を選択します。
- 左側のメニューで「適合パック (Conformance packs)」を選択します。ダッシュボードは図 5 のようになるはずです。
AWS Config 適合パックのダッシュボードには、正常にデプロイされ、コンプライアンススコアが報告されていることが表示されます。このスコアは、適合パックのルールに照らして評価されたリソースのコンプライアンスレベルをパーセンテージで示します。このダッシュボードでは、ルールが初めて評価されるまでは通常は「不十分なデータ (INSUFFICIENT DATA)」と表示されます。
ソリューションのテスト
Cost Optimization Conformance Pack のステータスを確認する
適合パックおよび関連するリソースがアカウント全体にデプロイされたので、AWS Config 適合パックダッシュボードを使用して適合パックルールのステータスを確認できます。図 6 に示すように、ルールに照らして評価されているリソースが既にあり、「準拠 (Compliant)」もしくは「非準拠 (Noncompliant)」と表示されているかもしれません。もしリソースが表示されていないようならば、以下の手順に従ってテスト用の非準拠の Amazon EBS ボリュームを作成します。
非準拠リソースを使用して適合パックをテストするには (コンソール)
※訳注:いずれかのアカウントでの操作です。
- AWS コンソールを開きます。
- 管理者 (administrator) として Organization のメンバーアカウントにログインします。
- この手順を使用して Amazon EBS ボリュームを作成します。ボリュームタイプとしては「gp2」を選択します。
- EBS ボリュームが作成されたら、AWS Config ダッシュボードに移動します。
- 「適合パック (Conformance packs)」を選択します。
- 名前に「Cost-Optimization」が含まれる適合パックを選択します。
- 図 6 のようなルールのリストが表示されます。
- 名前に「CostOpt-Ebs」が含まれるルールを選択し、ルールダッシュボードを表示します。
- 「アクション (Actions)」メニューを選択します。
- 「再評価 (Re-evaluate)」を選択すると、ルールをトリガーしてアカウント内のリソースを評価します。
評価が完了すると、非準拠の EBS ボリュームが図 7 のように表示されます。ボリューム ID をクリックすると、リソースに関する詳細情報が表示されます。
修復のテスト
ルールに修復アクションが設定されている場合、図 7 に示すように AWS コンソールからそれを呼び出すことができます。EBS gp2 ルールの場合、監査アカウントの Systems Manager automation ランブックが呼び出され、ボリュームタイプが gp3 に変換されます。
修復ルールを呼び出すには (コンソール)
※訳注:以下は上記で gp2 ボリュームを作成したメンバーアカウントでの操作です。
- 図 7 の AWS Config ルールダッシュボードから「対象範囲内のリソース (Resources in scope)」までスクロールします。
- 「非準拠 (Noncompliant)」と表示されている EC2 ボリュームのラジオボタンを選択します。
- 「修復 (Remediate)」ボタンを選択します。
修復ルールがトリガーされると、「ステータス (Status)」列に「アクションが正常に実行されました (Action executed successfully)」と表示されます。EC2 サービスの Elastic Block Store に表示されているボリュームを確認することで、ボリュームタイプの変更が正常に完了したことを確認することもできます。図 8 はボリュームタイプが gp3 になったことを示しています。
最後に、AWS Config はルールのステータスを更新し、gp3 に変換されたボリュームが 準拠 (Compliant) となっていることを表示します。
注: このステータスの更新はリアルタイムではありません。
クリーンアップ
AWS コンソールまたは以下の CLI コマンドを使用して CloudFormation スタックを削除することで、Cost Optimization Conformance Pack ソリューションでデプロイされたすべてのリソースを削除することができます。
Cost Optimization Conformance Pack ソリューションを削除するには (CLI)
※訳注:以下は監査アカウントでの操作です。
- 手順を繰り返して CloudShell にログインします。
- 以下のコマンドを実行します。
aws cloudformation delete-stack --stack-name CostOptimizationConfPack
account-id を監査アカウントの ID に置き換え、以下の CLI コマンドを実行することで、AWS Config および CloudFormation の委任管理者としての監査アカウントを Organization から登録解除することもできます。
※訳注:以下は管理アカウントでの操作です。
- 以下のコマンドを実行します。
aws organizations deregister-delegated-administrator --account-id 123412341234 --service-principal config-multiaccountsetup.amazonaws.com
および
aws organizations deregister-delegated-administrator --account-id 123412341234 --service-principal config.amazonaws.com
訳注:修復ルールのテストのために作成した EBS ボリュームの削除も忘れないでください。
まとめ
AWS Config の Cost Optimization Conformance Pack は、Organization 全体でコスト最適化標準を定義・自動化・管理するための強力かつシンプルな方法です。このソリューションには、コスト最適化ルールのベストプラクティスが組み込まれており、コンプライアンスに非準拠のリソースに対して修復手順を呼び出す機能により、一貫したコンプライアンス体制を確立および監視するのに役立ちます。
Cost Optimization Conformance Pack は AWS Samples GitHub リポジトリ から入手可能なオープンソースソリューションです。リポジトリにある README ガイドを使用して独自のコスト最適化ルールや修復方法を適合パックに組み込むことをお勧めします。ソリューションの機能をさらに拡張するには、AWS Config カスタム Lambda ルールと AWS Systems Manager ドキュメントの詳細をご覧ください。
AWS Config の微調整に関する詳細については、「AWS Control Tower 環境での AWS Config リソーストラッキングのカスタマイズ」の投稿を参照してください。
翻訳はテクニカルアカウントマネージャーの堀沢が担当しました。原文はこちらです。