Azure DevOps拡張機能

Keeper Secrets ManagerのAzure DevOpsへの統合によるシークレットの動的な取得

機能

  • Azure DevOpsパイプラインからKeeperボルトのシークレットを取得

  • ビルドの引数または環境変数としてシークレットのクレデンシャルを設定します

  • Keeperボルトからセキュリティで保護されたファイルをコピーします

Keeper Secrets Manager機能の完全なリストについては、概要をご参照ください。

前提条件

このページでは、Secrets ManagerとAzure DevOpsの連携について説明します。 この連携を利用するための必要条件は以下のとおりです。

インストール

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>

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)"

最終更新