Amazon Web Services ブログ
AWS環境にセキュアなベースラインを提供するテンプレート「Baseline Environment on AWS」のご紹介
みなさんこんにちは。ソリューションアーキテクトの大村です。
このブログでは、私たちAWS Japanのソリューションアーキテクトが AWS Samples に公開している
「Baseline Environment on AWS(BLEA)」について詳しくご紹介します。
これはAWSのセキュリティのベストプラクティスを実装した環境を、迅速に実現するためのテンプレートです。
セキュリティサービスだけでなく、よく利用されるアプリケーションの実装サンプルも含んでいます。これによって基本的なセキュリティを実現した状態をスタート地点としてシステム構築を開始できます。このテンプレートは単一のアカウントでも、また AWS Control Tower によるマルチアカウント環境でも同じように利用可能です。
テンプレートは AWS Cloud Development Kit (CDK) で実装されており、お客様の利用用途に合わせた拡張を少ないコード量で容易に行えるようデザインされています。広く CDKを 利用していただくため、平易なコードで、解説コメントを多くする方針で開発しており、CDK の学習用途としても使えるようにしています。
なぜベースライン(基本的な設計)のテンプレートが必要なのか?
AWSのサービスは Security by Design の考えに基づいて実装されていますが、お客様は、システム構築にあたってこれらのサービスを組み合わせ、要件に合わせてコンフィグレーションする必要があります。AWS では AWS Well-Architected や AWS Security Reference Architecture (AWS SRA)といったセキュリティのベストプラクティスをドキュメントとして提供しており、この中では AWS CloudTrail 有効化による API 呼び出しの記録など、どのようなシステムでも最低限実施いただきたい基本的な設定をガイドしています。この基本的な設定をベースラインと呼びます。ベースラインはどのシステムでも共通に実施すべき内容であり、これをテンプレートによって自動構築することで、作業漏れおよびミスの混入防止、作業工数の削減ができ、基本的なセキュリティを確保することができます。
システム構築にあたって適切なセキュリティを確保するには、AWS環境の基礎部分だけでなく、アプリケーションサーバやデータベースなどを含めたそれぞれのコンポーネント対して設定が必要です。BLEA では Amazon ECS を使った Web アプリケーションなど、よく使われるシステムのサンプルテンプレートも提供しており、第3者のセキュリティ基準やAWSのベストプラクティスに準拠するようデザインしています。具体的には AWS のセキュリティ状態を包括的に把握できるサービス AWS Security Hub において、CIS AWS Foundational ベンチマークやAWSの基本的なセキュリティのベストプラクティスの「すぐに対処が必要 (CRITICAL) 」「優先して対処が必要 (HIGH) 」という事項が検出されなくなるよう実装しています。このサンプル実装を起点にお客様のシステムに合わせて拡張していただくことで、一定のセキュリティ基準に適合させつつ、システムを迅速に構築する近道を提供できます。
なぜ CDK テンプレートなのか?
AWS のベストプラクティスの一つにマルチアカウントの考え方があります。個別のシステムごとに AWS アカウントを割り当てることで、システムの担当者は他のシステムに影響を与えることなくそのアカウントの中で自由にAWS 環境を操作できるようにする方法です。この場合、ガバナンス担当者は利用可能な機能を事前に限定する「予防的統制(予防的ガードレール)」を行うより、指定した基準からの逸脱を検知する「発見的統制(発見的ガードレール)」を中心に管理することを推奨しています。これによってガバナンス担当者による事前承認が作業のボトルネックになることを防ぎます。BLEA による管理方法は下図に示したようになります。まずガバナンス担当者が ガバナンスベースのテンプレートを提供します。各システム担当者はこのテンプレートを使ってそれぞれのアカウントでガバナンスベースを構築しつつ、それぞれのゲストシステムの構築を行います。ガバナンス担当者は Security Hub 等で各アカウントの基準への準拠状況を確認します。このようにして一定の基準を満たすセキュリティ設定を組織全体で実現することを想定しています。
一方でテンプレートの中身がブラックボックスである場合、開発者がテンプレートをメンテナンスしにくくなってしまい、システムの変更に多くの時間を要したり、長期的に安全な運用を行うことができなくなったりします。CDKは一般のプログラミング言語で記述できるため可読性が高く、AWSのベストプラクティスを組み込んだライブラリによってコードの記述量を少なくすることができます。さらにBLEAではコードの実装をシンプルに保ち、多様な実装パターンや実装意図のコメントを多く盛り込んでいます。これによって開発者がコードの実装を理解して自分で拡張しやすくなるよう配慮しています。BLEAはテンプレートで初期構築を行うだけでなく、継続してテンプレートをメンテナンスし、構成をコードで管理改善していくことを想定しており、お客様の Infrastructure as Code の実現をサポートします。なお、実装にあたってはメンテナンスコストと実効性を考慮して過度な自動化は行わない方針としています。例えば Security Hub の管理者アカウント委任のような1回限りの簡易な手作業はあえて残し、ドキュメントで手順をガイドするにとどめています。
BLEA によるガバナンスの全体像
BLEA は単一のアカウントをセットアップする Standalone 版と、AWS Control Tower をベースとしたマルチアカウント環境をセットアップするマルチアカウント版があります。いずれの場合も BLEA が提供するのは大きく分けて「ゲストシステム (Guest System)」と「ガバナンスベース (Governance Base) 」に分けられます。
「ガバナンスベース」は個別のシステムの実装に依存しない、AWS 環境自体に対して共通的に設定する部分を指します。CloudTrail や AWS Config といった基礎的なロギングに加えて、AWS Security Hub 、Amazon GuardDuty といった基本的なセキュリティ設定を行います。これに加えて IAM Policy の変更などセキュリティに影響する設定変更が行われた場合、Personal Health Dashboard に通知があった場合、セキュリティサービスでインシデントを検知した場合には AWS Chatbot 経由で Slack に通知されるようになっています。
「ゲストシステム」は具体的なシステムにあたります。現状では Web アプリケーションと API アプリケーションのサンプルを提供しています。Web アプリケーションサンプルでは Amazon CloudFront、Application Load Balancer、Amazon ECS、Amazon Aurora PostgreSQL を使い、Amazon VPC の構成や Amazon S3 の暗号化など推奨するセキュリティ設計を行っています。監視周りでは代表的なリソースのアラートの Slack 通知、Amazon CloudWatch Synthetics による監視、CloudWatch Dashboard といった基本的な設計を実装しています。API アプリケーションサンプルでは Amazon API Gateway、AWS Lambda、Amazon DynamoDB を使用したサーバーレスな API アプリケーションのサンプルを提供しています。実際にご利用される場合はこのテンプレートを基に用途に合わせた構成をデザインしていくことになります。
ゲストシステムはガバナンスベースと依存関係がありません。ガバナンスベースはマルチアカウント版と Standalone 版で同様の環境を提供しており、ゲストシステムはいずれの環境でも同じものがデプロイできるように構成しています。
マルチアカウント版において、AWS Control Tower、ガバナンスベース、ゲストシステムそれぞれが実現するガバナンス項目とその実装を詳しく示したのがこちらの表です。オレンジのセルが管理主体を示し水色のセルが管理される側を示します(現状、シェアードサービスアカウントはテンプレートに含まれていません)。中央の管理者アカウントが全てを設定するのではなく、共通のテンプレートを提供して、設定自体は各ゲストアカウントの管理者が行う方式を想定しています。
上記のガバナンス概要をサービスの利用状況で表現したものがこちらです。AWS Control Tower をベースにセキュリティサービスなどを追加する構成になっています。
ゲストシステムサンプルの一つである、ECS による Web アプリケーションサンプルの独自ドメインでの SSL(TLS) 対応版は次のような構成になっています。
利用方法
BLEA は GitHub にオープンソースとして公開しています (https://github.com/aws-samples/baseline-environment-on-aws)。簡易に使い始めるには単一アカウントにガバナンスベースを適用する Standalone 版をお試しください。READMEに詳しい利用手順を記載しています。マルチアカウント環境への展開手順では AWS SSO を使った認証方式も解説しています。単一アカウント上で構成したアカウントを後にマルチアカウント版の管理下へ移行することも可能です。
CDK を使い始めるための学習用リソースとしてもご利用いただけます。ご要望の多い、CDKを利用するための手元のPCのセットアップ手順のほか、初回デプロイ後、改修する際のビルドの手順など開発に便利な情報をHowToドキュメントに記載しています。CDK はエディタのサポートがあることでより開発効率が高く、安全に開発できるようになります。デプロイするだけの場合でも開発環境を整備されることをお勧めします。お好きなエディタがご利用いただけますが、BLEA 開発チームが使用している Visual Studio Code の利用を推奨しています。
今後
BLEAはお客様からのフィードバックを基にユースケースの拡充やセキュリティサービスへの対応強化を行っていきます。今後 BLEA によるガバナンスの考え方や CDK による開発の解説資料、ハンズオン資料の提供も予定しています。
このテンプレートへのフィードバックをお待ちしています。GitHub に Issuesを投稿する、あるいは AWS の担当 SA へご連絡ください!
ソリューションアーキテクト 大村 幸敬 (@yktko)