この記事では、Azure へのアクセスに Open ID Connect(OIDC)を使用することによって、CircleCI側で静的なシークレットを保持することなくAzureへのセキュアなアクセスを実現する方法について紹介します。
はじめに
CircleCIのジョブでは Open ID Connect(OIDC) の IDトークンが利用可能になっています。
これを使うことによって、CircleCIに静的なシークレットを保持することなく、AWS、Google Cloud Platform、Vault などのクラウドプロバイダーへのアクセスをセキュアに実現することができます。
- OpenID Connect の ID トークンを使用してクラウドプロバイダーでジョブを認証する
- ジョブでの OpenID Connect トークンの使用
- AWS へのアクセスに Open ID Connect(OIDC) を使用する
- OIDC(OpenID Connect) を使用して CircleCI と HashiCorp Vault を連携する
今回は、Azure へのアクセスに Open ID Connect(OIDC)を使用することによって、Azureへのセキュアなアクセスを実現する方法について紹介します。
Azure Active Directory のアプリケーションおよびサービスプリンシパルを作成する
今回は既存アプリケーションがない前提で、新しく Azue Active Directory のアプリケーションとサービスプリンシパルを作成します。
作成したアプリケーションの
- アプリケーション(クライアント)ID
- ディレクトリ(テナント)ID
は CircleCI ワークフローで使用するため、値をコピーしておきます。
次に「アクセス制御(IAM)」からこのアプリケーションに対してロールを割り当てます。
今回は「閲覧者」のみのロールを割り当てます。
フェデレーション資格情報を追加する
次は、上記で作成した Azure Active Directory アプリケーションを Open ID Connect(OIDC) で利用できるようにするために、フェデレーション資格情報を追加していきます。
アプリケーションの「証明書とシークレット」→「フェデレーション資格情報」→「資格情報の追加」に進みます。
「フェデレーション資格情報のシナリオ」では「その他の発行者」を選択します。
以下必須な項目を入力し、フェデレーション資格情報を追加します。
- 発行者:
https://oidc.circleci.com/org/<organization_id>
organization_id
は CircleCI の「Organization Settings」から確認することができます。
サブジェクト認識子:org/<organization_id>/project/<project_id>/user/<user_id>
project_id は今回利用する CircleCI プロジェクトの「Project Settings」から確認することができます。
user_id はご自身の 「User Settings」から確認することができます。
-
名前:任意の値を入力します。
-
対象ユーザー:
<organization_id>
CircleCI コンテキストを作成する
次に作成する CircleCI ワークフローには Azure Active Directory アプリケーションのアプリケーション(クライアント)ID、ディレクトリ(テナント)IDを指定する必要があります。
これらの値は CircleCI のコンテキストとして値を保存する方がより安全なオプションです。
今回は新しく ”oidc-azure” というコンテキストを作成し、Environment Variables に以下の値を追加します。
AZURE_CLIENT_ID
:Azure Active Directory アプリケーションのアプリケーション(クライアント)IDAZURE_TENANT_ID
:Azure Active Directory アプリケーションのディレクトリ(テナント)ID
CircleCI ワークフローを作成する
CircleCI の設定ファイル(.circleci/config.yml)を作成していきます。
実行環境は、CircleCIが用意している Azure CLI がインストールされた Docker イメージ(cimg/azure)を利用しています。
Azure へのログイン(az login)では、まず “–-service-principal” オプションによって、Azure Active Directory のサービスプリンシパルを使ってログインするようにします。
そして、先ほど“oidc-azure” コンテクストに保存した
AZURE_CLIENT_ID
:Azure Active Directory アプリケーションのアプリケーション(クライアント)IDAZURE_TENANT_ID
:Azure Active Directory アプリケーションのディレクトリ(テナント)ID を指定します。
最後に、OpenID Connect(OIDC)トークンを与える “–-federated-token” オプションCircleCI ジョブが提供する トークンであるCIRCLECI_OIDC_TOKENを指定します。
az login
実行後には、「閲覧者」ロールを使った az vm list
コマンドを実行しています。
ワークフローを実行すると、OIDC を用いた az login
コマンドが成功し、az vm list
コマンドの実行が成功していることが確認できました。
おわりに
この記事では、Azure へのアクセスに Open ID Connect(OIDC)を使用することによって、CircleCI側でシークレットを保持することなくAzureへのセキュアなアクセスを実現する方法について紹介しました。
CircleCI では Open ID Connect のサポートをはじめ、マルチクラウドへの連携・デプロイを充実させています。
既存のCircleCIワークフローの改善や、新しいCI/CDパイプライン導入の際にぜひご活用ください。