自動・共通・協働に加えて「シークレット管理」がDXの鍵!セキュアなマルチクラウド運用を実現する新手法

 最新技術を駆使してビジネス成長を目指す組織も多い中で、見落としがちなのが運用だ。クラウド環境では多数の設定項目やシークレットがあるものの手作業では非生産的であり、時に危険もともなう。2023年6月21日に開催されたオンラインイベント、EnterpriseZine Day 2023夏においてHashiCorp Japanの草間一人氏が登壇し、こうした課題に対する現代の強固かつセキュアな運用を実現するための方法について、同社のTerraformとVaultを通じて解説した。

DXの成功に欠かせない、現代の「強固な運用」とは

草間氏はセミナー冒頭で「DX、取り組まれていますか?」と切り出した。企業ごとに、デジタイゼーション、デジタライゼーション、デジタルトランスフォーメーション(DX)とフェーズはそれぞれだが「取り組み始めている企業が増えてきていると実感しています」と草間氏は語る。

実際DXに取り組む中でクラウド化、さらにはマルチクラウド化が進み、組織の内製化比率を高めようとする企業も増えている。DXに向けて多くの組織が動き出しているものの、どこかで停滞している企業も少なくない。

苦戦している理由について、草間氏はいくつか理由を挙げた。まずは人員不足や予算不足だ。「DXを進めよ」と命令が下ったものの、人材や予算がつかず身動きがとれない、細かな要求への対応に時間が割かれてしまう、それ以前に「パソコンが壊れました」と本来のDXとは異なるサポート業務に追われてしまうなどの状況が考えられる。

また、モチベーション維持の難しさもある。DXへの取り組みの成果はすぐさま明確に表れるとは限らない。逆にDXが実現できなくても、すぐに悪影響が及ぶわけでもない。ゆえにどこかでモチベーションが続かなくなってしまうのだ。ただし「中長期的な視点では、取り残されることで確実に影響が出てきます」と草間氏はくぎを刺す。

理想と現実を見てみよう。革新的な技術を駆使することで、ビジネスをぐんぐん伸ばすようなDXの輝かしい側面に惹かれてしまいがちではある。だが実際の運用では「増え続けるシステム」や「変わり続ける技術」などの苦しい側面もある。

画像クリックで拡大

草間氏は「DXを進めていくにはキラキラしたところだけに目を向けるのではなく、それらを実現するための強固な運用が必要不可欠」と強調する。

かつて「強固な運用」といえば、安定したハードウェアやソフトウェアを揃え、静的なネットワークで構成するものだった。システムやソフトウェアは数年で更改するため、言い換えれば数年間は据え置きだ。しかしそれでは変化の早い時代にそぐわない。現代においては短いリードタイムで導入し、最新技術へのキャッチアップや突然の需要増加に対応することが求められる。だからこそ、オンプレからクラウドへの移行は必至だ。

クラウドだとオンデマンドで必要な分だけリソースを用意し、使った分だけ利用料を払うように費用の使い方が変わる。複数のサービスを組み合わせたり、ネットワークを動的に変化させることもある。ここで活用するのがAPIだ。APIは様々なサービスを組み合わせたり、構成変更を自動化したりするにも役立つ。

「クラウドの柔軟性や拡張性を生かし、APIを駆使し、動的に運用することが“現代流の『強固な運用』”です」と草間氏は言う。負荷分散や冗長構成で、部分的にシステムが落ちたとしても「全体としては落ちない」状態を実現できればいいのだ。

画像クリックで拡大

なお、クラウドの動的な環境では、これまでの課題(システムの増加、変化し続ける技術)が自動的に払拭されることはなく、むしろより直面することになる。草間氏は「楽をするためにクラウドを使おうと思ったのに、実際にはクラウドに“使われている”なんてことはないでしょうか」と問いかける。

Terraformで実現できる自動化、共通化、協働化

クラウド環境で強固な運用を苦労せずして実現するにはどうしたらいいか。HashiCorpが解決策につながるキーワードとして掲げるのは「自動化」、「共通化」、「協働化(コラボレーション)」の3つだ。

まず「自動化」とは何か説明しよう。ここで実際に使うプロダクトがTerraformだ。これはインフラ構築と自動化のためのツールで、HashiCorpが中心となりOSSで開発を進めている。大きな特徴はインフラ構成をコードで記述することで、インフラの構築を自動化できる点だ。IaC(Infrastructure as Code)を実現するためのプロダクトとも言える。また、チーム・組織向けの商用版サービスとして「Terraform Enterprise」や「Terraform Cloud」もある。

現実のクラウド環境を考えてみよう。たとえば、AWSのコンテナからアプリケーションを稼働させるとする。そうなるとコンテナだけなく、ネットワークのためにVPC、サブネット、ルーティングテーブルを設定し、またデータのためにS3バケットを用意し、いろいろな権限をIAM(Identity and Access Management)で設定するなど、準備しなくてはいけないことが山ほどある。これらをミスせず設定する必要があるのだが「手作業ではあっという間に人間の限界を超えてしまう」と草間氏は指摘する。

AWSでシステムを構築する場合(画像クリックで拡大)
AWSでシステムを構築する場合(画像クリックで拡大)

そこでIaCだ。リソースのあるべき形をコードで記述(定義)し、Terraformに「食わせる(読み込む)」。これをTerraformでは「Apply」と呼ぶ。実際に「Apply」コマンドを実行すると、Terraformが起動してコードに従って環境を自動的に構築する(内部的にはAPIで実行する)。

人間が作業する場合だと、設計者が構成を設計書や管理台帳に書き、オペレーターが読み解いて環境を構築するなど、少なくとも2人の人間が関与することになる。人間なので記述や操作でミスは起こりうる。ミスを減らすためにチェックする人員を増やすとなると、ただでさえ足りないのにさらに人手が必要になってしまう。

画像クリックで拡大
画像クリックで拡大

Terraformであればコードを自動実行していくため、人間のミスが入る余地はない。こうして環境構築で自動化を実現し、ワークフローを改善していくことが可能だ。

コスト削減と同時に効率性向上も実現

続いて「共通化」について見てみよう。インフラ構築業務は専門的な領域ではあるものの、似たような作業の繰り返しが多い。微妙に違いがあるものの、大枠では同じだったりする。そこで環境構築の共通化を進めることで、コスト削減を実現していくことができる。

もし環境をコードで定義していれば再利用が可能だ。たとえばある案件では、以前構築した案件(AWSのEC2でVMを構築する)とほぼ同じだが、メモリとCPUの設定値が少し違うとする。全体としてはほぼ同じなので流用ができて、一部の設定値だけ置き換えていけばいい。

さらにTerraformでは環境を部品化することが可能であり、これを「モジュール」と呼ぶ。部品化すると、次からはモジュールを呼び出すことで似たような環境を簡単に複製していくことができるし、共通部分は部品化しておくことで、以降の生産性が高まる。

画像クリックで拡大
画像クリックで拡大

最後は協働化(コラボレーション)について説明しよう。Terraformのモジュールは自社が作成したものだけではなく、オープンに公開されている「パブリックモジュール」という社外の誰かが作ったものを使うこともできる。広い目で見れば、似たような作業をしている人がどこかにいるものだ。誰かの知見を共有(享受)できるのはオープンソースの強みでもある。インフラのコードを通じて組織を超えたコラボレーションができて、労力やコスト削減にもつなげることができる。

画像クリックで拡大
画像クリックで拡大

またTerraformの実行環境がSaaSで提供されるTerraform Cloudを使うと、GitHubなどのレポジトリと組み合わせることもできる。たとえばTerraformのコードをGitにコミットすると、自動的にTerraform Cloudで処理が走り、レビューを経てクラウドのインフラ構築を自動化することもできる。DevOpsやCI/CDをインフラ構築にも広げるようなイメージだ。環境構築におけるコラボレーションも実現できる。草間氏は「Terraform Cloudを活用することでチームやメンバー間のコラボレーションがより進み、運用の効率化も図ることができます」と補足する。

クラウド運用で忘れてはならないシークレット管理

こうしてTerraformの自動化、共通化、協働化を通じて、現代流の強固な運用を見てきたところだが、クラウド環境を活用するうえで忘れてはいけないのがセキュリティだ。DXを推進していくなかで、セキュリティを担保することは重要な課題となる。

クラウドを活用する場合、クラウドサービスを利用する時のアクセスキー、APIトークン、データベースにアクセスするためのユーザー名とパスワード、SSHの鍵、TLSの証明書と鍵など、セキュリティを担保するために大切な情報が数えきれないほどある。まとめて「シークレット」と呼んだりするが、クラウドではオンプレの時とは段違いにシークレットが複雑になるため、確実に管理していくことが重要になる。

なかにはシークレット類をパスワード管理台帳のようなもので管理していたり、運用管理用のユーザー名とパスワードを共有したりするかもしれない。だが、これはかなり危険な状態である。パスワード管理台帳そのものが流出してしまったり、うっかりパブリックのGitリポジトリにシークレットが混入した状態のコードをコミットしてしまい、流出してしまったりするケースもある。

画像クリックで拡大
画像クリックで拡大

シークレット管理が手薄だと、容易にセキュリティ侵害へつながりかねない。HashiCorpが2022年に発表した『HashiCorp State of Cloud Strategy Survey』によれば、過去2年間のデータ侵害の増加率は380%になっているという。様々な要因が重なり、データ侵害は急速に増加を続けている状況だ。

また草間氏は、データ侵害のうち「82%は人的要素が関与」とも指摘する。これはユーザーの操作ミスやユーザーのアカウントが攻撃されるなど、何らかの人的要素が侵害につながることを示している。また「Webアプリケーションへの侵害のうち、9割がクレデンシャルに起因するもの」という調査結果もある。

クレデンシャルの流出が起きると、そこを起点にサイバー攻撃は進行していく。米国の非営利機関MITRE ATT&CK(マイターアタック)によると、権限が低いクレデンシャルでも横展開や権限昇格などによってデータ窃取につながるという。シークレット管理はデータ流出を食い止めるのに重要な要素となる。

シークレット管理のベストプラクティスとしては、シークレットの定期的なローテーション、ユーザーごとに細かな権限管理、監査記録、暗号化などが挙げられる。しかしこれを手動で運用していたら手間がかかりすぎて、かえってミスを誘発しかねない。

シークレット管理の解決策

こうしたシークレット管理の課題解決となるHashiCorpのプロダクトが「Vault」だ。このVaultは直訳すると「金庫」で、「大切な情報=シークレット」を厳重に管理するためのシステムとなる。システムごとに分散しているシークレットをVaultで集中管理することで、安全性と生産性を高めることができる。またVaultはクラウドとオンプレのハイブリッド環境でも使用可能だ。

Vaultによるシークレット管理(画像クリックで拡大)
Vaultによるシークレット管理(画像クリックで拡大)

シンプルな利用パターンだと、シークレットをGUIの管理画面またはコマンドラインで値を保存し、Vaultで集中管理する。実運用ではアプリケーションからAPIでVaultにアクセスしてシークレットを得る。最近ではKubernetesを経由するケースも増えている。

これだけならシークレットを集中管理するだけだが、Vaultだと動的なシークレット管理ができるのが大きな強みとなる。Vaultがシステム(データベース)とユーザーの間に立ち、システムに一時的(Just In Time)なユーザー名とパスワードを発行するように依頼し、Vaultはユーザーに一時的なユーザー名とパスワードを渡してアクセスさせる。システムを介するのでユーザーのミスで流出することもなく、ログが残るため監査記録も残る。CI/CDからクラウドにアクセスする時も同様に、動的なユーザー名とパスワードでアクセスすることが可能となる。

動的なシークレット管理(画像クリックで拡大)
動的なシークレット管理(画像クリックで拡大)

最後に草間氏は「Terraformの自動化・共通化・協働化を通じて効率良いインフラ運用を進めていくだけではなく、Vaultを組み合わせることで生産性を損なうことなく強固でセキュアな運用も実現できます。こうしたプラットフォーム運用で、DXを成功に導いていただけたらと思います」と述べて講演を締めくくった。

Original Post>