OktaとHashiCorp社・Terraformの統合がもたらす、新たなメリットとは?

Oktaのソリューションが、HashiCorp社のTerraformプロバイダーに公式に認定されました。サービスを利用開始するには、本ページをご覧ください。 また、投稿や課題を解決したい場合には、こちらでプロジェクトを検索してください。

OktaをIDレイヤーとして使用している企業・組織であれば、Oktaを「継続的インテグレーション(CI)」や「継続的デリバリー(CD)」のワークフロー、および開発パイプラインに簡単に統合することが可能です。HashiCorp Terraformは、再利用可能なコードを用いてクラウドインフラストラクチャの定義と作成を行うための、強力で拡張性の高いツールです。Terraformは、Oktaをはじめとする様々なインフラストラクチャのリソースの作成や管理、アップデートに利用されています。

管理者は、操作が容易なOktaの管理ユーザーインターフェイス(UI)、またはAPIを利用し柔軟にIDレイヤーの設定を変更できます。しかし、このことはAPIを介して行われた変更が、管理UIの設定を上書きできることも意味します。同様に、管理UIを用いて行われた変更が、APIの設定に影響を与えることもあります。このような柔軟性は、すべての設定をコードで管理する「Infrastructure as Code(IaC)」アプローチを望む開発チームと、管理UIを介した迅速な設定チェックや変更を可能とする、「自律型」アプローチを望むチームとの間に軋轢を生む可能性があります。

TerraformとOktaの統合では、いずれかの一方のアプローチを選択するのではなく、両方のニーズに対応可能なオプションがサポートされています。Terraformを介して行われた変更は、Oktaの管理ダッシュボード上に即座に表示されます。一方、Oktaの管理ダッシュボードでTerraformの設定に変更が加えられても、その内容はTerraformによって確認されるとともに、フラグが立てられます。これにより、Oktaによって行われた予期せぬ設定変更から保護されるようになります。

本記事では、OktaとTerraformが統合されたサービスを利用することでのメリットと具体的な企業の活用事例を紹介します。併せて、Terraformの利用により、コードを介してOktaの組織を構成するための方法についても解説します。これにより貴社のCI/CDパイプラインが大幅に強化されます。

CI/CDと開発パイプライン

CIとは、開発チームのメンバーが行ったコードの変更を、定期的にメインブランチにマージしたり統合したりするための開発手法です。統合に失敗した場合でも、すぐに修正が施されます。

メリット

  • コードに加えられた変更を管理しやすく、かつ段階的な方法で対応可能
  • 一連のテストに対するコードの継続的な検証を実施

一方、CDとは、開発したソフトウェアを迅速かつ簡単に本番環境に展開するための手法です。

メリット

  • 任意のバージョンのソフトウェアを任意の環境にオンデマンドで展開
  • 本番環境への展開に伴う様々なリスクの低減

開発パイプライン

Terraform development pipelines

CI/CDによる開発パイプラインは、工程ごとに開発者が従事する作業が分けられているため、開発チームは効率的に作業を進めることが可能です。また、それぞれの工程では、変更されたコードを検証するための自動化されたテストも実施されます。このテストは、パフォーマンスやセキュリティ、ユーザビリティなど、様々な問題の検出を目的に行われます。前工程でより高速なフィードバックループを使用して問題のほとんどを検出し、後工程ではより深く、より狭い範囲でテストを実行するのが理想的です。テストをクリアしたら、コードはさらに様々な工程を経て、最終的に本番環境へと移行します。

CI/CD、および開発パイプラインにより、開発チームはソフトウェア開発のスピードや生産性、持続可能性を向上させられるようになります。また、大規模で複雑なシステムを構築する場合でも、個々の統合を継続的にテストすることで、開発ライフサイクルの早い段階で問題を検出可能となります。これにより、プロジェクトや一定の開発サイクルの終了を待ってから開発チームの作業をすべてマージした際に起こりがちな、「マージ地獄」と呼ばれる事態を回避できるようになります。すべての変更はパイプラインを通過し、本番同様の環境で自動化されたテストや検証が行われます。OktaとTerraformの統合で開発チームは迅速に次工程へと作業を進められるようになるほか、必要に応じて何度でも本番環境にソフトウェアを展開できるようになります。これにより、1日あたりの本番環境へのデプロイ数も増加させられるようになります。

OktaとTerraformの統合による成功事例

ユースケース1:Terraformを利用したOktaの管理

Terraformを使用することで、Oktaインフラストラクチャの設定や管理、アップデートが簡単に行えるようになります。具体的には、Okta管理UIの代わりにHashiCorpが提供する「HashiCorp Configuration Language(HCL)を用いて、Terraform設定ファイル内でOktaインフラストラクチャを定義します。HCLは、オペレーターが目的のリソースを定義するために使用する、宣言型プログラミング言語です。続いて、TerraformはOktaに対して必要なAPIの呼び出しを行い、要求された状態を構築します。これにより、Oktaが用いられている一連のシステムのプロビジョニング、および展開のプロセスを自動化できるようになります。TerraformとOktaを併用する主なメリットには、以下のようなものがあります。

  • Oktaインフラストラクチャに予測可能性と保守の容易性、意思決定の迅速性をもたらします
  • 新しいアプリケーションをオンボーディングする際に、Oktaの管理に要する時間を短縮できます
  • 開発チーム内で機能や情報が共有されないことで生じるリスクが軽減されます。Oktaインフラストラクチャは、システム管理者の頭の中ではなくソースファイルによって定義され、誰もがアクセスできるようになります

以下は、Okta管理UI内でこれまで手動で実行されてきた一般的なタスクを、プログラムで自動的に実行するTerraform設定のサンプルになります。

Terraform + Okta configuration code

また、Oktaプロファイルのマスターにカスタム属性を追加し、Terraformを介してそのカスタム属性を持つユーザーを追加する方法は以下になります。

Terraform + Okta configuration code

Terraform + Okta configuration code

Terraform + Okta configuration code

ユーザー管理に加え、Terraformを使用することで、以下の項目を管理することもできます。

  • SAMLアプリケーション
  • OIDCアプリケーション
  • ブックマークアプリケーション
  • グループおよびグループのルール
  • 信頼できるソースとその生成元
  • ユーザープロファイルの属性スキーマ
  • 認証サーバー
  • インラインフック
  • OIDC、ソーシャル、およびSAML IdP
  • サインオンポリシー
  • MFAポリシー

ユースケース2:Oktaを用いた一連のシステムにおける、設定の差異の削除

Oktaポリシーは、時間の経過とともに複数のチームや管理者によって編集される場合があり、設定の変更のすべてを追跡することが困難なケースも少なくありません。それ対してTerraformには、「State」と呼ばれる概念があります。これは、意図的に行われたのか偶発的に行われたのかにかかわらず、Oktaインフラストラクチャへの変更が加えられた場合、即座にその変更を検出するというものです。この概念により、以下のようなメリットがもたらされます。

  • 管理者によって設定が変更されたかどうか、ログを確認する時間を減らせる
  • 不正アクセスなどにより管理者の知らないうちに設定が変更された場合でも、その究明が容易に

Terraformを使用する際、考慮すべきもう1つの重要なポイントは、Stateファイルが最新のインフラストラクチャ設定の真のソースとして機能することです。オペレーターは、ソフトウェアのアップデート、あるいは変更を行う際に、必要なStateファイルにアクセスできなければなりません。このプロセスを管理する方法の1つに、Terraform Cloudに追加された、リモートからのStateストレージ機能を利用するという手段があります。これにより、セキュアなStateファイルへのアクセス、および保存が実現され、設定ミスやエラーによるリスクが軽減されます。

以下は、設定の差異を発見するのに、Terraformがどのように役立つのかを示した例です。はじめに「tf applyコマンド」の出力から開始します(なお、分かりやすくために画面は編集しています)。

最初に、「Example OIDC App」という名前のOpenID Connect (OIDC)アプリケーションを設定してみましょう。

Terraform + Okta configuration code

この時点では、Example OIDC Appという名前のOIDCアプリケーションを設定しています。そこへ、別のOkta管理者がOkta管理UIを介して、そのアプリケーション名を変更したとします。これまでは、このような変更が行われたのを発見するのは困難でした。しかし、Terraformとの連携により、次にtf planコマンドを実行した際に、変更が加えられたことを見つけられるようになりました。

Terraform + Okta configuration code

Terraform + Okta configuration code

上の画面から、アプリケーション名が「Example OIDC App」から「New App Name」に変更されたことをTerraformが認識し、さらにtf applyコマンドを再度実行した際に、この変更が元に戻されていることが分かります。

Terraformは、Oktaインフラストラクチャを管理するための優れたツールです。Oktaインフラストラクチャに対してプログラムを利用した定義や設定が可能となるため、自動化と予測性、再現性が実現されるようになります。