Azure PipelinesからAzureに自己証明書で接続する

Azure Pipelines から組み込みの機能を利用して Azure をはじめとする他のサービスに接続するには Service connection を使用します。今回は Azure Pipelines から Azure へ Service Principal を利用して接続する際に、自己証明書を使用して手動で Service connection を構成する方法を紹介します。


事前準備

まずは事前準備として Azure 側の設定を行います。主には接続する Service Principal の設定です。

Service Principal 作成

最初に AzureAD で Service Principal (アプリケーション)の登録を行います。この Service Principal はただ Azure Pipelines と Azure とを接続するだけのものですので、 Service Principal に細かい設定をする必要はありません。ただ作るだけで OK です。

Service Principal作成

IAM 設定

続いて先ほど作成した Service Principal に対して Pipelines から接続する対象の Azure サブスクリプションに操作権限を付与します。

Service PrincipalにAIM設定 その1
Service PrincipalにAIM設定 その2
Service PrincipalにAIM設定 その3

今回はサンプルのためサブスクリプションスコープで共同作成者という強い権限を与えています。実際に運用をされる際は必要最小限のリソース・ロールに絞ることを強くお勧めします。

自己証明書の作成

最後に Service Principal で認証をするために自己証明書を作成し、 Service Principal に登録します。
証明書以外にもクライアントシークレットを発行して利用する方法もあります。クライアントシークレットの方が手順はとても楽なのですが最長2年間の有期限です。

まずは自己証明書を作成します。自身の手元で作成する方法もありますが今回は KeyVault で作成したものを使用します。作成手順はこちらのドキュメントが参考になります。

docs.microsoft.com

KeyVaultで自己証明書を作成する その1

証明書作成時の設定例です。有効期間はデフォルトでは12ヶ月となっていますので、頻繁な更新をしたくない場合は適度に伸ばしましょう。

項目名 設定値
証明書の作成方法 作成
証明書の名前 AzurePipelines-Connection-Sample
証明機関(CA)の種類 自己証明書
件名 CN=AzurePipelines-Connection-Sample
DNS名 0個の DNS 名
有効期間 12
コンテンツの種類 PKCS #12
有効期間のアクションタイプ 有効期間が指定された割合になったら、自動的に更新する
有効期間の割合 80
ポリシーの詳細構成 構成されていません

KeyVaultで自己証明書を作成する その2

最後に作成された自己証明書の公開鍵、および秘密鍵+公開鍵をダウンロードします。

KeyVaultで作成した自己証明書をダウンロード

自己証明書を Service Principal へ登録

自己証明書が作成出来たら、 Service Principal に自己証明書の公開鍵( CER 形式)を登録します。

Service Principalに自己証明書の公開鍵を登録

Azure Pipelines 設定

続いて作成した Service Principal に対して Azure Pipelines の Service connection を作成します。簡単な作成方法は以下のドキュメントに記載されています。 Service connection は Azure DevOps のチーム単位では無くプロジェクト単位になりますので、必要なプロジェクト全てに対して作成します。

docs.microsoft.com

Service connection 作成

Service connection を作成するにはプロジェクトの設定画面を開き、左に表示されているリストから Service connection を選択します。 Service connection の種類を問われる一覧が表示されますので、 Azure Resource Manager を選択します。その次に表示される具体的な接続方法の選択肢は Service Principal (manual) です。

Service connection作成 その1
Service connection作成 その2

続いて表示される Service connection の詳細設定画面での設定例です。

設定名 設定値
Environment Azure Cloud
Scope Level Subscription
Subscription Id (対象サブスクリプションの ID )
Subscription Name (対象サブスクリプションの名前)
Service Principal Id (先に作成した Service Principal の Application ID )
Credential Certificate
Certificate (後述)
Tenant ID ( AzureAD テナントの ID )
Service connection name ( Pipeline から利用する名前)

証明書の入力欄には、先ほど KeyVault から出力した秘密鍵と公開鍵が含まれるファイルを変換した文字列を貼り付けます。コマンドプロンプトを開き、次のコマンドを貼り付けて実行してください(ファイル名の箇所は要変更)。このコマンドは Git インストール時に同封されている OpenSSL を利用しています。 Git をインストールされていない場合は別途 Windows 用のインストーラーを利用して OpenSSL を取得してください。

"C:\Program Files\Git\usr\bin\openssl.exe" pkcs12 -in <filename.pfx> -out certificate.crt -nodes

作成された certificate.crt をメモ帳等で開いて、表示された文字列全てをコピーして Service connection 設定の Certificate 欄に貼り付けます。正しく変換出来ていればこのような内容が得られます。

Bag Attributes
    localKeyID: 01 00 00 00 
    friendlyName: 
    Microsoft CSP Name: Microsoft Enhanced RSA and AES Cryptographic Provider
Key Attributes
    X509v3 Key Usage: 10 
-----BEGIN PRIVATE KEY-----
.........
-----END PRIVATE KEY-----
Bag Attributes
    localKeyID: 01 00 00 00 
subject=CN = AzurePipelines-Connection-Sample

issuer=CN = AzurePipelines-Connection-Sample

-----BEGIN CERTIFICATE-----
........
-----END CERTIFICATE-----

ここまでを正しく設定できていれば、表示されている Verify ボタンを押すと Verification Succeeded と表示され、 Pipeline から利用できるようになります。

投稿者プロフィール
中谷 大造

中谷 大造

情報システム部の中谷です。社内用スクラッチアプリの開発をしています。

執筆記事一覧