In English | リポジトリの README に戻る
ここでは Control Tower 管理下のアカウントに BLEA を導入する手順について記述します。
デプロイするステップは以下の通りです。デプロイするだけの場合ビルド環境の構築は必ずしも必要ありませんが、コードの変更を容易に行うため、エディタも含めた開発環境を用意することをお勧めします。
- ランタイム等の前提条件は Standalone 版と同様です。README をご覧ください
- AWS SSO を使うための前提条件
- AWS SSO との連携のため AWS CLI version2が必要です。
CDK コードを安全に編集するため、本格的な開発を行わない場合であっても開発環境のセットアップを推奨します。以下に VisualStudioCode のセットアップ手順を示します。
Control Tower の配下にマルチアカウント版のガバナンスベースを導入して、ゲストシステムとしてサンプルアプリケーションを導入する手順を例にとって解説します。ここで MC
はマネジメントコンソールでの作業を、Local
は手元環境での作業を示します。
-
Control Tower およびセキュリティサービスのセットアップ (MC)
-
デプロイ対象のゲストアカウントを Control Tower で作成する (MC)
-
依存パッケージのインストールとコードのビルド (Local)
-
AWS SSO に合わせて AWS CLI の認証情報を設定する (Local)
-
ゲストアカウント用ガバナンスベースをデプロイする (Local)
-
ゲストアプリケーションサンプルをデプロイする (Local)
Control Tower を利用することで、ガバナンスベースの一部の機能は自動的に設定されます。Control Tower が対応していないセキュリティサービスは Organizations に対して一括有効化を行うことで、以後新しいアカウントが作られると自動的に設定されるようになります。
ここでは Control Tower をセットアップし、Organizations 全体に対して SecurityHub, GuardDuty, Inspector そして IAM Access Analyzer を有効化する手順を示します。これらの委任アカウントとして Audit アカウントを指定します。
Control Tower をセットアップします。 See: [https://docs.aws.amazon.com/controltower/latest/userguide/setting-up.html]
NOTE:
AWS Control Tower では Landing Zone ver.3.0(LZ3.0) より、Organization Trail の設定が可能になりました。これは Control Tower の推奨設定であり、これによって Organizations 配下の CloudTrail ログは、ManagementAccount の AWS CloudWatch Logs に集約されます。
ご参考:https://docs.aws.amazon.com/controltower/latest/userguide/2022-all.html#version-3.0
BLEA はデフォルトで LZ3.0 以降の環境を想定していますが、ゲストアカウントで CloudTrail のログ監視を行うために Cloud Trail が必要であるため、Organization Trail に重複して 各ゲストアカウントにも CloudTrail を作成します。
前提条件:
- (ver. 2.x 以前でなく)Landing zone ver. 3.0 以降から Control Tower を利用し、Organization CloudTrail を有効化している
- [https://docs.aws.amazon.com/securityhub/latest/userguide/designate-orgs-admin-account.html]
- [https://docs.aws.amazon.com/securityhub/latest/userguide/accounts-orgs-auto-enable.html]
委任された管理者権限の指定
メンバーアカウントでの有効化
Control Tower を使って新しいアカウント(ゲストアカウント)を作成します。
ゲストアカウントにおける、セキュリティイベントおよびモニタリングイベント通知のために Slack 連携用の設定を行います。セキュリティ通知のためのチャネル、システム監視通知のためのチャネルを Slack に作成し、以下の手順に従って Chatbot の設定を行います。設定が終わったら後の設定のため、ワークスペースの ID(1 つ)、通知先のチャネルの ID(2 つ)をメモしておきます。
git clone https://github.com/aws-samples/baseline-environment-on-aws.git
cd baseline-environment-on-aws
# install dependencies
npm ci
Git に Commit する際に Linter, Formatter, git-secrets によるチェックを行うための Hook を登録します。以下の手順に従ってセットアップしてください。デプロイするだけの場合は必須ではありませんが、よりセキュアに開発するためにセットアップを推奨します。
恒久的な認証情報も利用可能ですが、Control Tower 環境では AWS SSO の利用を推奨します。AWS SSO によって、マネジメントコンソールへのログインおよび SSO 認証による AWS CLI の実行が可能です。
NOTE:
CDK v2.18.0 以降、AWS SSO のプロファイルを使って CDK を直接デプロイできるようになり、プロファイル内の認証プロセスでラッピングを使う必要がなくなりました。
AWS CLI - AWS SSO 統合を使うためには、AWS CLIv2 を使う必要があります。
次のように CLI のバージョンを確認します:
aws --version
出力結果がバージョン 2 以上であることを確認します
aws-cli/2.3.0 Python/3.8.8 Darwin/20.6.0 exe/x86_64 prompt/off
ゲストアカウントにデプロイするための AWS CLI プロファイルを設定します。ここではゲストアカウントの ID を123456789012
としています。
~/.aws/config
# for Guest Account
[profile ct-guest]
sso_start_url = https://d-90xxxxxxxx.awsapps.com/start#/
sso_region = ap-northeast-1
sso_account_id = 123456789012
sso_role_name = AWSAdministratorAccess
region = ap-northeast-1
次のコマンドで AWS SSO にログインします。ここではct-guest
プロファイルでログインする例を示します。
aws sso login --profile ct-guest
このコマンドによって ブラウザが起動し、AWS SSO のログイン画面が表示されます。ゲストアカウントの管理者ユーザー名(メールアドレス)とパスワードを正しく入力すると画面がターミナルに戻り、 AWS CLI で ゲストアカウントでの作業が可能になります。
デプロイの際に必要となる デプロイ先アカウントや通知先メールアドレスなど、各ユースケース固有のパラメータを指定する必要があります。 BLEA では parameter.ts
というファイルでパラメータを管理します。書式は TypeScript です。
Control Tower 用ベースラインのパラメータはこちらで指定します。
usecases/blea-gov-base-ct/parameter.ts
このサンプルは devParameter
というパラメータセットを定義する例です。同様の設定を検証、本番アカウントにもデプロイできるようにするには、stagingParameter
やprodParameter
といったパラメータセットを定義し、App (こここでは bin/blea-gov-base-standalone.ts
)でそれぞれの環境のスタックを作成します。
usecases/blea-gov-base-ct/parameter.ts
// Example for Development
export const devParameter: AppParameter = {
envName: 'Development',
securityNotifyEmail: '[email protected]',
securitySlackWorkspaceId: 'T8XXXXXXX',
securitySlackChannelId: 'C00XXXXXXXX',
// env: { account: '123456789012', region: 'ap-northeast-1' },
};
// Example for Staging
export const stagingParameter: AppParameter = {
envName: 'Staging',
securityNotifyEmail: '[email protected]',
securitySlackWorkspaceId: 'T8XXXXXXX',
securitySlackChannelId: 'C00XXXXXYYY',
env: { account: '123456789012', region: 'ap-northeast-1' },
};
この設定内容は以下の通りです。
key | value |
---|---|
envName | 環境名。これが各々のリソースタグに設定されます |
securityNotifyEmail | セキュリティに関する通知が送られるメールアドレス。内容は Slack と同様です |
securitySlackWorkspaceId | AWS Chatbot に設定した Slack workspace の ID |
securitySlackChannelId | AWS Chatbot に設定した Slack channel の ID。ガバナンスベースによってセキュリティに関する通知が行われます |
env | デプロイ対象のアカウントとリージョン(指定しない場合は CLI の認証情報に従います) |
NOTE:
デプロイ対象のアカウントを明示的に指定したい場合は
env
を指定してください。これによって CLI Profile で指定するアカウント-リージョンと、env
で指定するものが一致していないとデプロイできなくなります。アカウントに設定したパラメータを確実に管理し、誤ったアカウントにデプロイすることを防ぐことができます。できるだけenv
も指定することをお勧めします。
NOTE: BLEA v2.x までは パラメータの設定に Context (cdk.json) を使っていましたが、v3.0 以降は parameter.ts を使用します。
AWS SSO を使ってゲストアカウントにログインします。
aws sso login --profile ct-guest
CDK 用バケットをブートストラップします(初回のみ)。
cd usecases/blea-gov-base-ct
npx aws-cdk bootstrap --profile ct-guest
NOTE:
- ここでは BLEA 環境にインストールしたローカルの cdk を利用するため、
npx aws-cdk
を使用しています。npx
を使わず直接cdk
からコマンドを始めた場合は、グローバルインストールされた cdk が利用されます。- cdk を実行するときに便利なオプションがあります。デプロイ時の承認をスキップしロールバックさせないを参照してください。
ゲストアカウントのガバナンスベースをデプロイします。
cd usecases/blea-gov-base-ct
npx aws-cdk deploy --all --profile ct-guest
これによって以下の機能がセットアップされます
- デフォルトセキュリティグループの閉塞 (逸脱した場合自動修復)
- AWS Health イベントの通知
- セキュリティに影響する変更操作の通知(一部)
- セキュリティイベントを通知する SNS トピック (SecurityAlarmTopic) の作成
- 上記 SNS トピックを経由した、メールの送信と Slack のセキュリティチャネルへの通知
Standalone 版でセットアップされていた以下の内容は Control Tower およびセキュリティサービスの Organizations 対応により設定されます。したがって、マルチアカウント版の BLEA も Standalone 版の BLEA も、設定されるセキュリティサービス群は同等になるように設計されています。
- CloudTrail による API のロギング
- AWS Config による構成変更の記録
- Inspector による脆弱性の検出
- GuardDuty による異常なふるまいの検知
- SecurityHub によるベストプラクティスからの逸脱検知 (AWS Foundational Security Best Practice, CIS benchmark)
ガバナンスベースでセットアップする他に AWS はいくつかの運用上のベースラインサービスを提供しています。必要に応じてこれらのサービスのセットアップを行なってください。
Amazon Inspector は、ワークロードをスキャンして、脆弱性を管理します。EC2 と ECR を継続的にスキャンすることで、ソフトウェアの脆弱性や意図しないネットワークの露出を検出します。検出された脆弱性は、算出されたリスクスコアに基づき優先順位づけされて表示されるため、可視性高く結果を取得できます。また、Security Hub とは自動で統合され、一元的に検出結果を確認できます。
セットアップ手順:[https://docs.aws.amazon.com/inspector/latest/user/getting_started_tutorial.html]
EC2 を利用する場合は Systems Manager を利用して管理することをお勧めします。AWS Systems Manager Quick Setup を使うことで、EC2 の管理に必要な基本的なセットアップを自動化できます。 セットアップ手順: [https://docs.aws.amazon.com/systems-manager/latest/userguide/quick-setup-host-management.html]
Quick Setup は以下の機能を提供します:
- Systems Manager で必要となる AWS Identity and Access Management (IAM) インスタンスプロファイルロールの設定
- SSM Agent の隔週自動アップデート
- 30 分ごとのインベントリメタデータの収集
- インスタンスのパッチ不足を検出するための日次スキャン
- 初回のみの、Amazon CloudWatch agent のインストールと設定
- CloudWatch agent の月次自動アップデート
TrustedAdvisor は AWS のベストプラクティスをフォローするためのアドバイスを提供します。レポート内容を定期的にメールで受け取ることが可能です。詳細は下記ドキュメントを参照してください。
ガバナンスベースが設定された後は Standalone 版も Control Tower 版も同じ手順で同じゲストアプリケーションサンプルをデプロイできます。
ゲストアカウントに SSO で認証している状態から、サーバーレス API アプリケーションサンプルをデプロイする手順を示します。
Standalone 版と同じ手順でパラメータを設定します。
(ログインしていない場合)AWS SSO を使ってゲストアカウントにログインします。
aws sso login --profile ct-guest
ゲストアプリケーションをデプロイします。
cd usecases/blea-guest-serverless-api-sample
npx aws-cdk deploy --all --profile ct-guest
以上でゲストアカウントに対するベースラインおよびサンプルアプリケーションのデプロイが完了します。
以後はこのサンプルコードを起点にして、自分のユースケースに合わせたアプリケーションを開発していくことになります。一般的な開発に必要な情報を示します。
ガバナンスベースをデプロイした後でも、Security Hub のベンチマークレポートで 重要度が CRITICAL あるいは HIGH のレベルでレポートされる検出項目があります。これらに対しては手動で対応が必要です。必要に応じて修復(Remediation)を実施してください。