Jenkins의 Secret Text를 사용하여 Azure API Key를 숨기면서 az 명령을 실행합니다.

5251 단어 AzureJenkins
이전에는 Azure CLI 명령을 docker run과 동시에 실행하고 실행이 끝나면 컨테이너를 버립니다.이라는 기사를 작성하여 Azure CLI를 Docker 이미지화했습니다.

이 Docker 이미지를 사용하여 Jenkins에서 VM을 시작/중지하고 싶었지만 Azure 서비스 프린시 펄의 Token과 응용 프로그램 ID를 어떻게 은폐하는지 고민했습니다.

Jenkins Secret Text가 매우 사용하기 쉽기 때문에 소개하고 싶습니다.

Azure를 예로 들었지만,이 메커니즘은 무엇이든 사용할 수 있습니다.

환경


  • Jenkins : 2.150.1

  • Azure CLI Docker 이미지 실행 방법


  • 다음과 같은 cmdlet에서 실행합니다.
  • $ docker run --rm -e AZURE_APPLICATION_ID=[Your Application ID] \
                      -e AZURE_SECRET=[Your Secret] \
                      -e AZURE_TENANT_ID=[Your Tenant ID] \
                      -e CMD="/usr/local/bin/az vm start -g [ResourceGroup] -n [VM Name]" azurecli:v1.0
    

    여기의 Secret 등을 어떻게든 은폐하고 싶네요.

    Jenkins 환경 변수로 가능합니까?


  • Jenkins 관리 → 시스템 설정 → 전역 속성에서 환경 변수를 설정할 수 있습니다.


  • Jenkins 작업에서 갑자기 $ {AZURE_SECRET}과 같은 형태로 사용할 수 있기 때문에 매우 편리하지만 두 가지 문제점이있었습니다.
  • Jenkins를 여러 사람이 사용하는 경우 누구나 키를 사용할 수 있으며 설정 값이 둥글게 보입니다
  • 작업 실행 후 콘솔 출력에 설정 값이 원으로 보입니다

  • 따라서이 방법은 채택되지 않습니다.

    Jenkins 자격증명



    Jenkins 자격증명을 활용하여 앞서 두 가지 문제점을 해결할 수 있었습니다.
    각각 어떻게 대책했는지 봅니다.

    Jenkins를 여러 사람이 사용하는 경우 누구나 키를 사용할 수 있으며 설정 값이 둥글게 보입니다.


  • 우선은 적당하게 폴더를 만듭니다.

  • 만든 폴더 아래에서 자격 증명을 선택합니다.
  • [Stores scoped to] 부분에서 [Add credentials]를 선택합니다.
  • 유형으로 [Secret text]를 선택하고 먼저 AZURE_APPLICATION_ID를 설정하고 저장합니다.
  • 같은 요령으로 AZURE_SECRET와 AZURE_TENANT_ID의 Secret Text도 작성합니다.
  • 이제 이 세 가지 보안은 이 폴더에 연결된 자격 증명입니다.
  • Role-based Authorization Strategy 플러그인 을 사용하여 이 폴더에 액세스할 수 있는 사람을 좁히면 누구나 키를 사용할 수 있다는 문제가 해결되었습니다.

  • 작업 실행 후 콘솔 출력에 설정 값이 원으로 보입니다.


  • 이제 방금 만든 폴더 아래에 작업을 만듭니다.
  • 빌드 환경 → 비밀 텍스트 또는 비밀 파일 사용을 선택합니다.
  • 바인딩이라는 항목이 추가되므로 비밀 텍스트를 선택합니다.
  • 방금 만든 인증 정보를 선택할 수 있으므로 선택합니다. 변수명은 임의의 값으로 좋지만 알기 쉬운 것을 붙이자.
  • 같은 요령으로 AZURE_SECRET와 AZURE_TENANT_ID의 비밀 텍스트도 작성합니다.
  • 빌드에서 셸 실행을 선택합니다.
  • 방금 설정한 비밀 텍스트는 쉘 변수의 형식으로 사용할 수 있습니다.
  • 작업을 저장하고 실행합니다.
  • 콘솔 출력 화면을 보면, 설정한 Secret 정보가 숨겨져 있는 것을 알 수 있습니다.
  • 좋은 웹페이지 즐겨찾기