Azure DevOps拡張機能
Keeper Secrets ManagerのAzure DevOpsへの統合によるシークレットの動的な取得
機能
Azure DevOpsパイプラインからKeeperボルトのシークレットを取得
ビルドの引数または環境変数としてシークレットのクレデンシャルを設定します
Keeperボルトからセキュリティで保護されたファイルをコピーします
Keeper Secrets Manager機能の完全なリストについては、概要をご参照ください。
前提条件
このページでは、Secrets ManagerとAzure DevOpsの連携について説明します。 この連携を利用するための必要条件は以下のとおりです。
Keeper Secrets Managerへのアクセス(詳細は、クイックスタートガイドをご参照ください)
KeeperアカウントのSecrets Managerアドオンの有効化
Secrets Manager強制ポリシーが有効化されたロールを割り当てられたメンバーシップ
インストール
Keeper Secrets Manager拡張機能のインストール
こちらのVisual Studio Marketplaceからダウンロードするか、または「Keeper Secrets Manager」で検索してください。
組織を選択して「ダウンロード(Download)」をクリックし、Azure組織の拡張機能を有効にします。
Azureパイプラインからシークレットにアクセス
Keeperボルトのシークレットにアクセスするには、AzureパイプラインのYAML設定ファイルにタスクを追加します。 次に、目的のフィールドを取得するため記録を照会します。
Keeper Secrets Managerのタスクを作成
Keeper Secrets Managerのタスクは以下のようになります。
- task: ksmazpipelinetask@1
inputs:
keepersecretconfig: $(secret_config)
secrets: |
6ya_fdc6XTsZ7i4x9Jcodg/field/password > var:var_password
6ya_fdc6XTsZ7i4x9Jcodg/field/password > out:out_password
6ya_fdc6XTsZ7i4x9Jcodg/field/password > out_password2
6ya_fdc6XTsZ7i4x9Jcodg/file/cert.pem > file:/tmp/mycert.pem
この例では、6ya_fdc6XTsZ7i4x9Jcodg
がUID記録です。 タスクを追加するには、タスクフォームを使用してタスクを作成するか、または手動で追加します。
タスクフォームを使用したタスクの追加
タスクメニューで「Keeper Secrets Manager」を検索し、タスクフォームを開きます。
タスクフォームに入力し、Keeper Secrets Managerタスクを作成するために必要なものは以下のとおりです。
Keeper Secrets Managerの設定をパイプラインにコピーするだけでも構いませんが、Azureパイプラインからアクセス可能なAzure Key VaultにSecrets Managerの設定を保管することをお勧めします。Azure Key Vaultの詳細は、Microsoftのドキュメントをご参照ください。
フォームを送信すると、タスクが設定に自動的に追加されます。
タスクを手動で追加
パイプラインの設定にタスクを手動で追加するには、以下の構文に従ってください。
- task: <Task Name>
inputs:
keepersecretconfig: <Secrets Manager Configuration>
secrets: |
<Secrets Queries>
- task: ksmazpipelinetask@1
inputs:
keepersecretconfig: $(secret_config)
secrets: |
6ya_fdc6XTsZ7i7x9Jcodg/field/password > pazzword
6ya_fdc6XTsZ7i7x9Jcodg/field/login > LOGIN
6ya_fdc6XTsZ7i7x9Jcodg/file/build-vsix.sh > file:/tmp/build-vsix.sh
Keeper Secretクエリ
Keeperボルトのシークレットに対するクエリでは、以下の構文を使用します。
標準フィールド値を取得
構文
[UID]/field/[FIELD NAME] > [VARIABLE NAME]
例
6ya_fdc6XTsZ7i7x9Jcodg/field/password > my_password
カスタムフィールド値を取得
構文
[UID]/custom_field/[FIELD NAME] > [VARIABLE NAME]
例
6ya_fdc6XTsZ7i7x9Jcodg/custom_field/notes > MyNotes
二要素コードを取得
構文
[UID]/field/oneTimeCode > [VARIABLE NAME]
例
6ya_fdc6XTsZ7i7x9Jcodg/field/oneTimeCode > MyOneTimeCode
ファイルを取得
構文
[UID]/file/[SECRET FILE NAME] > file:[OUTPUT FILE NAME]
例
6ya_fdc6XTsZ7i7x9Jcodg/file/cert.pem > file:secret-cert.pem
変数の型
Keeperボルトのシークレットをパイプラインに変数として保存する場合、それらの変数の設定方法に関して、必要に応じてオプションがいくつか用意されています。
OUT
out
(デフォルト)は、パイプライン内のすべてのジョブでアクセス可能な変数にシークレットを設定します。変数の型を定義しない場合は、デフォルトでout
が使用されます。
6ya_fdc6XTsZ7i7x9Jcodg/field/password > pazzword
6ya_fdc6XTsZ7i7x9Jcodg/field/password > out:my_password
VAR
var
は、同じパイプラインジョブ内で使用できるローカル変数にシークレットを設定します。
6ya_fdc6XTsZ7i7x9Jcodg/field/password > var:my_password
FILE
file
は、ファイルにコンテンツを設定します。 通常、Keeperボルトから証明書などのファイルにアクセスするために使用します。
6ya_fdc6XTsZ7i7x9Jcodg/file/build-vsix.sh > file:/tmp/build-vsix.sh
環境変数
env
は、ビルドマシンがアクセスできる環境変数としてシークレットを設定します。
これを行うには、まずシークレットをパイプライン変数に設定してから、それをbashタスクの環境変数として設定する必要があります。
- task: ksmazpipelinetask@1
name: getKeeperSecrets
inputs:
keepersecretconfig: $(sm-config)
secrets: |
6ya_fdc6XTsZ7i7x9Jcodg/field/password > var:var_password
- bash: |
echo "Using the mapped env variable: $MY_MAPPED_ENV_VAR_PASSWORD"
env:
$MY_MAPPED_ENV_VAR_PASSWORD: $(var_password)
使用例
Keeperからシークレットを取得
このパイプラインの例では、Keeperボルトのシークレットを変数に設定し、それらを確認表示します。 表示されたパスワードはマスクされることにご注意ください。
trigger:
- master
pool:
vmImage: ubuntu-latest
steps:
- task: ksmazpipelinetask@1
name: setKsmSecretsStep
inputs:
keepersecretconfig: $(sm-config)
secrets: |
6ya_fdc6XTsZ7i7x4Jcodg/field/password > var:var_password
6ya_fdc6XTsZ7i7x4Jcodg/field/password > out_password2
6ya_fdc6XTsZ7i7x4Jcodg/field/password > out:out_password
6ya_fdc6XTsZ7i7x4Jcodg/field/oneTimeCode > var:MyOneTimeCode
6ya_fdc6XTsZ7i7x4Jcodg/file/build-vsix.sh > file:/tmp/build-vsix.sh
- bash: |
echo "Using an input-macro works : $(var_password)"
echo "Using an output variable (default method) : $(setKsmSecretsStep.out_password2)"
echo "Using an output variable : $(setKsmSecretsStep.out_password)"
echo "Using an output variable for totp : $(setKsmSecretsStep.out_password)"
echo "Using the mapped env var : $(MyOneTimeCode)"
echo "Check injected secret file : $(file /tmp/build-vsix.sh)"
env:
MY_MAPPED_ENV_VAR_PASSWORD: $(var_password) # 環境変数にマッピングするための推奨方法
name: display_secret_values
複数のジョブでシークレットを使用
この例では、Keeperからパスワードとファイルを取得し、別のジョブでそれらのパスワードとファイルを利用します。
trigger:
- master
pool:
vmImage: ubuntu-latest
jobs:
- job: ksmSecrets
displayName:"Inject KSM Secrets"
steps:
- task: ksmazpipelinetask@1
name: setKsmSecretsStep
inputs:
keepersecretconfig: $(sm-config)
secrets: |
6ya_fdc6XTsZ7i7x9Jcodg/field/password > var:var_password
6ya_fdc6XTsZ7i7x9Jcodg/field/password > out:out_password
6ya_fdc6XTsZ7i7x9Jcodg/field/password > out_password2
6ya_fdc6XTsZ7i7x9Jcodg/file/mykey.pub > file:/tmp/public_key.pem
6ya_fdc6XTsZ7i7x9Jcodg/file/mykey.pem > file:/tmp/private_key.pem
- bash: |
echo "Using an input-macro works : $(var_password)"
echo "Using an output variable (default method) : $(setKsmSecretsStep.out_password2)"
echo "Using an output variable : $(setKsmSecretsStep.out_password)"
echo "Using the mapped env var : $MY_MAPPED_ENV_VAR_PASSWORD"
echo "Check injected secret file : $(file /tmp/public_key.pem)"
env:
MY_MAPPED_ENV_VAR_PASSWORD: $(var_password) # 環境変数にマッピングするための推奨方法
name: display_secret_values
- bash: |
cat << EOF > decrypted.txt
This is a decrypted message
EOF
name: create_text_file
- bash: cat decrypted.txt
name: view_decrpyted_content
- bash: openssl rsautl -encrypt -inkey /tmp/public_key.pem -pubin -in decrypted.txt -out ecrypted.bin
name: encrypte_file
- bash: cat ecrypted.bin
name: view_encrpyted_content
- bash: openssl rsautl -decrypt -inkey /tmp/private_key.pem -in ecrypted.bin -out decrypted2.txt
name: decrpyt_content
- bash: cat decrypted2.txt
name: view_decrpyted2_content
- job: encryptFileTest
dependsOn: ksmSecrets
variables:
# 出力変数をAからこのジョブにマッピング
# 注意:
# ジョブ間でファイルを共有できないため、各エージェントは一度に1つのジョブしか実行できません。
# 1つのジョブは、独立した実行単位であり、異なるジョブ間で通信するには
# 変数や中間生成物などの「ミドルウェア」を使用する必要があります。
pwdFromKsmSecrets: $[ dependencies.ksmSecrets.outputs['setKsmSecretsStep.out_password'] ]
steps:
- bash: |
echo "password retrieved from job 'ksmSecrets', step 'pwdFromKsmSecrets', out variable 'setKsmSecretsStep.out_password':$(pwdFromKsmSecrets)"