パイプラインで Azure Key Vault のシークレットを使用する
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Azure Key Vault を使うことで、パスワード、API キー、証明書などの機密情報を安全に格納して管理できます。 Azure Key Vault を使うと、データを暗号化するための暗号化キーを簡単に作成して管理できます。 Azure Key Vault は、すべてのリソースの証明書を管理するために使うこともできます。 この記事では、次の方法について学習します。
- Azure Key Vault を作成します。
- Key Vault のアクセス許可を構成する。
- 新しいサービス接続を作成する。
- Azure Pipeline からシークレットのクエリを実行する。
前提条件
- Azure DevOps 組織。 まだ持っていない場合は、無料のものを作成します。
- 自分のプロジェクト。 まだない場合は、プロジェクトを作成します。
- 自分のリポジトリ。 まだない場合は、新しい Git リポジトリを作成します。
- Azure サブスクリプション。 まだない場合は、無料の Azure アカウントを作成します。
Key Vault の作成
Azure ポータルにサインインしリソースの作成選択。
Key Vault で Create を選択して新しい Azure Key Vault を作成します。
ドロップダウン メニューから Subscription を選択し、既存の Resource グループを選択 または新しいグループを作成します。 Key コンテナー名を入力、Regionを選択し、Pricing レベルを選択し、追加のプロパティを構成する場合は Next を選択します。 それ以外の場合は、 Review + create を選択して既定の設定を維持します。
デプロイが完了したら、[リソースに移動] を選択します。
認証の設定
ユーザー割り当てマネージド ID を作成する
Azure ポータルにサインインし、検索バーで Managed Identities サービスを検索します。
[作成] を選択し、次のように必須フィールドに入力します。
- サブスクリプション: ドロップダウン メニューからサブスクリプションを選択します。
- リソース グループ: 既存のリソース グループを選択するか、新しいリソース グループを作成します。
- リージョン: ドロップダウン メニューからリージョンを選択します。
- 名前: ユーザー割り当てマネージド ID の名前を入力します。
完了したら [確認と作成] を選択します。
デプロイが完了したら、 リソースに移行を選択し、次の手順で使用する Subscription と Client ID 値をコピーします。
Settings>Properties に移動し、後で使用するためにマネージド ID の Tenant ID 値をコピーします。
キー コンテナーのアクセス ポリシーをセットアップする
Azure ポータルに移動し、検索バーを使用して、前に作成したキー コンテナーを見つけます。
Access ポリシーを選択し、Create を選択して新しいポリシーを追加します。
[アクセス許可ので、Get と List チェック ボックスをオンにします。
[次へ] を選択し、先ほど作成したマネージド ID の Client ID を検索バーに貼り付けます。 [マネージド ID] を選択します。
[次へ] を選択し、もう一度 [次へをします。
新しいポリシーを確認し、完了したら Create を選択します。
サービス接続を作成する
Azure DevOps 組織にサインインしてから、プロジェクトに移動します。
プロジェクト設定>サービス接続を選択し、 新しいサービス接続 を選択して新しいサービス接続を作成します。
Azure Resource Manager を選択し、 Next を選択します。
識別子の種類で、ドロップダウン メニューから Managed ID を選択します。
手順 1: マネージド ID の詳細では、次のようにフィールドに入力します。
マネージド ID のサブスクリプション: マネージド ID を含むサブスクリプションを選択します。
マネージド ID のリソース グループ: マネージド ID をホストしているリソース グループを選択します。
マネージド ID: ドロップダウン メニューからマネージド ID を選択します。
Step 2: Azure Scope の場合は、次のようにフィールドに入力します。
サービス接続のスコープ レベル: [サブスクリプション] を選択します。
サービス接続のサブスクリプション: マネージド ID がアクセスするサブスクリプションを選択します。
サービス接続のリソース グループ: (省略可能) マネージド ID アクセスを 1 つのリソース グループに制限するように指定します。
手順 3: サービス接続の詳細:
サービス接続名: サービス接続の名前を指定します。
サービス管理リファレンス: (省略可能) ITSM データベースからのコンテキスト情報。
説明: (省略可能) 説明を追加します。
Securityで、すべてのパイプラインに対するアクセス許可を付与するチェック ボックスをオンにして、すべてのパイプラインでこのサービス接続を使用できるようにします。 このオプションを選択しない場合は、このサービス接続を使用する各パイプラインへのアクセス権を手動で付与する必要があります。
[保存] を選択し、サービス接続を確認して作成します。
パイプラインでシークレットのクエリを実行して使用する
Azure Key Vault タスクを使うと、シークレットの値をフェッチし、パイプライン内の後続のタスクでそれを使用できます。 注意すべき点の 1 つは、次の例で示すように、シークレットを環境変数に明示的にマップする必要があるということです。
pool:
vmImage: 'ubuntu-latest'
steps:
- task: AzureKeyVault@1
inputs:
azureSubscription: 'SERVICE_CONNECTION_NAME'
KeyVaultName: 'KEY_VAULT_NAME'
SecretsFilter: '*'
- bash: |
echo "Secret Found! $MY_MAPPED_ENV_VAR"
env:
MY_MAPPED_ENV_VAR: $(SECRET_NAME)
最後の bash コマンドからの出力は、次のようになります。
Secret Found! ***
注意
Azure Key Vault の複数のシークレットのクエリを実行する場合は、SecretsFilter
引数を使って、シークレット名のコンマ区切りのリストを渡します: 'secret1, secret2'。