このページの本文へ

Microsoft Build 2022 Spotlight on Japan完全レポート 第7回

“開発者視点”で開発を妨げずコードのセキュリティを維持できる最新の機能群を紹介

マイクロソフトとGitHubが実現し、進化させるDevSecOpsの姿

2022年06月20日 11時00分更新

文● 吉井海斗 編集● 大塚/TECH.ASCII.jp

提供: 日本マイクロソフト

  • この記事をはてなブックマークに追加
  • 本文印刷

 「DevOps」にセキュリティを加えた「DevSecOps」という言葉が広まりつつある。だが、その意味は曖昧になりやすく、誰が何をどのようにやるかを考えると難しい。結果として、既存の組織をそのまま当てはめるだけになってしまうケースも多い。

 2022年5月25日に開催された「Microsoft Build 2022 Spotlight on Japan」のセッション、「DevSecOps : 開発スピードとセキュリティの両立をめざして」では、マイクロソフトとGitHubが考えるDevSecOpsの意味と、両者のプロダクトを組み合わせて実現する具体的な姿が紹介された。

 説明したのは、日本マイクロソフトの服部佑樹氏と、ギットハブ・ジャパンのダニエル・チョ氏だ。

GitHubとマイクロソフトの組み合わせで実現するDevSecOpsの姿を紹介

日本マイクロソフト App Innovationアーキテクト統括本部 Cloud Solution Architectの服部佑樹氏、ギットハブ・ジャパン フィールドソリューションズエンジニアのダニエル・チョ(Daniel Cho)氏

 服部氏はまず、マイクロソフトとGitHubの歩みを紹介した。「(2018年にマイクロソフトがGitHubの)買収を発表したときには『どうなっちゃうの?』というコメントも散見された」。だが、その後の共同作業で「GitHub Actions」などによるCI/CD統合、GitHubの無料化、「Visual Studio Code」の「GitHub Codespaces」への統合、AIペアプログラミング機能の「GitHub Copilot」などを次々と発表し、「多くのポジティブな反応をもらえるようになった」という。

 これからも引き続き新しいサービスの開発と提供を続けていくが、「いつの時代も『開発者が中心にいる』というのが、マイクロソフトとGitHubの変わらないスタンスだ」と強調する。

セキュリティになるとDev、Sec、Opsがバラバラな現状

 「アジャイル開発」や「DevOps」といったキーワードが広く知られるようになった。これを実現するためのツールやプラクティスを取り入れてきた企業は多い。だが、セキュリティに関してはどうか。服部氏は、この問題提起からDevSecOpsに関する話を始めた。

 「セキュリティになると、Dev、Sec、Ops、それぞれのチームがバラバラにやっているということも、珍しくはないのではないか」(服部氏)

 服部氏は、セキュリティの「シフトレフト」(ソフトウェアの開発から運用までの工程を水平に表現して前工程、つまり“左側”に対策ポイントを移すこと)の重要性を強調した。

 「セキュリティ侵害の53%※注が、アプリケーションコードの脆弱性に起因している。このため開発フェーズでコードの修正を行う必要がある。対応が後工程にずれ込むほど、コストがかかる」(服部氏) ※注:出典: Ponemon Institute「Cost of a Data Breach 2020」

 このことが、DevSecOpsの必要性につながっている。

DevSecOpsではセキュリティを「状態」として扱う

 そもそもDevOpsとは何か。「人/組織、プロセス、プロダクトを変革し、テクノロジーによって生産性を高め、ビジネス価値を生み出すコストを下げ、顧客価値を高めることにより、ビジネスを継続的な成功に導くこと」(服部氏)。特に重要なのは、ビジネスを「継続的な」成功に導くことだという。

 このDevOpsのプロセスの中にセキュリティの概念を組み込み、セキュリティとイノベーションを両立するのがDevSecOpsだと、服部氏は説明した。つまり、プロダクト全体、組織全体の話であり、それを継続的に改善していく取り組みだと話す。

 このため、セキュリティをホワイトペーパーやチェックシートの穴埋めを代表とする「特定時点の成果物」としてではなく、「状態」として扱うことにより、常にプロセス、環境、データが保全されている状況を作り出す必要がある。

 現場では、セキュリティという要素が入った瞬間に、Dev、Sec、Opsのチームがそれぞれ別個に動き出すといったことが起こる。これは「セキュリティが状態であり、継続的に保全しなければならないもの」という合意がなされておらず、えてして手作業による対応が行われているからだと指摘する。

 セキュリティを継続的に担保するということを、プロセス全体に取り入れていく――その中で、マイクロソフトとGitHubのコラボレーションが生きてくるという。

 「例えばGitHubのパイプラインツールであるGitHub Actionsの活用や、Azure Policyとの統合、さらに、デプロイしたクラウドインフラの状態を常に正常に保ち守っていく観点では“Infrastructure as Code(IaC)”のような概念も入ってくる。これらを活用し、どうやって守っていくか。これがGitHubとマイクロソフトが連携する、重要な意味になる」(服部氏)

 まだGitHubのことを「単なるリポジトリ」だと考えている方は多いのかもしれない。しかしGitHub はすでに開発者のコラボレーションを促進し、開発からインフラまでをつなぎ、DevSecOpsのツールまでを含めた統合的なエコシステムの場になっている。服部氏はそう述べて、チョ氏にバトンタッチした。

GitHubはどのように「DevSecOpsの要」となるのか

 ギットハブ・ジャパンのチョ氏は、GitHubにおけるセキュリティ関連機能の進化について説明した。

 「GitHubはそもそも“開発者が開発者のために作った開発プラットフォーム”。セキュリティの問題に関しても開発者目線で考え、最適な回答を導き出して実装している」(チョ氏)

 まず、コードのセキュリティをどう担保するか。世の中には、静的解析ツール、動的解析ツールなど、さまざまなコード解析ツールがある。 だが、多くのツールはセキュリティチーム目線で作られており、「開発者は閲覧権限を持たないまま、セキュリティチームから解析結果が渡されるまで待たなければならないことが多い」とチョ氏は指摘する。

 それでは、開発者目線でのコードセキュリティとはどのようなものか。GitHubの結論は「プルリクエストの中で脆弱性情報を示すこと」、それもコメントとしてではなく、コードの差分として組み込むことだったという。これにより、コードレビューの段階で脆弱性を確認でき、開発者自身が開発工程の中で無理なく修正できる。

トークン漏えい対策の効果的な方法とは

 コードに潜む脆弱性という点でさらに重大なのは、開発者がコードの中に認証情報(トークン)を書き込んでしまうことだ。トークンが漏えいすると、クラウドリソースなどのセキュリティ侵害につながる可能性があり、影響は大きい。

 この問題への対策ツールも多数存在する。「だが、こうしたツールの欠点は、開発者自身の責任で実行しなければならないことだ、管理側が関与するわけではない」とチョ氏は述べる。

 この問題に対する答えとして、GitHubでは上記と同様、コードにトークンが含まれていることをGitHub上で示す機能を投入した。こうすれば、開発者の作業の邪魔をすることはないし、管理者やセキュリティチームは、何が起こっているのかを把握できる。

 ただし、これだけでは実際の対応に問題がある。トークンを削除したコードを再発行しても、いったんGitHubに記録されてしまうと、Gitはバージョン管理システムであるため履歴の削除が非常に困難だからだ。

 そこで、GitHubでは、コードにトークン情報が含まれていることが検知された場合、コードのプッシュを止める方法を提供している。この機能は、トークンが含まれている確率が非常に高い場合にのみ機能する。

 「コードをプッシュする時点で、開発者の工程は一段落している。また誤検知の可能性が低いものだけを止めることで、開発者のツールへの信頼を失わず、『自分はこのコードをプッシュしてはダメなんだ』といった、開発者のセキュリティ意識を高めることにもつながる」(チョ氏)

OSSの脆弱性にワンクリックで対応

 オープンソースソフトウェア(OSS)のセキュリティも重要なテーマだ。GitHub上では多数のOSSプロジェクトが活動しており、OSSのユーザーもGitHubにアクセスするため、OSSのセキュリティを担保するのに好都合だ。

 GitHubでは、各OSSプロジェクトが発表している脆弱性をすべて管理している。そして、GitHubユーザーがコードパッケージをGitHubにアップロードすると、どのOSS(ライブラリなど)を使っているかを自動的に検知する。また、依存関係のあるOSSに脆弱性が見つかっていれば、その情報も合わせて表示する機能が実装されている。

 ただし、脆弱性情報を表示するだけでは不十分だ。開発者がこの情報に従って、自身で即座に対策を講じられなければならない。そこで、1クリックで脆弱性対応済みのバージョンにアップデートできる機能も開発した。

コードのプッシュから本番環境までのセキュリティを担保

 「Dev、Sec、Opsが、チームの間に存在するコミュニケーションの壁を取り壊し、お互い協力することによって初めてDevSecOpsが成り立つ」(チョ氏)

 すでにDevとOpsの協力の場となっているGitHubにSecチームを追加することで、3者がお互いに協力することができる。また、Ops側でのセキュリティは、Azureやその他のクラウドサービスでの機能を活用することで対応を強化できる。

 これによって、コードをプッシュした段階から本番稼働まで、開発、テスト、ステージング、本番全ての段階にわたり、セキュリティを担保できる。

* * *

 「DevSecOpsで考えていただきたいのは『Dev、Sec、Opsを分断させないこと』。コミュニケーションをとっていき、1つのコミュニティとしてワークさせることが重要。この点で、GitHubとマイクロソフト、Azureのコンビネーションは非常に良いものになっている。DevSecOpsという言葉を聞いたら、これを思い出していただけると幸いだ」

 服部氏は、最後にこう述べてセッションを締めくくった。

(提供:日本マイクロソフト)

カテゴリートップへ

この連載の記事