DEVOPSパイプラインを使用してキーVaultへのアクセスがない秘密をフェッチ

5022 ワード

挨拶私の仲間の技術擁護者と専門家.
USECASE導入
AzureキーVaultは“アクセスポリシー”と“ファイアウォールと仮想ネットワーク”で保護されています.Azureのクラウドエンジニアは、条件のいずれかまたは両方のために秘密を取得することはできません(Scenerioに応じて).
問題文:
  • クラウドエンジニアのユーザーアカウントは、キーVaultアクセスポリシーの一部ではありません.したがって、秘密はAzureポータルから見ることができません.
  • Key Vaultは、組織の公共のNAT IPSによって保護されます.クラウドエンジニアが内部組織ネットワークから働いていない限り、秘密はAzureポータルから見ることができません.
  • Key Vaultは、Azure仮想ネットワークによって保護されます.Azure仮想ネットワークの中でなければ、秘密はAzureポータルから見ることができません.
  • 質問時間:
    どのように、クラウドエンジニアは秘密を得ますか?
    要件
  • AzureキーVault
  • AzureキーVault の3つのサンプル秘密
  • Azureリソースマネージャサービス接続
  • Azure devopsパイプライン( YAML )
  • 注意:
    サービス・プリンシパル(サービス接続を作成するために必要とされる)は、AzureキーVaultの最小の取得とリストアクセス方針許可を持たなければなりません.
    キーVaultのサンプルの秘密を表示します

    パイプラインはどうしますか?
    #
    パイプラインタスク
    1 .
    Azureキーボールトタスク
    2 .
    すべての秘密を取得し、テキストファイルに保存
    3 .
    秘密のテキストファイルをコピーするアーティファクトステージングディレクトリ
    4 .
    工芸品を発行する
    コードリポジトリ

    アーリンダム0310018 / デビアス



    以下はYAMLファイルの内容です.
    trigger:
      none
    
    ######################
    #DECLARE VARIABLES:-
    ######################
    variables:
      ServiceConnection: amcloud-cicd-service-connection
      KVName: ampockv
      Artifact: AM
    
    #########################
    # Declare Build Agents:-
    #########################
    pool:
      vmImage: windows-latest
    
    ###################
    # Declare Stages:-
    ###################
    stages:
    
    - stage: USECASE_DISPLAY_ALL_SECRETS_AND_VALUES
      jobs:
      - job: DISPLAY_SECRETS_AND_VALUES
        displayName: DISPLAY SECRETS AND VALUES
        steps:
    
    ########################################################################
    # Azure Key Vault Task.
    # Display the name of Key Vault.
    # Display the No. of Secrets found in Key Vault.
    # Display the No. of enabled and unexpired Secrets found in Key Vault.
    # Downloads values of Each Secret in Key Vault.
    ########################################################################
    
        - task: AzureKeyVault@2
          displayName: AZ KEYVAULT TASK
          inputs:
            azureSubscription: '$(ServiceConnection)'
            KeyVaultName: '$(KVName)'
            SecretsFilter: '*'
            RunAsPreJob: false
    
    #######################################################
    # Integers can be compared with these operators:
    #   -eq # Equal
    #   -ne # Not equal
    #   -lt # Less than
    #   -le # Less than or equal
    #   -gt # Greater than
    #   -ge # Greater than or equal
    #######################################################
    
    ###############################################################
    # Copy the Secrets text file to Artifacts Staging Directory:-
    ###############################################################
    
        - task: AzureCLI@2
          displayName: FETCH ALL SECRETS
          inputs:
            azureSubscription: '$(ServiceConnection)'
            scriptType: ps
            scriptLocation: inlineScript
            inlineScript: |
              az --version
              az account show
              $count = az keyvault secret list --vault-name $(KVName) --query "[] | length(@)"
              For ($i=0; $i -lt $count; $i++) {
              $secretname = az keyvault secret list --vault-name $(KVName) --query [$i].name -o tsv
              $secretvalue = az keyvault secret show --vault-name $(KVName) --name $secretname --query value -o tsv
              echo ($secretname + ':' + $secretvalue) >> Secrets.txt
              }
    ###############################################################
    # Copy the Secrets text file to Artifacts Staging Directory:-
    ###############################################################
    
        - task: CopyFiles@2
          displayName: COPY TO ARTIFACTS STAGING DIRECTORY
          inputs:
            Contents: Secrets.txt
            targetFolder: '$(Build.ArtifactStagingDirectory)'
    
    ###########################
    # Publish the Artifacts:-
    ###########################
    
        - task: PublishBuildArtifacts@1
          displayName: PUBLISH ARTIFACTS
          inputs:
            PathtoPublish: '$(Build.ArtifactStagingDirectory)'
            ArtifactName: '$(Artifact)'
            publishLocation: 'Container'
    
    変更したい変数の値:-
    ######################
    #DECLARE VARIABLES:-
    ######################
    variables:
      ServiceConnection: amcloud-cicd-service-connection
      KVName: ampockv
      Artifact: AM
    
    マイクロソフト主催のビルドエージェントからエージェントをビルドし、それ以外のビルドエージェントに変更します.

    パイプラインの結果

    アーティファクトで公開されている秘密のテキストファイル


    秘密のテキストファイルをダウンロードして表示します

    秘密のテキストファイルの出力形式は[秘密の名前]です