シークレット変数を設定する

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

シークレット変数は、値を公開せずにパイプラインで使用できる暗号化された変数です。 シークレット変数は、パイプラインで公開したくなかった、パスワード、ID、その他の識別データなどの個人情報用に使用できます。 シークレット変数は、2048 ビット RSA キーを使用して保存時に暗号化され、使用するタスクおよびスクリプト用に、エージェント上で使用できます。

シークレット変数の設定が推奨される箇所は、UI変数グループAzure Key Vault の変数グループです。 ログ コマンドを使ってスクリプトにシークレット変数を設定することもできますが、パイプラインにアクセスできるユーザーは誰でもシークレットを参照できるため、これは推奨されません。

パイプラインのパイプライン設定 UI で設定されたシークレット変数は、設定されたパイプラインにスコープが設定されます。 変数グループを使用して、パイプライン間でシークレット変数を共有できます。

UI のシークレット変数

個々のパイプラインを編集するときに、パイプライン エディターでシークレット変数を設定できます。 ロック アイコンを選択して、パイプライン変数シークレットを暗号化して作成します。

シークレット変数は、YAML とクラシックで、同じ方法で設定します。

Web インターフェイスでシークレットを設定するには、次の手順に従います。

  1. [パイプライン] ページにアクセスし、適切なパイプラインを選択して、[編集] を選択します。
  2. このパイプラインの [変数] を探します。
  3. 変数を追加または更新します。
  4. 変数を暗号化して保存するには、この値を秘密にするオプションを選択します。
  5. パイプラインを保存します。

シークレット変数は、2048 ビット RSA キーを使用して保存時に暗号化されます。 エージェントで使用するタスクとスクリプトに対してシークレットを利用できます。 パイプラインを変更するアクセス権を持つユーザーには注意してください。

重要

Azure Pipelines の出力に表示されないようにシークレットのマスクに努めますが、引き続き予防策を講じる必要があります。 シークレットを出力としてエコーしないでください。 一部のオペレーティング システムでは、コマンド ライン引数がログに記録されます。 コマンド ラインでシークレットを渡さないでください。 代わりに、シークレットを環境変数にマップすることをお勧めします。

シークレットの部分文字列をマスクすることはありません。 たとえば、"abc123" がシークレットとして設定されている場合、"abc" はログからマスクされません。 これは、レベルが細かすぎてログが読み取れなくなるシークレットのマスクを回避するためです。 このため、シークレットには構造化データを含めることはできません。 たとえば、"{ "foo": "bar" }" がシークレットとして設定されている場合、"bar" はログからマスクされません。

通常の変数とは異なり、スクリプトの環境変数には自動的に復号化されません。 シークレット変数を明示的にマップする必要があります。

UI でシークレット変数を使用する

YAML パイプラインでそれらを参照するには、シークレット変数を環境変数としてマップする必要があります。 この例では、UI に、2 つのシークレット変数 (SecretOne および SecretTwo) が定義されています。 SecretOne の値は foo で、SecretTwo の値は bar です。

steps:
- powershell: |
      Write-Host "My first secret variable is $env:FOO_ONE"
      $env:FOO_ONE -eq "foo"
  env:
    FOO_ONE: $(SecretOne)
- bash: |
    echo "My second secret variable: $FOO_TWO"
    if [ "$FOO_TWO" = "bar" ]; then
        echo "Strings are equal."
    else
        echo "Strings are not equal."
    fi
  env:
    FOO_TWO: $(SecretTwo) 

パイプラインの出力は次のとおりです。

My first secret variable is ***
True
My second secret variable: ***
Strings are equal.

Note

Azure Pipelines は、パイプライン ログにデータを出力するときにシークレットをマスクする作業を行うため、シークレットとして設定されていない出力とログに追加でマスクされた変数とデータが表示される場合があります。

詳しい例については、「変数の定義」を参照してください。

変数グループでシークレット変数を設定する

変数グループにシークレットを追加したり、既存の Azure Key Vault のシークレットをリンクしたりできます。

新しい変数グループを作成する

  1. [パイプライン]>[ライブラリ]>[変数グループの追加] を選択します。

    Screenshot of Add variable group button highlighted with red box.

  2. グループの名前と説明を入力します。

  3. 省略可能: トグルを移動して、Azure Key Vault のシークレットを変数としてリンクします。 詳細については、「Azure Key Vault のシークレットを使用する」を参照してください。

  4. グループに含める各変数の名前と値を入力し、それぞれに対して [+ 追加] を選択します。

  5. 変数を安全にするには、行の末尾にある "ロック" アイコンを選択します。

  6. 変数の追加が完了したら、[保存] を選択します。

    Screenshot of saving a variable group.

変数グループはライブラリ セキュリティ モデルに従います。

既存の Azure Key Vault を変数グループにリンクし、選択したコンテナー シークレットを変数グループにマップします。

  1. [変数グループ] ページで、[シークレットを Azure Key Vault から変数としてリンクする] を有効にします。 シークレットを含む既存のキー コンテナーが必要です。 Azure portal を使用してキー コンテナーを作成します。

    Screenshot of variable group with Azure key vault integration.

  2. Azure サブスクリプションのエンドポイントと、シークレットを含むコンテナーの名前を指定します。

    Azure サービス接続に、シークレット用のコンテナーに対する少なくとも GetList の管理アクセス許可があることを確認します。 コンテナー名の横にある [承認] を選択して、Azure Pipelines でこれらのアクセス許可を設定できるようにします。 または、次の手順に従い、Azure portal でアクセス許可を手動で設定します。

    1. コンテナーの [設定] を開き、[アクセス ポリシー]>[新規追加] の順に選択します。
    2. [プリンシパルの選択] を選択し、クライアント アカウントのサービス プリンシパルを選択します。
    3. [シークレットのアクセス許可] を選択し、GetList にチェック マークがあることを確認します。
    4. [OK] を選択して変更を保存します。
  3. [変数グループ] ページで、[+ 追加] を選択し、コンテナーの特定のシークレットを選択して、この変数グループにマップします。

キー コンテナー シークレットを管理する

以下では、シークレットの管理に役立つヒントをいくつか示します。

  • シークレットの "名前" のみが変数グループにマップされ、シークレットの値はマップされません。 コンテナーからフェッチされた最新のシークレット値が、変数グループにリンクされているパイプライン実行で使用されます。

  • キー コンテナー内の "既存" のシークレットに対して行われた変更は、変数グループが使用されているすべてのパイプラインで自動的に使用できます。

  • コンテナーに新しいシークレットが追加されたり、コンテナーから削除されたりしても、関連付けられている変数グループは自動的には更新されません。 変数グループに含まれるシークレットは、変数グループを使用しているパイプラインが正しく実行されるように、明示的に更新される必要があります。

  • Azure Key Vault では、Azure での暗号化キーとシークレットの格納と管理がサポートされています。 現在、Azure Pipelines 変数グループ統合では、Azure Key Vault のシークレットのみのマッピングがサポートされています。 暗号化キーと証明書はサポートされていません。

Azure Key Vault タスクを使用する

Azure Key Vault タスクを使用して、パイプラインにシークレットを含めることができます。 このタスクにより、パイプラインで Azure Key Vault に接続して、パイプライン変数として使用するシークレットを取得できるようなります。

  1. パイプライン エディターで、[アシスタントを表示する] を選択してアシスタント パネルを展開します。

  2. vault を検索し、[Azure Key Vault タスク] を選択します。

    Add the Azure Key Vault task.

[ジョブ全体に対してシークレットを使用できるようにする] オプションは、現時点では、Azure DevOps Server 2019 および 2020 でサポートされていません。

Azure Key Vault タスクの詳細については、「Azure Pipelines で Azure Key Vault シークレットを使用する」を参照してください。

ログ コマンドを使用してスクリプトでシークレット変数を設定する

task.setvariable ログ コマンドを使用して、PowerShell および Bash スクリプトで変数を設定できます。 これは、シークレット変数を操作するための最も安全性が低い方法ですが、デバッグに役立てることができます。 シークレット変数の設定が推奨される箇所は、UI、変数グループ、Azure Key Vault の変数グループです。

ログ コマンドを使用して変数をスクリプトとして設定するには、issecret フラグを渡す必要があります。

issecret が true に設定されている場合、変数の値はシークレットとして保存され、ログからマスクされます。

Note

Azure Pipelines は、パイプライン ログにデータを出力するときにシークレットをマスクする作業を行うため、シークレットとして設定されていない出力とログに追加でマスクされた変数とデータが表示される場合があります。

シークレット変数 mySecretVal を設定します。

- bash: |
    echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"

シークレット変数 mySecretVal を取得します。

- bash: |
    echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"
- bash: |
    echo $(mySecretVal)

bash でのシークレット変数の出力。

Screenshot of bash variable output.

スクリプトでの変数の設定と使用の詳細について説明します。