DevOpsからDevSecOpsへ　ー新時代のスキルセット

# はじめに

本誌は、米国国防総省最高情報責任者トーマス・ラム氏が2019年8月に発表した「DoD Enterprise DevSecOps Reference Design」を元に再編、追記したものです。

もし、原文の方を確認されたい方がいらっしゃいましたら、以下のリンク先を確認していただけますと、幸いです。

https://dodcio.defense.gov/Portals/0/Documents/DoD%20Enterprise%20DevSecOps%20Reference%20Design%20v1.0_Public%20Release.pdf

# DevOps

DevOpsは、開発のカプセル化を行い、開発からデブロイまで最小単位で実行していきます。

今現在行われているDevOps開発は以下の工程を行なっています。
1. ローカル環境で開発
2. ローカル環境でテストコードによるテスト
3. ビルド
4. テスト環境にデプロイ
5. テスト環境でテストコードによるテスト
6. 本番環境にデプロイ

しかし、DevOps開発の工程では、セキュリティが加味されていません。アプリケーションが安全かどうか誰もわからない状態で開発を行なっています。また、セキュリティエンジニアによる脆弱性診断も手動で行われ、自動化されていません。これでは、開発工程の中のどこがセキュリティを脅かしているのかがわかりません。

# DevSecOpsとは

上記の問題を解決する方法として、DevSecOpsが挙げられます。DevSecOpsは、development (Dev), security (Sec) and operations (Ops)の略称です。

![Screen Shot 2021-09-09 at 21.28.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731268/71930395-5e81-26b3-8940-bf8c98b00abb.png)

DevSecOpsは、全ての工程をセキュリティの自動化、監視、適応を行ないます。

## DevSecOpsの利点

DevSecOpsの利点は4つ挙げられます。

・開発からリリースまでの時間の短さ
・稼働中のサービスへのデプロイ頻度の多さ
・全ての操作が自動化され、リスクに対する特性評価、監視、リスクの軽減
・ソフトウェアのバッチの適応と更新の速度


## DevSecOpsを成功させるコツ

・ボトルネック(人間のボトルネックを含む)と手動アクションを取り除きます
・可能な限り多くの開発や展開アクティビティを自動化します
・企画・要件から展開・運用まで、共通のツールを採用します
・小規模で段階的で頻繁な更新を優先します
・各工程を待つのではなく、継続的な監視を並行しておこなます
・インフラのセキュリティリスクを測定および定量化し、アプリケーション全体のリスクを監視します
・コンテナ技術を使います

# DevSecOpsの4つの柱

DevSecOpsは、組織、プロセス、テクノロジー、ガバナンスの4つを支えられています。これは、プロセスを自動化し、一貫したガバナンスを適用するための新しいコラボレーションプロセス、テクノロジー、およびツールの開発とともに、組織文化の変化につながります。プロジェクトを成功させるには、4つの分野すべてでプロジェクトを進める必要があります。

![Screen Shot 2022-04-13 at 10.04.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731268/60590dd5-7f21-e701-6804-fa07c94ddf53.png)

## 組織

・組織文化を変えて、組織を俯瞰し、ソフトウェア開発、セキュリティおよび運用、DevSecOpsの概念と新しいテクノロジーを使用してスタッフをトレーニングします。
・組織の縦割り解消し、ソフトウェアライフサイクルのすべてのフェーズで、チームのコミュニケーションとコラボレーションを強化します。
・セキュリティアラートやセキュリティアラートなどの実用的なセキュリティおよび品質保証(QA)情報QAレポートは、各ソフトウェアライフサイクルフェーズでチームが自動的に利用できる必要があります。
・組織全体でポジティブイベントとネガティブイベントの両方に関する事後報告を共有することにより、安全文化を構築し、実装を強化し、DevSecOpsプラクティスの一部としてインシデント対応機能を強化する必要があ
ります。
・大きな変更を少なくするのではなく、小さな段階的な変更を多数行います。

## プロセス

DevSecOpsプロセスを正常に採用するには、複数の反復フェーズで実装します。自動化が容易ないくつかのタスクから始めて、DevSecOps機能を徐々に構築し、それに合わせてプロセスを調整します。このパイプラインは、開発者がコードをコミットした後にのみビルドプロセスを自動化します。時間の経過とともに、継続的インテグレーション、継続的デリバリー、継続的デプロイ、継続的運用、そして最後に継続的モニタリングに進み、DevSecOpsの完全な閉ループを実現できます。プログラムは適切なプロセスから始まり、そこから徐々に成長する可能性があります。プロセスの改善は頻繁に行われ、フィードバックに応答して、アプリケーションとプロセス自体の両方を改善します。

## テクノロジー
テクノロジーとツールは、ソフトウェアのライフサイクルを短縮し、効率を高めるために、DevSecOpsの実践において重要な役割を果たします。これらは、ソフトウェアファクトリーの一部としてソフトウェア生産の自動化を可能にするだけでなく、運用とセキュリティプロセスのオーケストレーションも可能にします。


## ガバナンス
ガバナンスは、ミッションプログラムに関連するリスクを積極的に評価および管理します。ガバナンス活動はATOの後で停止するのではなく、運用や監視を含むソフトウェアライフサイクル全体を通じて継続します。 DevSecOpsは、多くのガバナンス活動を促進および自動化できます。


# スキルセット
※以下、別の引用です。

米国空軍では、以下のスキルセットを仕様しDevSecOpsを行なっています。

![Screen Shot 2022-04-11 at 15.50.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731268/f88c8b1f-a821-c9da-49f7-08fdefe257cf.png)


https://csrc.nist.gov/CSRC/media/Presentations/dod-enterprise-devsecops-initiative/images-media/DoD%20Enterprise%20DevSecOps%20Initiative%20%20v2.5.pdf

また、国防総省は「ソフトウェアの開発とオープンソース」という書簡を公表しました。
これによれば、オープンソースはいくつかの懸念事項があるものの、商用利用されたソフトウェアよりも
、オープンソースを優先的に採用するそうです。

また、米国政府職員は公務としてoss活動に参加してもよいそうです。

以上より、オープンソースによりソフトウェア開発が今後とも主流であり続けることが、予想されます。


https://dodcio.defense.gov/Portals/0/Documents/Library/SoftwareDev-OpenSource.pdf