米国防総省（DoD）におけるDevSecOps（序章）#DevSecOps

# きっかけ
 新年明けましておめでとうございます。今年はブログにチャレンジです。
 自社内でDevSecOpsをどう推進していくかを試行錯誤していた時、[@IT](https://www.atmarkit.co.jp/)の以下の記事を目にして目から鱗でした。資料が公開されているのを発見したので、備忘録も兼ねて和訳・紹介していきたいと思います。なお、筆者の英語力はいまいちなので、怪しい記述・解釈は原文をご参照ください。
 [国防総省がKubernetesとIstioでDevSecOps基盤を構築、「ウォーターフォール文化を変える」](https://www.atmarkit.co.jp/ait/articles/1912/05/news026.html)
# 原文・参照先資料
[DoD Enterprise DevSecOps Reference Design - DoD CIO](https://dodcio.defense.gov/Portals/0/Documents/DoD%20Enterprise%20DevSecOps%20Reference%20Design%20v1.0_Public%20Release.pdf?ver=2019-09-26-115824-583)
# 商標情報
 本書に記載されている名称、製品、およびサービスは、それぞれの所有者の商号、商標、またはサービスマークです。商用ベンダーおよびその製品またはサービスへの言及は、読者の便宜のために提供されるものであり、米連邦政府以外の事業体、イベント、製品、サービス、または企業の部門による承認を意味するものではありません。
# エグゼクティブサマリー
 DoDにおけるレガシーソフトウェアの取得と開発のプラクティスは、新しいソフトウェア“at the speed of operations”をデプロイする迅速さを提供していません。さらに、セキュリティは後付けであることが多く、アプリケーションおよび基盤となるインフラストラクチャのライフサイクルの初期段階から組み込まれていません。DevSecOpsは、迅速で安全なソフトウェア開発のための業界のベストプラクティスです。
　DevSecOpsは、ソフトウェア開発(Dev)、セキュリティ(Sec)、運用(Ops)を統合することを目的とした組織的なソフトウェアエンジニアリングの文化と実践です。DevSecOpsの主な特徴は、ソフトウェアライフサイクルのすべてのフェーズ (計画、開発、構築、テスト、リリース、デリバリ、デプロイ、運用、監視) において、セキュリティを自動化、監視、適用することです。DevSecOpsでは、自動化されたユニットテスト、機能テスト、統合テスト、セキュリティテストを通じて、テストとセキュリティがシフト・レフトされています。セキュリティと機能の機能が同時にテストされ、構築されるため、DevSecOpsの重要な差別化要因です。

DevSecOpsを採用するメリット
・平均本番稼働時間の短縮:新しいソフトウェア機能が必要になってから、本番稼働を開始するまでの平均時間
・導入頻度の向上:新しいリリースを本番環境に導入できる頻度
・アプリケーション・ライフサイクル全体にわたるリスクの特徴づけ、監視、軽減の完全な自動化
・「運転速度」にあるソフトウェアのアップデートとパッチ

　本書「DoD Enterprise DevSecOps Reference Design」は、DevSecOpsのライフサイクル、サポートする中核技術、DevSecOpsエコシステムについて説明しています。DevSecOpsのソフトウェアファクトリとエコシステムのためのツールとアクティビティを列挙しています。DoD enterprise DevSecOps container serviceは、強化されたDevSecOpsツールとデプロイメントテンプレートを選択するプログラムアプリケーションをDevSecOpsチームに提供する。ソフトウェアファクトリリファレンス設計とアプリケーションセキュリティ操作のサンプルを紹介します。この「DoD Enterprise DevSecOps Reference Design」は、情報技術(IT)ケイパビリティプロバイダ、ITケイパビリティコンシューマ、アプリケーションチーム、およびオーソライズ担当者に実装と運用のガイダンスを提供します。

目次
1 はじめに	10
　1.1 背景	10
　1.2 目的	11
　1.3 範囲	11
　1.4 ドキュメントの概要	12
2 前提条件と原則	13
　2.1 前提条件	13
　2.2 原則	13
3 DevSecOpsの概念	15
　3.1 主な用語	15
　　3.1.1 コンセプトモデル	18
　3.2 DevSecOpsのライフサイクル	18
　3.3 DevSecOpsの柱	19
　　3.3.1 組織	20
　　3.3.2 プロセス	21
　　3.3.3 技術	23
　　3.3.4 ガバナンス	23
　　　3.3.4.1 マネジメント体制	23
　　　3.3.4.2 授権官吏	25
　3.4 DevSecOpsエコシステム	26
　　3.4.1 計画	27
　　3.4.2 ソフトウェアファクトリ	28
　　3.4.3 操作	29
　　3.4.4 外部システム	29
4 DevSecOpsのツールとアクティビティ	31
　4.1 プランニング・ツールとアクティビティ	31
　4.2 ソフトウェアファクトリのツールとアクティビティ	34
　　4.2.1 CI/CDオーケストレーター	34
　　4.2.2 開発	35
　　4.2.3 ビルド	38
　　4.2.4 テスト	40
　　4.2.5 リリースおよび搬送	45
　4.3 生産活動のツールと活動	46
　　4.3.1 配置	46
　　　4.3.1.1 仮想マシンの導入	46
　　　4.3.1.2 コンテナの展開	47
　　4.3.2 操作	49
　　4.3.3 モニタ	50
　4.4 セキュリティツールとアクティビティの概要	53
　4.5 構成管理ツールとアクティビティの概要	54
　4.6 データベース管理ツールとアクティビティの概要	55
5 DoDエンタープライズDevSecOpsコンテナサービス	57
　5.1 DoDエンタープライズDevSecOpsコンテナファクトリ	57
　　5.1.1 DoD硬化コンテナ			57
　　5.1.2 コンテナの硬化方法			58
　　　5.1.2.1 コンテナベースイメージを選択		58
　　　5.1.2.2 コンテナの硬化			59
　　　5.1.2.3 硬化したコンテナの保管		59
　　　5.1.2.4 マニュアル	59
　　　5.1.2.5 継続的エンジニアリング	60
　　　5.1.2.6 サイバーセキュリティ	60
　5.2 DoD集中型アーティファクト・リポジトリ	60
6 DevSecOpsエコシステムリファレンスデザイン	61
　6.1 コンテナ化されたソフトウェアファクトリ	61
　　6.1.1 ホスティング環境			62
　　6.1.2 コンテナオーケストレーション		63
　　6.1.3 強化されたコンテナを使用するソフトウェアファクトリ	63
　　6.1.4 DoDアプリケーション			64
　6.2 クラウドDevSecOpsサービスを使ったソフトウェアファクトリー	65
　6.3 サーバレスのサポート			66
　6.4 アプリケーション・セキュリティ・オペレーション	68
　　6.4.1 継続的な導入			68
　　6.4.2 継続的な操作			68
　　6.4.3 継続的な監視			69
　　6.4.4　サイドカーコンテナセキュリティスタック	70
7 結論				75
付録A略語表			76
付録B主要用語集			79
付録Cリファレンス			88

図のリスト
図1:コンテナ			17
図2:概念モデル			18
図3:DevSecOpsのソフトウェアライフサイクル		19
図4:DevSecOpsの柱		20
図5:Application DevSecOpsプロセス	22
図6:次世代ガバナンスの5つの原則	25
図7:評価と承認の継承		26
図8:DevSecOpsエコシステム		27
図9:DevSecOpsソフトウェアファクトリ	28
図10:DoDエンタープライズDevSecOpsコンテナサービスアーキテクチャ	57
図11:コンテナ硬化プロセスの主な手順	58
図12:コンテナ化されたSoftware Factoryリファレンスデザイン	62
図13:DevSecOpsプラットフォームオプション		63
図14:アプリケーションライフサイクルのソフトウェアファクトリフェーズ	64
図15:クラウドDevSecOpsサービスを使用したソフトウェアファクトリ	66
図16:運用効率			67
図17:ログおよびログ分析プロセス	70
図18:サイドカーパターン		71
図19:サイドカーコンポーネント	72
図20:サイドカーコンテナのセキュリティスタックの相互作用	74
図21:仮想マシンを持つハイパーバイザ	84

表のリスト
表1:主な用語			15
表2:DevSecOpsにおけるオフィシャル認証の役割		26
表3:計画フェーズツール		31
表4:計画フェーズのアクティビティ	33
表5:CI/CD Orchestrator		35
表6:フェーズツールの開発		36
表7:開発フェーズのアクティビティ	37
表8:構築フェーズツール		38
表9:構築フェーズのアクティビティ	39
表10:テストフェーズのツール		40
表11:テストフェーズのアクティビティ	43
表12:リリースおよび配布フェーズのツール			45
表13:リリースおよび搬送フェーズのアクティビティ		46
表14:フェーズ展開ツール		47
表15:展開フェーズのアクティビティ	48
表16:操作フェーズツール		50
表17:操作フェーズのアクティビティ	50
表18:監視フェーズツール		51
表19:監視フェーズのアクティビティ	52
表20:セキュリティアクティビティーの概要		53
表21:構成管理アクティビティの概要	54
表22:データベース管理アクティビティの概要		56
表23:サイドカーコンテナのセキュリティスタックのコンポーネント	72