DEVOPS 파이프라인을 사용하여 키 볼트에 대한 액세스 권한 없이 비밀 가져오기

5783 단어
동료 기술 옹호자 및 전문가에게 인사드립니다.


사용 사례 소개:-



Azure Key Vault는 "액세스 정책"및 "방화벽 및 가상 네트워크"로 보호됩니다. Azure 클라우드 엔지니어는 조건 중 하나 또는 둘 다로 인해 비밀을 가져올 수 없습니다(Scenerio에 따라 다름).


문제 진술:-


  • Cloud Engineer의 사용자 계정이 Key Vault 액세스 정책의 일부가 아닙니다. 따라서 비밀은 Azure Portal에서 볼 수 없습니다.
  • Key Vault는 조직의 공용 NAT IP로 보호됩니다. Cloud Engineer가 조직 네트워크 내부에서 작업하지 않는 한 Azure Portal에서 비밀을 볼 수 없습니다.
  • Key Vault는 Azure 가상 네트워크로 보호됩니다. Azure Virtual Network 내부가 아니면 Azure Portal에서 비밀을 볼 수 없습니다.



  • 질문 시간:-



    클라우드 엔지니어는 비밀을 어떻게 가져오나요?


    요구 사항:-


  • Azure 키 자격 증명 모음
  • Azure Key Vault의 세 가지 샘플 암호
  • Azure Resource Manager 서비스 연결
  • YAML(Azure DevOps 파이프라인)



  • 노트:-



    서비스 주체(서비스 연결을 만드는 데 필요함)는 최소한 Azure Key Vault에서 GET 및 LIST 액세스 정책 권한이 있어야 합니다.


    아래는 KEY VAULT의 샘플 비밀을 표시합니다.






    파이프라인은 무엇을 하는가:-





    #
    파이프라인 작업


    1.
    AZURE 키 볼트 작업

    2.
    모든 비밀을 가져와 텍스트 파일에 저장

    삼.
    ARTIFACTS 스테이징 디렉터리에 비밀 텍스트 파일 복사

    4.
    아티팩트 게시



    코드 저장소:-




    arindam0310018 / Fetch-Secrets_DevOps









    다음은 YAML 파일(Azure DevOps)의 내용입니다.





    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'
    



    변경하려는 경우 VARIABLES의 값:-





    ######################
    #DECLARE VARIABLES:-
    ######################
    variables:
      ServiceConnection: amcloud-cicd-service-connection
      KVName: ampockv
      Artifact: AM
    



    에이전트 풀을 MICROSOFT HOSTED BUILD AGENT에서 SELF HOSTED BUILD AGENT로 변경하십시오. 그렇지 않으면 아래 오류가 발생합니다.











    파이프라인 결과:-






    아티팩트에 게시된 비밀 텍스트 파일:-

















    비밀 텍스트 파일 다운로드 및 보기:-








    비밀 텍스트 파일의 출력 형식은 [비밀 이름]:[비밀 값]입니다.

    좋은 웹페이지 즐겨찾기