現場の業務の中で、BLEAを途中から担当サービスとして引き継ぐことになりました。
本当に聞いたこともないレベルで、BLEA?CDK?とにかくよくわからないけどコマンドを実行したら大量の英語が出てきて震える・・・!という状況だったので、
私なりに調べてみたことを残しておきます。
まず、BLEAを使用するにはAWS CDKについて知る必要があります。
AWS CDKとは?
AWS Cloud Development Kit (AWS CDK)
コードでクラウドインフラストラクチャを定義し、 AWS CloudFormation を通じてプロビジョニングするためのオープンソースのソフトウェア開発フレームワーク。
これは、オープンソースでGithubに公開されています。
特徴
-
プログラミング言語を使用できる
JSON / YAMLで記述されるCloudFormationとは異なり、TypeScript, Python, Java, C# などのプログラミング言語から使用したい言語を選んで定義することが可能。→ymlの記述よりも少ない記述量で定義ができるため可視性も高い。
for文やif文が使用できるためCloudForamtionよりもより柔軟な定義ができる。学習コストが高いといったデメリットはあるものの、開発者と意思疎通がとりやすいメリットがある。
-
CI/CDとの連携
GitHub ActionsやCodePipelineと組み合わせ、自動テスト・自動デプロイが可能になる。 -
CLIとの連携
AWS CDKにはCLIコマンドが用意されているため、テンプレートの合成や実行中のスタックとの差異表示など様々な操作がCLIから可能。 -
CloudFormationへの変換
CDKが自動でCloudFormationに変換するので、AWS標準の仕組みで安定してデプロイが可能。ただし、CloudFormationに依存するため対応していない機能・リソース等は使用が出来ない場合がある。 -
コンストラクトの利用
└ モジュール(よく使う処理や設定をひとまとめにして再利用できるようにした部品)化されたひな形
再利用ができる(同じ構成を何度も呼び出せる),メンテナンス性が高い(修正はモジュール一か所で良い)等のメリットがあり開発を高速化できる。
S3用,EC2用といったリソース単位のコンストラクトはAWSが用意していて、これらを組み合わせて使用することで標準設定(デフォルト)が設定される。
私の現場ではCloudForamtionを使用した構築をメインにしていたのでCloudFormationにはある程度なじみがあったのですが、
プログラミング言語でかかれているテンプレートはいまだに全く読めません。
開発の方と意思疎通が図れるという点では、現場によってはかなりメリットになりそうですよね。
BLEAとは?
Baseline Environment on AWS(BLEA)
AWSのセキュリティのベストプラクティスを実装したテンプレート。
BLEAを適用することで、以下の事項が環境に適用されます。
- CloudTrail による API のロギング
- AWS Config による構成変更の記録
- GuardDuty による異常なふるまいの検知
- SecurityHub によるベストプラクティスからの逸脱検知 (AWS Foundational Security Best Practice, CIS benchmark)
- デフォルトセキュリティグループの閉塞 (逸脱した場合自動修復)
- AWS Health イベントの通知
- セキュリティに影響する変更操作の通知(一部)
- Slack によるセキュリティイベントの通知
Standalone 版 (単一アカウント利用)とマルチアカウント版 (AWS Control Tower 利用)が用意されているので、選択して使用できます。
私は大量のアカウントを扱うプロジェクトで使用していたので、マルチアカウント版を使っていました。
知見がなく比較対象がないので私はわからないですが、BLEAのREADMEはめちゃくちゃ親切らしいですね。
細かく手順の記載がありました。
baseline-environment-on-aws/README_ja.md at main · aws-samples/baseline-environment-on-aws
AWS入門ブログリレー2024〜Baseline Environment on AWS(BLEA)編〜 | DevelopersIO
使用してみる
AWS CDKはNode.jsで作られているため、CDK CLIを使うにはNode.jsが必要。
分かりにくいけど、以下のような感じ。
Node.js
└ サーバー側で動くJavaScript環境。※通常Javaはブラウザの中で動くものだが、Node.jsを使用するとパソコンやサーバー上でJavaを動かせる
npm(Node Package Manager)
└ Node.js上で動くツールやライブラリを管理する
手順
- GitHub から BLEA のリポジトリを取得
git clone https://github.com/aws-samples/baseline-environment-on-aws.git cd baseline-environment-on-aws
- npmをインストールする
$ npm ci —verbose
ci : clean install の略
—verbose :詳細なログを出力させるオプション
npm installコマンドが近いものとしてありますが、installはpackage.jsonとpackage-lock.jsonを見て依存関係を解決してインストールされ、
ciはpackage.json の依存関係の解決を行わずpackage-lock.json を見て依存パッケージをダウンロードし node_modules の洗い替えを行うといった違いがあるるそうです。
npm installではpackage-lock.jsonが更新される可能性があり、CI後はciコマンドの方が適しているとのことでした。 (以下の丸写しです。)
[npm installとnpm ciの使い分け - Qiita](https://qiita.com/zukka/items/279ec477dd848477e5e1)
- AWS CLI の認証情報を設定する
READMEでは、~/.aws/credentials にて認証情報を設定していました。
私の現場ではSSOログインを使用して複数アカウントに対して作業するのでconfigファイルで認証情報を設定していたことになるのだと思います。アバウトですみませんが割愛します。
- デプロイパラメータを設定する
usecases/blea-gov-base-ct(マルチアカウント版であれば)/parameter.ts
ここの情報を環境に合わせます。ここもREADMEに詳細があるので参考に。アカウントID,メールアドレス,リージョン,SlackIDなど
- ブートストラップを実行
cd usecases/blea-gov-base-ct
npx aws-cdk bootstrap
ブートストラップを実行することで、CDKを使用してAWSリソースをデプロイするときに必要な複数のリソースを一括で用意してくれます。
「CDK Toolkit」という名前でスタックが作られるので、そこで何が作成されたかの一覧は見れますがかなりの量があるので…
以下かなり細かく解説してくださってます。
テンプレートをカスタマイズすることも可能のよう。
- BLEAをデプロイ
npx aws-cdk deploy
これで環境にBLEAが適用されます
あとがき
手順や概要としてはこんな感じの流れです。(ほぼ引用ですごめんなさい)
詳しく書けていない部分が多々あり理解しきるのが大変な情報量だなと改めて。。。
BLEAとCDKの違いすら分かっていない状態で作業していたので、一先ず自分のやっていることの大枠は理解が出来ました。
マルチアカウント版を使っていると思われますが現在のプロジェクトでは意図的になのかかなり変えて使用している感じがしたので、次回以降の参考にしたいです。
また書きますね