Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
静的サイトのCI/CDでも侮るなかれ!Docs as Codeに沿ったセキュアな開発プロセスの...
Search
みずほリサーチ&テクノロジーズ株式会社 先端技術研究部
September 21, 2024
Technology
12
2.8k
静的サイトのCI/CDでも侮るなかれ!Docs as Codeに沿ったセキュアな開発プロセスの実践/secure-docsascode-cicd-for-static-sites
「ServerlessDays Tokyo 2024」での登壇資料です。
イベントURL:
https://serverless.connpass.com/event/325659/
みずほリサーチ&テクノロジーズ株式会社 先端技術研究部
September 21, 2024
Tweet
Share
More Decks by みずほリサーチ&テクノロジーズ株式会社 先端技術研究部
See All by みずほリサーチ&テクノロジーズ株式会社 先端技術研究部
AWS CDKでデータリストアの運用、どのように設計する?~Aurora・EFSの実践事例を紹介~/aws-cdk-data-restore-aurora-efs
mhrtech
6
1.1k
Azure Verified Moduleを触って分かった注目ポイント/azure-verified-module-begin
mhrtech
1
850
BLEA v3.0.0の新しいベストプラクティスを取り入れた効率的なAWS CDK開発/jawsug_cdk16
mhrtech
3
600
あなたのアプリケーションをレガシーコードにしないための実践Pytest入門/pyconjp2024_pytest
mhrtech
6
2.5k
Kubernetes でワークフローを組むなら cdk8s-argoworkflow がよさそう!/ cdk8s-argoworkflow is great!
mhrtech
3
1.2k
IaCでセキュリティを強化しよう!~IAMが苦手な開発者でも簡単に権限を絞れる。そう、AWS CDKならね!~/secjaws32
mhrtech
5
2.7k
AWS Control Towerを2年弱運用して得たエッセンスと展望/securityjaws31
mhrtech
1
1.8k
そのリファレンス誰のため?ユーザ活用に向き合う/finjaws31
mhrtech
0
630
AWS CDKにテストは必要?試行錯誤したスクラム開発事例を紹介!/CdkConJp2023
mhrtech
5
6.1k
Other Decks in Technology
See All in Technology
Lexical Analysis
shigashiyama
1
150
The Role of Developer Relations in AI Product Success.
giftojabu1
0
120
透過型SMTPプロキシによる送信メールの可観測性向上: Update Edition / Improved observability of outgoing emails with transparent smtp proxy: Update edition
linyows
2
210
TypeScript、上達の瞬間
sadnessojisan
46
13k
ドメインの本質を掴む / Get the essence of the domain
sinsoku
2
150
信頼性に挑む中で拡張できる・得られる1人のスキルセットとは?
ken5scal
2
530
dev 補講: プロダクトセキュリティ / Product security overview
wa6sn
1
2.3k
Why does continuous profiling matter to developers? #appdevelopercon
salaboy
0
190
SREによる隣接領域への越境とその先の信頼性
shonansurvivors
2
520
SSMRunbook作成の勘所_20241120
koichiotomo
2
130
100 名超が参加した日経グループ横断の競技型 AWS 学習イベント「Nikkei Group AWS GameDay」の紹介/mediajaws202411
nikkei_engineer_recruiting
1
170
TanStack Routerに移行するのかい しないのかい、どっちなんだい! / Are you going to migrate to TanStack Router or not? Which one is it?
kaminashi
0
580
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
52
4.9k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.3k
How STYLIGHT went responsive
nonsquared
95
5.2k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
506
140k
Unsuck your backbone
ammeep
668
57k
Visualization
eitanlees
145
15k
Documentation Writing (for coders)
carmenintech
65
4.4k
10 Git Anti Patterns You Should be Aware of
lemiorhan
654
59k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.8k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Transcript
© 2024 Mizuho Research & Technologies, Ltd. 静的サイトのCI/CDでも侮るなかれ! Docs as
Codeに沿った セキュアな開発プロセスの実践 2024年9月21日 技術開発本部 先端技術研究部 0 ServerlessDays Tokyo 2024 (免責事項) 当レポートは情報提供のみを目的として作成されたものであり、商品の勧誘を目的 としたものではありません。本資料は、当社が信頼できると判断した各種データに 基づき作成されておりますが、その正確性、確実性を保証するものではありません。 また、本資料に記載された内容は予告なしに変更されることもあります。
© 2024 Mizuho Research & Technologies, Ltd. 1 自己紹介 氏名:松尾
優成(Matsuo Yusei) 所属:先端技術研究部 兼 プロジェクト推進部 役割:社内向けAWSプラットフォームの構築・運用 社内コミュニティ「コクリエ」運営 一言:CDK が大好きです!
© 2024 Mizuho Research & Technologies, Ltd. 2 社内AWS共通プラットフォームの概要 •
社内へセキュアなAWSアカウントを迅速に提供するプラットフォーム • マルチアカウント管理に AWS Control Tower と AWS CDKを活用
© 2024 Mizuho Research & Technologies, Ltd. 3 本プラットフォームの詳細な構成は以下で公開中! https://aws.amazon.com/jp/builders-
flash/202405/mizuho-service-catalog/ https://aws.amazon.com/jp/builders-flash/202406/mizuho-account-automation/ ご参考
© 2024 Mizuho Research & Technologies, Ltd. プラットフォームの仕様や利用方法を伝える方法は? • やはり、ドキュメントで利用者向けにガイドすることが重要
• 社員が気軽に参照できるよう、AWS 上で一般的な構成の静的サイトを構築 プラットフォーム初期から運営を支える重要な要素として活用! 4 Route53 WAF CloudFront S3 ACM 社員 自社拠点 https アクセス 静的ファイルを ホスト (自社拠点の IPに制限)
© 2024 Mizuho Research & Technologies, Ltd. 5 話すこと ⚫
Docs as Code の基本概念・利用ツール ⚫ ドキュメントの開発プロセス ⚫ 自動チェック・テストのプラクティス ⚫ 具体的な CI/CD パイプラインの構成・処理 AWS CDK (TypeScript)を 使用しています
© 2024 Mizuho Research & Technologies, Ltd. 6 Documentation as
Code (Docs as Code)とは? 『コーディングと同様のツールでドキュメントを作成する手法』 【特徴】 • Markdown など軽量マークアップ言語のテキストでドキュメントを記述 • Git などのバージョン管理システムでドキュメントを管理 • ドキュメントの変更はコードと同様にレビューと自動テストのプロセスを実行 Docs as Code は生産性・品質の向上につながる!
© 2024 Mizuho Research & Technologies, Ltd. 7 Static Site
Generator (SSG) による HTML ファイルの生成 • Markdown を静的な HTML ファイルに変換するため、SSG が必要 • 簡単にセットアップできるシンプルな SSGとして「MkDocs」を利用 https://www.mkdocs.org/getting-started/ ・検索機能を標準装備 ・拡張機能も豊富!
© 2024 Mizuho Research & Technologies, Ltd. AWS リソース定義 と
Markdown を同一リポジトリで管理 • IaC ツール「AWS CDK」で CI/CD 含む 静的サイトの AWS リソースを定義 8 Markdown + MkDocs 定義 AWS リソース 定義 Git フックで CDK ソースと 同様に Markdown も 自動チェック CDK CodePipeline CloudFront S3 ACM Route53 … CodeBuild CodeConnection …
© 2024 Mizuho Research & Technologies, Ltd. 9 ドキュメント開発プロセスの流れ ローカル
✓Markdownと 図の作成 ✓MkDocs起動/ プレビュー ✓Pre-commitで 静的解析 中央リポジトリ ✓シークレット/ コードスキャン ✓プルリク作成/ テスト実行 ✓レビュー/ マージ CI/CDパイプライン ✓各種ビルド/ テスト実行 ✓静的サイトの デプロイ ✓デプロイ後 テスト CodePipeline
© 2024 Mizuho Research & Technologies, Ltd. 10 ここから開発フローの 各プロセス詳細を紹介!
まずはローカルの プロセスを解説
© 2024 Mizuho Research & Technologies, Ltd. 11 まずは Markdown
でドキュメントを作成 $ mkdocs serve コマンドで サイトのローカルプレビューも可能 Markdown のサンプル HTML のサンプル ビルド 開発プロセス①「ローカル」
© 2024 Mizuho Research & Technologies, Ltd. ツール 特徴 主な用途
図例 Draw.io GUIで作図 作図の融通が利き 綺麗にしやすい ・構成図 ・利用者向けの その他図 ・etc... PlantUML テキストで作図 表現に個人差が 少なく軽量で差分 など管理しやすい ・シーケンス図 ・ユースケース図 ・etc... 12 図の描画では、以下2種のツールを利用 テキストを基に レンダリング 開発プロセス①「ローカル」
© 2024 Mizuho Research & Technologies, Ltd. 13 textlint でテキストファイルの文章校正(Markdown,
PlantUML) • textlint とは、各種ルールに基づいて文章校正を行う静的解析ツール • 認知負荷を低減させるため、記載揺れ設定に独自ルールを追加 PlantUMLを追加 図の表現で不都合なルールは ファイル先頭で無効化 置換ルール PlantUML (.puml) 開発プロセス①「ローカル」
© 2024 Mizuho Research & Technologies, Ltd. 14 husky による
Git コミット時の自動チェック • husky とは、コミットなどの Git フックで任意コマンドを実行できるツール • textlint とその他の静的解析を自動実行することでコミット対象の品質を向上! CDK ソースだけでなく ドキュメントも静的解析 開発者体験の観点からコミット時間に注意(不用意にコマンドを追加しない) 開発プロセス①「ローカル」 コミット前に 変更資産のみ チェック
© 2024 Mizuho Research & Technologies, Ltd. 15 中央リポジトリへプッシュ後のプロセスを紹介! ローカル
中央リポジトリ CI/CDパイプライン 次に…
© 2024 Mizuho Research & Technologies, Ltd. 16 GitHub の機能でセキュリティチェック
• GitHub Advanced Security(GHAS)で 「シークレットスキャン」と「コードスキャン」を有効化 • MkDocs カスタマイズ用の JavaScript ファイルもスキャンされるので安心 機能 スキャン対象 主な検出内容 シークレット スキャン 全ファイルをチェック (Push 時) ・API キー ・アクセスキー ・パスワード ・etc... コード スキャン TypeScript・JavaScriptの コードをチェック (Push・プルリク作成時) ・command-injection ・insecure-dependency ・xss(クロスサイトスクリプティング) ・etc... 開発プロセス②「中央リポジトリ」 簡単!
© 2024 Mizuho Research & Technologies, Ltd. 17 Markdown のシークレットスキャン例
開発プロセス②「中央リポジトリ」 入力例なので問題なし
© 2024 Mizuho Research & Technologies, Ltd. 18 プルリクエスト作成時に GitHub
Actions で自動テスト実行 リポジトリ全体を静的解析! ※ローカルは変更対象のみ静的解析 開発プロセス②「中央リポジトリ」 レビュワーはプルリクで 全体チェック通過を 確認できて安心!
© 2024 Mizuho Research & Technologies, Ltd. 19 プルリクエスト上でドキュメントのレビュー 開発プロセス②「中央リポジトリ」
Markdown の変更差分を 1つずつ確認しながら レビュー!
© 2024 Mizuho Research & Technologies, Ltd. 20 レビューで承認されるまではマージ禁止 開発プロセス②「中央リポジトリ」
承認後にマージされると CI/CD パイプラインが起動
© 2024 Mizuho Research & Technologies, Ltd. 21 CI/CD パイプラインのプロセスを紹介!
ローカル 中央リポジトリ CI/CDパイプライン 最後に…
© 2024 Mizuho Research & Technologies, Ltd. 22 CI/CD に
CDK Pipelines を活用 開発プロセス③「CI/CD パイプライン」 パイプライン自体も 自動的に再構成 複数のパイプラインリソースを 抽象化しており導入が簡単! https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_AWS-CDK-Basic-3-AppDev_0831_v1.pdf
© 2024 Mizuho Research & Technologies, Ltd. 23 開発プロセス③「CI/CD パイプライン」
WAF [Build] [Update Pipeline] [Assets] CloudFormation デプロイ [Test] IP 制限の確認 Stack CloudFront S3 ACM Route53 … 静的サイト CDK Pipelines 起 動 プルリクエスト 静的サイトにおける CDK Pipelines 構成例 開発者 レビュワー マージ
© 2024 Mizuho Research & Technologies, Ltd. ビルドステージから各工程を解説! 24 開発プロセス③「CI/CD
パイプライン」 [Build] CDK Pipelines ビルドステージは 最も処理が多く重要な工程!
© 2024 Mizuho Research & Technologies, Ltd. 25 ビルドステージの流れ 開発プロセス③「CI/CD
パイプライン」 インストール • MkDocs/ 拡張機能 • GitHub トークン設定 • 依存関係 Install (npm ci) 静的サイト ファイル生成 AWSリソース 単体テスト AWS IaC Template 生成 GitHub Packages アクセスの事前設定
© 2024 Mizuho Research & Technologies, Ltd. インストール 静的サイト ファイル生成
• 社外配布用の静的 サイト zip 生成 • サイトファイル 生成(MkDocs) • TypeScript コンパイル AWSリソース 単体テスト AWS IaC Template 生成 26 ビルドステージの流れ 開発プロセス③「CI/CD パイプライン」 社内限定の静的サイト パートナー会社 社員 当社社員
© 2024 Mizuho Research & Technologies, Ltd. インストール 静的サイト ファイル生成
• 社外配布用の静的 サイト zip 生成 • サイトファイル 生成(MkDocs) • TypeScript コンパイル AWSリソース 単体テスト AWS IaC Template 生成 27 ビルドステージの流れ 開発プロセス③「CI/CD パイプライン」 パートナー会社 社員 社外配布用の静的サイト セキュリティ対策として社外から SharePoint の アクセス要求が送信されるのを抑止
© 2024 Mizuho Research & Technologies, Ltd. 28 ビルドステージの流れ 開発プロセス③「CI/CD
パイプライン」 インストール 静的サイト ファイル生成 • 社外配布用の静的 サイト zip 生成 • サイトファイル 生成(MkDocs) • TypeScript コンパイル AWSリソース 単体テスト AWS IaC Template 生成 $ mkdocs build $ npm run build (次工程の準備)
© 2024 Mizuho Research & Technologies, Ltd. 29 ビルドステージの流れ 開発プロセス③「CI/CD
パイプライン」 インストール 静的サイト ファイル生成 AWSリソース 単体テスト • セキュリティ検証 (cdk-nag) • CDKスナップ ショットテスト • CDKアサーション テスト AWS IaC Template 生成 https://speakerdeck.com/mhrtech/secjaws32
© 2024 Mizuho Research & Technologies, Ltd. 30 ビルドステージの流れ テストでは生成
AI のサポートが強力で意外と簡単! 開発プロセス③「CI/CD パイプライン」 インストール 静的サイト ファイル生成 AWSリソース 単体テスト • セキュリティ検証 (cdk-nag) • CDKスナップ ショットテスト • CDKアサーション テスト AWS IaC Template 生成 ログ保管期間など主に 非機能の期待値チェック AWS リソースに想定外の 変更が発生していないか https://speakerdeck.com/mhrtech/cdkconjp2023
© 2024 Mizuho Research & Technologies, Ltd. 31 ビルドステージの流れ 開発プロセス③「CI/CD
パイプライン」 インストール • /拡張機能 Install(pip) • GitHub Packages アクセス • 依存関係 Install ci) 静的サイト ファイル生成 AWSリソース 単体テスト AWS IaC Template 生成 • CloudFormation テンプレート生成 • アセット生成 CDK によりアセットの S3 デプロイ設定も簡単! CDK CFn テンプレート $ cdk synth アセット (静的サイトファイルなど)
© 2024 Mizuho Research & Technologies, Ltd. 32 ビルドステージの流れ(全体) 開発プロセス③「CI/CD
パイプライン」 インストール • MkDocs/拡張機能 • GitHub トークン設定 • 依存関係 Install (npm ci) 静的サイト ファイル生成 • 社外配布用の静的 サイト zip 生成 • サイトファイル 生成(MkDocs) • TypeScript コンパイル AWSリソース 単体テスト • セキュリティ検証 (cdk-nag) • CDKアサーション テスト • CDKスナップ ショットテスト AWS IaC Template 生成 • CloudFormation テンプレート生成 • アセット生成
© 2024 Mizuho Research & Technologies, Ltd. パイプライン自身の再構築(変更がある場合のみ) 33 開発プロセス③「CI/CD
パイプライン」 [Update Pipeline] CDK Pipelines 具体的にはパイプライン スタックのデプロイを実行 buildspec(CDK Pipelinesで自動生成)
© 2024 Mizuho Research & Technologies, Ltd. アセットのアップロード 開発者は意識せず、 CDK
Pipelines で自動実行! 34 開発プロセス③「CI/CD パイプライン」 [Assets] CDK Pipelines HTML、CSS、JavaScript など 静的サイトのアセットをアップロード S3バケット (アセット用)
© 2024 Mizuho Research & Technologies, Ltd. 35 静的サイトのデプロイ 開発プロセス③「CI/CD
パイプライン」 CloudFormation CFn テンプレートを 基にデプロイ Stack CloudFront S3 ACM Route53 … CDK Pipelines S3バケット (アセット用)
© 2024 Mizuho Research & Technologies, Ltd. 36 デプロイ後の IP
制限テスト 開発プロセス③「CI/CD パイプライン」 [Test] CDK Pipelines WAF IP 制限の確認 Stack CloudFront S3 ACM Route53 … 静的サイト 共通資産として 別スタック管理 別スタックの WAF で IP 制限が無制限解放に なっていないか確認
© 2024 Mizuho Research & Technologies, Ltd. 37 パイプライン失敗時の通知 開発プロセス③「CI/CD
パイプライン」 CI やデプロイなど何かしらの要因で 失敗した場合、SNS トピックに連携 インシデント…? 通知
© 2024 Mizuho Research & Technologies, Ltd. 38 AWS CDK
の補足
© 2024 Mizuho Research & Technologies, Ltd. 39 サーバーを意識せず、ほぼ全てを AWS
CDK (IaC) で構築! CDK により Lambda が自動生成されることもあり快適! 例)S3 Object デプロイ、カスタムリソース、SSM Parameter のクロスリージョンアクセス、etc... https://www.slideshare.net/slideshow/lambdaless -and-aws-cdk-191793017/191793017 AWS CDK の補足 Lambda レスも CDK で! https://pages.awscloud.com/rs/112-TZM-766/images/AWS-30_Serverless_AWS_Summit_JP_2024.pdf BucketDeployment で自動生成された Lambda 関数 コードは自動生成され、適切な IAM 権限も自動設定 (通常、Lambda の設定を意識する必要なし)
© 2024 Mizuho Research & Technologies, Ltd. 40 Docs as
Code で重要な CI/CD も CDK Pipelines なら簡単! https://catalog.us-east-1.prod.workshops.aws/workshops/10141411-0192-4021-afa8-2436f3c66bd8/ja-JP/2000-typescript-workshop/600-advanced-topics/700-pipelines 実機で学べて非常にオススメ! AWS CDK の補足
© 2024 Mizuho Research & Technologies, Ltd. 41 CloudFront と
S3 は CDK の便利な Construct 提供あり! https://docs.aws.amazon.com/solutions/latest/constructs/aws-cloudfront-s3.html 静的サイトを お手軽に試せる! AWS CDK の補足 僅か 5 行!
© 2024 Mizuho Research & Technologies, Ltd. 42 AWS CDK
は学習コンテンツが豊富! 初心者にはワークショップ・ BlackBelt シリーズが特にオススメ! https://aws.amazon.com/jp/events /aws-event-resource/archive/ https://aws.amazon.com/jp/builders- flash/202309/awsgeek-aws-cdk/ https://catalog.workshops.aws/typescript-and-cdk- for-beginner/ja-JP https://catalog.us-east- 1.prod.workshops.aws/workshops/101414 11-0192-4021-afa8-2436f3c66bd8/ja-JP AWS CDK の補足
© 2024 Mizuho Research & Technologies, Ltd. 43 まとめ •
Docs as Code の実践により AWS リソースに加えて ドキュメントの各種チェックも自動化し、生産性・品質を向上! • 全てシフトレフトせず、DevEx も考慮してローカルチェックを策定 • AWS CDK ならサーバーを意識せずに CI/CD パイプラインと静的サイトをまとめて構築! • セキュリティの自動化は特に重要!
44