Azure DevOps Pipelinesを使ってAzure Container Registryにイメージをpushする(Linux VMSS編)
でLibraryに環境変数を設定する手順を書きました。
今回はよりセキュアな方法として、LibraryからKeyVaultを参照するやり方を残します。
KeyVaultへのアクセスは、インターネットからの接続をブロックして、プライベートエンドポイント経由のみ許可した状態です。
前提
- 既にパイプライン実行環境は作成済みであること
- KeyVault作成済みであること
KeyVaultシークレット作成
-
今回は以下のようにシークレットを設定しています。
Name Value userVariable user passwordVariable pass
KeyVaultネットワーク設定
Service Principal Service Connection作成
- こちら を参考に作成します。既に作成済みの場合は不要です。
Library作成
-
Service Connectionで設定したService PrincipalにKeyVaultへのGet/List権限がない場合は、Authorizeを選択することで付与することができます。
-
ただ、今回はKeyVaultのネットワーク設定でパブリックアクセスを無効にしているためこのエラーが出ています。
-
一時的にKeyVaultへのパブリックアクセスを許可します。これは最初の設定さえすれば元のパブリックアクセス無効に戻せます。
-
以上でKeyVaultとLibraryのリンクは完了です。Libraryに設定した状態と同様に利用できます。
LibraryとKeyVaultリンクの違いを確認
- この状態で以下のパイプラインを実行してみました。
trigger:
- main
variables:
- group: Variable-Test
pool:
name: vmss-lin
steps:
- script: |
echo $(userVariable)
echo $(passwordVariable)
displayName: 'Test1'
- Library直書きの場合は実行結果ログにechoした値が表示されましたが、KeyVaultリンクの方はアスタリスクでマスキングされて表示されました。
- 他にはKeyVaultのセキュアな機能が使える(論理的削除、アクセスポリシーなど)というメリットがありそうです。
以上です。