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 です。
IAM 設定
続いて先ほど作成した Service Principal に対して Pipelines から接続する対象の Azure サブスクリプションに操作権限を付与します。
今回はサンプルのためサブスクリプションスコープで共同作成者という強い権限を与えています。実際に運用をされる際は必要最小限のリソース・ロールに絞ることを強くお勧めします。
自己証明書の作成
最後に Service Principal で認証をするために自己証明書を作成し、 Service Principal に登録します。
証明書以外にもクライアントシークレットを発行して利用する方法もあります。クライアントシークレットの方が手順はとても楽なのですが最長2年間の有期限です。
まずは自己証明書を作成します。自身の手元で作成する方法もありますが今回は KeyVault で作成したものを使用します。作成手順はこちらのドキュメントが参考になります。
証明書作成時の設定例です。有効期間はデフォルトでは12ヶ月となっていますので、頻繁な更新をしたくない場合は適度に伸ばしましょう。
項目名 | 設定値 |
---|---|
証明書の作成方法 | 作成 |
証明書の名前 | AzurePipelines-Connection-Sample |
証明機関(CA)の種類 | 自己証明書 |
件名 | CN=AzurePipelines-Connection-Sample |
DNS名 | 0個の DNS 名 |
有効期間 | 12 |
コンテンツの種類 | PKCS #12 |
有効期間のアクションタイプ | 有効期間が指定された割合になったら、自動的に更新する |
有効期間の割合 | 80 |
ポリシーの詳細構成 | 構成されていません |
最後に作成された自己証明書の公開鍵、および秘密鍵+公開鍵をダウンロードします。
自己証明書を Service Principal へ登録
自己証明書が作成出来たら、 Service Principal に自己証明書の公開鍵( CER 形式)を登録します。
Azure Pipelines 設定
続いて作成した Service Principal に対して Azure Pipelines の Service connection を作成します。簡単な作成方法は以下のドキュメントに記載されています。 Service connection は Azure DevOps のチーム単位では無くプロジェクト単位になりますので、必要なプロジェクト全てに対して作成します。
Service connection 作成
Service connection を作成するにはプロジェクトの設定画面を開き、左に表示されているリストから Service connection を選択します。 Service connection の種類を問われる一覧が表示されますので、 Azure Resource Manager を選択します。その次に表示される具体的な接続方法の選択肢は Service Principal (manual) です。
続いて表示される 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 から利用できるようになります。