シークレット変数を設定する
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
シークレット変数は、値を公開せずにパイプラインで使用できる暗号化された変数です。 シークレット変数は、パイプラインで公開したくなかった、パスワード、ID、その他の識別データなどの個人情報用に使用できます。 シークレット変数は、2048 ビット RSA キーを使用して保存時に暗号化され、使用するタスクおよびスクリプト用に、エージェント上で使用できます。
シークレット変数の設定が推奨される箇所は、UI、変数グループ、Azure Key Vault の変数グループです。 ログ コマンドを使用してスクリプトにシークレット変数を 設定することもできますが パイプラインにアクセスできるユーザーは誰でもシークレットを表示できるため、このメソッドはお勧めしません。
パイプラインのパイプライン設定 UI で設定されたシークレット変数は、設定されたパイプラインにスコープが設定されます。 変数グループを使用して、パイプライン間でシークレット変数を共有できます。
UI のシークレット変数
個々のパイプラインを編集するときに、パイプライン エディターでシークレット変数を設定できます。 ロック アイコンを選択して、パイプライン変数シークレットを暗号化して作成します。
シークレット変数は、YAML とクラシックで、同じ方法で設定します。
Web インターフェイスでシークレットを設定するには、次の手順に従います。
- [パイプライン] ページにアクセスし、適切なパイプラインを選択して、 [編集]を選択します。
- このパイプラインの [変数] を探します。
- 変数を追加または更新します。
- 変数を暗号化して保存するには、 この値を秘密にする オプションを選択します。
- パイプラインを保存します。
シークレット変数は、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 のシークレットをリンクしたりできます。
新しい変数グループを作成する
[パイプライン]>[ライブラリ]>[変数グループの追加] を選択します。
グループの名前と説明を入力します。
省略可能: トグルを移動して、Azure Key Vault のシークレットを変数としてリンクします。 詳細については、「Azure Key Vault のシークレットを使用する」を参照してください。
グループに含める各変数の名前と値を入力し、それぞれに対して [+ 追加] を選択します。
変数を安全にするには、行の末尾にある "ロック" アイコンを選択します。
変数の追加が完了したら、[保存] を選択します。
変数グループはライブラリ セキュリティ モデルに従います。
Azure キー コンテナーのシークレットにリンクする
変数グループを作成し、既存の Azure キー コンテナーにリンクすることで、キー コンテナーに格納されているシークレットにマップできます。 シークレット名のみが変数グループにマップされ、シークレット値はマップされません。 変数グループへのリンクを持つパイプライン実行は、ボールトから最新のシークレット値をフェッチします。 詳細については、「 変数グループを Azure Key Vault のシークレットにリンクするを参照してください。
Azure Key Vault タスクを使用する
Azure Key Vault タスクを使用して、パイプラインにシークレットを含めることができます。 このタスクにより、パイプラインで Azure Key Vault に接続して、パイプライン変数として使用するシークレットを取得できるようなります。
パイプライン エディターで、[アシスタントを表示する] を選択してアシスタント パネルを展開します。
vault
を検索し、[Azure Key Vault タスク] を選択します。
[ジョブ全体に対してシークレットを使用できるようにする] オプションは、現時点では、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 でのシークレット変数の出力。
スクリプトでの変数の設定と使用の詳細について説明します。