CDK で AWS のセキュリティベストプラクティスに沿ったベースラインを展開できる Baseline Environment on AWS(BLEA)を触ってみた

CDK を利用して AWS のセキュリティベストプラクティスに則ったベースラインが展開できる公式サンプル「Baseline Environment on AWS(BLEA)」が公開されたので触ってみました
2021.11.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、大前です。

先日 AWS Samples に新たに公開された、Baseline Environment on AWS(以下 BLEA) というものを触ってみました。

Baseline Environment on AWS(BLEA)とは

BLEA は、AWS のセキュリティベストプラクティスを実装した環境を迅速い展開することが可能になるテンプレートです。AWS Control Tower を利用したマルチアカウント環境にも対応している事が一つの特徴で、設計が複雑になるマルチアカウント環境に対して一貫したセキュリティ設定(ベースライン)を導入するためのテンプレートを提供してくれるのは嬉しいところではないでしょうか。

テンプレートの内訳としては大きく分けて ガバナンスベースゲストシステム の 2 種類が存在しており、ガバナンスベースでは CloudTrail や Config といったセキュリティサービスの展開、ゲストシステムでは具体的な Web アプリケーションや API アプリケーションを展開するためのサンプルテンプレートが用意されています。

引用:AWS 環境にセキュアなベースラインを提供するテンプレート「Baseline Environment on AWS」のご紹介 | Amazon Web Services ブログ

また、テンプレートは CDK で用意されているため、BLEA をベースに独自のカスタマイズを行い、継続的な管理を行うことも可能です。

引用:AWS 環境にセキュアなベースラインを提供するテンプレート「Baseline Environment on AWS」のご紹介 | Amazon Web Services ブログ

現時点(2021/11)では、大きく分けて以下の 5 パターンのベースライン/テンプレートが提供されています。それぞれのテンプレートに事前の準備も含めた日本語の手順が用意されているため、非常に触りやすいサンプルだと思います。

  • Control Tower 環境用 Audit アカウントベースライン
  • Control Tower 環境用 メンバーアカウントベースライン
  • 単一アカウント用ベースライン
  • Web アプリケーションテンプレート
  • API アプリケーションテンプレート

今回は、Control Tower 環境用の Audit アカウントベースラインを展開してみたいと思います。

BLEA で Control Tower の Audit アカウントへのベースラインを展開する

以下のドキュメントを元に、BLEA を利用した Control Tower の Audit アカウントへのベースライン展開をやってみます。

現時点で、Control Tower の Audit アカウントへのベースラインとして以下のリソース設定が展開されます。Security Hub や GuardDuty 等の展開も今後展開できるようになると嬉しいところです。

  • 事前に Slack 連携済みの Chatbot へのチャンネル設定
    • Control Tower 側で展開されている SNS トピック(aws-controltower-AggregateSecurityNotifications)に関連付ける

前提条件

本ベースラインを展開するための前提条件は以下になります。

その他、細かい各種設定に関するドキュメントも用意されています。

BLEA リポジトリの取得

以下コマンドで BLEA のリポジトリを取得しておきます。

$ git clone https://github.com/aws-samples/baseline-environment-on-aws.git
$ cd baseline-environment-on-aws

依存関係のあるパッケージをインストールします。

$ npm ci

AWS SSO 向けの AWS CLI 認証情報の設定

Control Tower 環境にリソースを展開していく為、基本的には AWS SSO の認証情報を利用する必要がありますが、CDK はデフォルトで AWS SSO の認証情報を利用することができない為、BLEA のドキュメントでは aws2-wrap の導入が推奨されています。導入手順については以下を参考にしてください。

aws2-wrap は弊社ブログでも紹介されていますので、興味あればご参考ください。

aws2-wrap を導入し、Audit アカウントに対して AWS SSO の認証情報が利用できる様になれば OK です。もしうまくいかない場合は、Audit アカウントに IAM ユーザ/IAM ロール等を作成し、その認証情報を利用する等で回避ください。

今回は Audit アカウントの認証情報を利用するために、以下の様な ~/.aws/config 記載をしました。CDK を利用する際には private-oomae-ct-audit-exec のプロファイルを使う形になります。

[profile private-oomae-ct-audit]
sso_start_url = https://d-123456789.awsapps.com/start#/
sso_region = ap-northeast-1
sso_account_id = <Audit アカウント ID>
sso_role_name = AWSAdministratorAccess
region = ap-northeast-1

[profile private-oomae-ct-audit-exec]
credential_process = aws2-wrap --process --profile private-oomae-ct-audit
region = ap-northeast-1

AWS Chatbot 用の Slack セットアップ

BLEA による Control Tower の Audit アカウントへのベースラインには Chatbot の設定が含まれる為、以下ドキュメントを参考に Slack 連携の設定を実施しておきます。

Chatbot のチャンネル設定は BLEA のベースラインで展開される為、ワークスペースまででの設定で OK です。通知先となる Slack チャンネルの ID と、Chatbot のワークスペース ID は利用するのでメモしておきます。

cdk.json の編集

CDK によるデプロイ情報を設定する為に、cdk.json を編集します。

Control Tower の Audit アカウントへのベースラインであれば、~/<PATH>/baseline-environment-on-aws/usecases/base-ct-audit/cdk.json を修正します。

変更点としては、作成した Chatbot のワークスペース ID と Slack のチャンネル ID、Audit アカウントの ID の 3 つを cdk.json に記載します。

{
  "app": "npx ts-node bin/blea-base-ct-audit.ts",
  "context": {
    "dev-audit": {
      "description": "Context samples for ControlTower Audit Account - Specific account & region",
      "env": {
        "account": "012345678910",
        "region": "ap-northeast-1"
      },
      "slackNotifier": {
        "workspaceId": "TK00XXXXX",
        "channelIdAgg": "C0XXXXXXXX"
      }
    }
  }
}

cdk.json 内で指定しているその他パラメータ等については以下を参照ください。

Audit アカウントへのベースライン展開

事前準備が完了したので、BLEA を利用した Audit アカウントへのベースライン展開をしていきます。

AWS SSO の認証情報を取得

$ aws sso login --profile <設定したプロファイル>

BLEA をビルド

$ cd ~/<PATH>/baseline-environment-on-aws/usecases/base-ct-audit
$ npm run build

初回のみ、cdk bootstrap の実行

$ cd ~/<PATH>/baseline-environment-on-aws/usecases/base-ct-audit
$ npx cdk bootstrap -c environment=dev-audit --profile <CDK 用に設定したプロファイル>

Audit アカウントへの BLEA ベースラインの展開

$ cd ~/<PATH>/baseline-environment-on-aws/usecases/base-ct-audit
$ npx cdk deploy --all -c environment=dev-audit --profile <CDK 用に設定したプロファイル>

cdk deploy が無事成功し、Audit アカウントのコンソールを確認すると BLEA-BASE-ChatbotAggregate という名前の CloudFormation スタックで Chatbot チャンネル設定(+IAM ロール)を展開している事がわかります。

Chatbot のワークスペースを見にいくと BLEA-BASE-ChatbotAggregate-<ワークスペース ID> という名前でチャンネル設定が増えている事がわかります。また、SNS トピックとして Control Tower が作成する aws-controltower-AggregateSecurityNotifications が指定されている事もわかります。

aws-controltower-AggregateSecurityNotifications は Control Tower 管理下のアカウント上で Config Rule のステータスが変化した際の通知を集める SNS トピックですので、Control Tower のガードレールで SSH フルオープンを検知するガードレール AWSControlTower_AWS-GR_RESTRICTED_SSH を有効化した状態で SSH フルオープンなセキュリティグループを作成すると、Config ルールのコンプライアンスステータスが非準拠になり、連携先の Slack チャンネルに通知が飛ぶことまで確認できました。

おわりに

AWS のセキュリティベストプラクティスを実装したベースラインを CDK で展開できる BLEA を触ってみました。Control Tower の Audit アカウントに対しては現状 Chatbot 設定しか入れ込めないため今後のアップデートに期待したいところではありますが、AWS 公式としてこういったサンプルを用意してくれるのは嬉しいですね。

また、CDK を利用しているので、BLEA をベースに自分たちで独自のベースラインを設計、デプロイしていくといった事にも使えそうです。BLEA 自体のドキュメントは非常に丁寧に用意されている様に感じましたので、勉強の為に触ってみる、というのもアリだと思います。

今回は Control Tower の Audit アカウントへのベースライン展開のみ触ってみましたが、単一アカウント向けのベースラインや、サンプルアプリケーションの展開など色々用意されているので、もう少し触ってみたいと思います。

以上、AWS 事業本部の大前でした。

参考