Azure Pipelines에서 Azure Key Vault 비밀 사용

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Azure Key Vault를 사용하면 개발자가 API 키, 자격 증명 또는 인증서와 같은 중요한 정보를 안전하게 저장하고 관리할 수 있습니다. Azure Key Vault 서비스는 자격 증명 모음 및 관리형 HSM(하드웨어 보안 모듈) 풀의 두 가지 유형의 컨테이너를 지원합니다. 자격 증명 모음은 소프트웨어 및 HSM 지원 키, 비밀 및 인증서를 모두 저장할 수 있지만 관리형 HSM 풀은 HSM 지원 키만 지원합니다.

이 자습서에서는 다음을 수행하는 방법을 배우게 됩니다.

  • Azure CLI를 사용하여 Azure Key Vault 만들기
  • 비밀을 추가하고 Azure Key Vault에 대한 액세스 구성
  • 파이프라인에서 비밀 사용

필수 조건

리포지토리 만들기

사용자 고유의 리포지토리가 이미 있는 경우 다음 단계를 진행합니다. 그렇지 않으면 아래 지침에 따라 리포지토리를 초기화합니다. 이 Azure 리포지토리를 사용하여 파이프라인을 설정합니다.

  1. Azure DevOps 조직에 로그인한 다음 프로젝트로 이동합니다.

  2. 리포지토리를 선택한 다음 초기화를 선택하여 추가 정보로 기본 분기를 초기화합니다.

    추가 정보 파일을 사용하여 리포지토리를 초기화하는 방법을 보여 주는 스크린샷

Azure Key Vault 만들기

  1. Azure Portal에 로그인한 다음 오른쪽 위 모서리에서 Cloud Shell 단추를 선택합니다.

  2. 계정과 연결된 Azure 구독이 둘 이상인 경우 아래 명령을 사용하여 기본 구독을 지정합니다. 구독 목록을 생성하는 데 사용할 az account list 수 있습니다.

    az account set --subscription <YOUR_SUBSCRIPTION_NAME_OR_ID>
    
  3. 기본 Azure 지역을 설정합니다. 사용 가능한 지역 목록을 생성하는 데 사용할 az account list-locations 수 있습니다.

    az config set defaults.location=<YOUR_REGION>
    
  4. 새 리소스 그룹 만들기

    az group create --name <YOUR_RESOURCE_GROUP_NAME>
    
  5. 새 Azure Key Vault를 만듭니다.

    az keyvault create \
      --name <YOUR_KEY_VAULT_NAME> \
      --resource-group <YOUR_RESOURCE_GROUP_NAME>
    
  6. Azure Key Vault에 새 비밀을 만듭니다.

    az keyvault secret set \
      --name <YOUR_SECRET_NAME> \
      --value <YOUR_ACTUAL_SECRET> \
      --vault-name <YOUR_KEY_VAULT_NAME>
    

키 자격 증명 모음 액세스 정책 설정

Azure Key Vault에 액세스하려면 Azure Pipelines에 대한 액세스 권한을 부여하도록 서비스 주체를 설정해야 합니다. 이 가이드에 따라 Azure CLI를 사용하여 서비스 주체를 만든 다음 이 섹션의 다음 단계를 계속 진행합니다.

  1. Azure Portal이동한 다음 검색 창을 사용하여 이전에 만든 키 자격 증명 모음을 찾습니다.

    Azure Key Vault를 검색하는 방법을 보여 주는 스크린샷

  2. 액세스 정책을 선택한 다음 만들기를 선택하여 새 정책을 만듭니다.

  3. 비밀 권한에서 가져오기목록을 선택합니다.

  4. 다음을 선택한 다음, 이전에 만든 서비스 주체를 선택합니다. 서비스 주체는 Azure 리소스에 대한 액세스를 요청하는 애플리케이션 또는 서비스를 나타내는 개체입니다.

  5. 다음을 선택한 다음, 다음을 한 번 더 선택합니다.

  6. 정책을 검토한 다음 완료되면 만들기를 선택합니다.

참고 항목

Azure RBAC(Azure 역할 기반 액세스 제어)를 사용하는 Azure Key Vault는 지원되지 않습니다.

역할 할당 추가

다음 단계에서는 서비스 주체를 사용하여 ARM 서비스 연결을 만듭니다. 연결을 확인하려면 서비스 주체 에게 구독 수준에서 읽기 권한을 부여해야 합니다.

  1. Azure Portal로 이동

  2. 왼쪽 탐색 패널에서 구독을 선택한 다음 구독을 찾아 선택합니다.

  3. 액세스 제어를 선택한 다음 역할 할당 추가를>선택합니다.

    구독 수준에서 새 역할 할당을 추가하는 방법을 보여 주는 스크린샷

  4. 역할 탭에서 읽기 프로그램을 선택한 다음, 다음을 선택합니다.

  5. 사용자, 그룹 또는 서비스 주체를 선택한 다음 멤버 선택을 선택합니다.

    Azure에서 역할 할당에 멤버를 추가하는 방법을 보여 주는 스크린샷

  6. 검색 창을 사용하여 서비스 주체를 찾은 다음 "+" 기호를 선택하여 선택한 다음 선택 단추를 클릭합니다.

  7. 검토 + 할당을 선택하고 설정을 검토한 다음 검토 + 할당을 다시 한 번 선택하여 선택 사항을 확인하고 역할 할당을 추가합니다.

서비스 연결 만들기

  1. Azure DevOps 조직에 로그인한 다음 프로젝트로 이동합니다.

  2. 프로젝트 설정>서비스 연결을 선택한 다음 새 서비스 연결을 선택하여 새 서비스 연결을 만듭니다.

  3. Azure Resource Manager를 선택한 다음, 다음을 선택합니다.

  4. 서비스 주체(수동)를 선택한 다음, 다음을 선택합니다.

  5. 범위 수준에 대한 Azure Cloud for Environment구독선택한 다음, 구독 ID와 구독 이름을 입력합니다.

  6. 서비스 주체를 만들 때 얻은 정보로 다음 필드를 입력한 다음, 완료되면 확인을 선택합니다.

    • 서비스 주체 ID: 서비스 주체 appId입니다.
    • 서비스 주체 키: 서비스 주체 암호입니다.
    • 테넌트 ID: 서비스 주체 테넌트입니다.
  7. 확인에 성공하면 서비스 연결에 대한 이름 및 설명(선택 사항)을 제공한 다음 모든 파이프라인 검사box에 액세스 권한 부여 권한을 검사.

  8. 확인을 선택하고 완료되면 저장 합니다.

    서비스 주체를 사용하여 새 Azure Resource Manager 서비스 연결을 만드는 방법을 보여 주는 스크린샷

  1. Azure DevOps 컬렉션에 로그인한 다음 프로젝트로 이동합니다.

  2. 프로젝트 설정>서비스 연결 새 서비스 연결을> 선택한 다음, Azure Resource Manager를 선택하여 새 ARM 서비스 연결을 만듭니다.

  3. 서비스 연결에 이름을 지정한 다음, 범위 수준에 대한 Azure Cloud for Environment구독선택합니다.

  4. 구독 ID 및 구독 이름을 입력합니다.

  5. 서비스 주체를 만들 때 얻은 정보로 다음 필드를 채운 다음, 완료되면 연결 확인을 선택합니다.

    • 서비스 주체 클라이언트 ID: 서비스 주체 appId입니다.
    • 서비스 주체 키: 서비스 주체 암호입니다.
    • 테넌트 ID: 서비스 주체 테넌트입니다.
  6. 모든 파이프라인에서 이 연결 검사 사용 허용 상자를 선택한 다음, 완료되면 확인을 선택합니다.

    Azure DevOps Server 2019에서 서비스 주체를 사용하여 새 ARM 서비스 연결을 만드는 방법을 보여 주는 스크린샷

새 파이프라인 만들기

  1. Azure DevOps 조직에 로그인한 다음 프로젝트로 이동합니다.

  2. 파이프라인을 선택한 다음 새 파이프라인을 선택합니다.

  3. 클래식 편집기 사용을 선택하여 클래식 파이프라인을 만듭니다.

  4. Azure Repos Git을 선택하고, 리포지토리를 선택하고, 기본 분기, 계속을 선택합니다.

  5. .Net Desktop 파이프라인 템플릿을 선택합니다.

  6. 이 예제에서는 마지막 두 작업만 필요합니다. Ctrl 키를 누른 다음 처음 5개 작업을 선택하고 마우스 오른쪽 단추를 클릭하고 선택한 작업 제거를 선택하여 삭제합니다.

    여러 파이프라인 작업을 삭제하는 방법을 보여 주는 스크린샷

  7. 새 작업을 추가하려면 선택합니다 + . 명령줄 작업을 검색하고 선택한 다음 추가를 선택하여 파이프라인에 추가합니다. 추가된 후에는 다음과 같이 구성합니다.

    • 표시 이름: 파일 만들기
    • 스크립트: echo $(YOUR_SECRET_NAME) > secret.txt

    명령줄 작업을 구성하는 방법을 보여 주는 스크린샷.

  8. 새 작업을 추가하려면 선택합니다 + . Azure Key Vault 작업을 검색하고 선택한 다음 추가*를 선택하여 파이프라인에 추가합니다. 추가된 후에는 다음과 같이 구성합니다.

    • 표시 이름: Azure Key Vault
    • Azure 구독: 이전에 만든 서비스 주체 서비스 연결 선택
    • 키 자격 증명 모음: 키 자격 증명 모음 선택
    • 비밀 필터: 선택한 키 자격 증명 모음에서 모든 비밀을 다운로드하기 위해 쉼표로 구분된 비밀 이름 목록 또는 나가기 *

    클래식 파이프라인에서 Azure Key Vault 작업을 설정하는 방법을 보여 주는 스크린샷

  9. 파일 복사 작업을 선택하고 다음과 같이 필요한 필드를 채웁니다.

    • 표시 이름: 파일 복사
    • 내용: secret.txt
    • 대상 폴더: $(build.artifactstagingdirectory)

    클래식 파이프라인에서 파일 복사 작업을 설정하는 방법을 보여 주는 스크린샷

  10. 아티팩트 게시 작업을 선택하고 다음과 같이 필요한 필드를 채웁니다.

    • 표시 이름: 아티팩트 게시
    • 게시 경로: $(build.artifactstagingdirectory)
    • 아티팩트 이름: drop
    • 아티팩트 게시 위치: Azure Pipelines

    클래식 파이프라인에서 아티팩트 게시 작업을 설정하는 방법을 보여 주는 스크린샷

  11. 저장 및 큐를 선택한 다음 실행을 선택하여 파이프라인을 실행합니다.

  12. 파이프라인 실행이 완료되면 파이프라인 요약으로 돌아가서 게시된 아티팩트 선택

  13. secret.txt 삭제>를 선택하여 게시된 아티팩트 다운로드

    게시된 아티팩트를 다운로드하는 방법을 보여 주는 스크린샷

  14. 방금 다운로드한 텍스트 파일을 열면 텍스트 파일에 Azure Key Vault의 비밀이 포함되어야 합니다.

  1. Azure DevOps 컬렉션에 로그인한 다음 프로젝트로 이동합니다.

  2. 파이프라인을 선택한 다음, 빌드를 선택합니다.

  3. 새 빌드 파이프라인>선택합니다.

  4. 클래식 편집기 사용을 선택하여 새 클래식 빌드 파이프라인을 만듭니다.

  5. Azure Repos Git을 선택하고 리포지토리 및 기본 분기 선택한 다음 계속을 선택합니다.

  6. .Net Desktop 파이프라인 템플릿을 선택한 다음 적용을 선택합니다.

  7. 이 예제에서는 마지막 두 작업만 필요합니다. Ctrl 키를 누른 다음 처음 5개 작업을 선택하고 마우스 오른쪽 단추를 클릭하고 선택한 작업 제거를 선택하여 삭제합니다.

    Azure DevOps Server 2019의 클래식 파이프라인에서 여러 파이프라인 작업을 삭제하는 방법을 보여 주는 스크린샷

  8. 새 작업을 추가하려면 선택합니다 + . 명령줄 작업을 검색하고 선택한 다음 추가를 선택하여 파이프라인에 추가합니다. 추가된 후에는 다음과 같이 구성합니다.

    • 표시 이름: 파일 만들기
    • 스크립트: echo $(YOUR_SECRET_NAME) > secret.txt

    Azure DevOps Server 2019의 클래식 파이프라인에서 명령줄 작업을 구성하는 방법을 보여 주는 스크린샷

  9. 새 작업을 추가하려면 선택합니다 + . Azure Key Vault 작업을 검색하고 선택한 다음 추가*를 선택하여 파이프라인에 추가합니다. 추가된 후에는 다음과 같이 구성합니다.

    • 표시 이름: Azure Key Vault
    • Azure 구독: 이전에 만든 서비스 주체 서비스 연결 선택
    • 키 자격 증명 모음: 키 자격 증명 모음 선택
    • 비밀 필터: 선택한 키 자격 증명 모음에서 모든 비밀을 다운로드하기 위해 쉼표로 구분된 비밀 이름 목록 또는 나가기 *

    Azure DevOps Server 2019의 클래식 파이프라인에서 Azure Key Vault 작업을 설정하는 방법을 보여 주는 스크린샷

  10. 파일 복사 작업을 선택하고 다음과 같이 필요한 필드를 채웁니다.

    • 표시 이름: 파일 복사
    • 내용: secret.txt
    • 대상 폴더: $(build.artifactstagingdirectory)

    Azure DevOps Server 2019의 클래식 파이프라인에서 파일 복사 작업을 설정하는 방법을 보여 주는 스크린샷

  11. 아티팩트 게시 작업을 선택하고 다음과 같이 필요한 필드를 채웁니다.

    • 표시 이름: 아티팩트 게시
    • 게시 경로: $(build.artifactstagingdirectory)
    • 아티팩트 이름: drop
    • 아티팩트 게시 위치: Azure Pipelines

    Azure DevOps Server 2019의 클래식 파이프라인에서 아티팩트 게시 작업을 설정하는 방법을 보여 주는 스크린샷

  12. 저장 및 큐를 선택한 다음 저장 및 큐를 선택하여 빌드 파이프라인을 실행합니다.

  13. 파이프라인 실행이 완료되면 아티팩트 및 삭제를 선택합니다.

  14. 새로 열린 창에서 secret.txt 삭제>를 선택하고 줄임표 아이콘(...)을 선택한 다음 다운로드를 선택하여 텍스트 파일을 저장합니다.

  15. 방금 다운로드한 텍스트 파일을 엽니다. Azure Key Vault의 비밀이 포함되어야 합니다.

Warning

이 자습서는 교육용으로만 제공됩니다. 보안 모범 사례 및 비밀로 안전하게 작업하는 방법은 Azure Key Vault를 사용하여 서버 앱에서 비밀 관리를 참조하세요.

리소스 정리

다음 단계에 따라 만든 리소스를 삭제합니다.

  1. 프로젝트를 호스트할 새 조직을 만든 경우 조직을 삭제하고, 그렇지 않으면 프로젝트를 삭제하는 방법을 참조하세요.

  2. 이 자습서에서 만든 모든 Azure 리소스는 단일 리소스 그룹에서 호스트됩니다. 다음 명령을 실행하여 리소스 그룹 및 모든 리소스를 삭제합니다.

    az group delete --name <YOUR_RESOURCE_GROUP_NAME>
    

FAQ

Q: "사용자 또는 그룹에 비밀 목록 권한이 없습니다."라는 오류가 발생합니다. 어떻게 해야 하나요?

A: 사용자 또는 그룹에 키 자격 증명 모음에 대한 비밀 목록 권한이 없음을 나타내는 오류가 발생하는 경우 다음 명령을 실행하여 Azure Key Vault의 키 또는 비밀에 액세스하도록 애플리케이션에 권한을 부여합니다.

$ErrorActionPreference="Stop";
$Credential = Get-Credential;
Connect-AzAccount -SubscriptionId <YOUR_SUBSCRIPTION_ID> -Credential $Credential;
$spn=(Get-AzureRmADServicePrincipal -SPN <YOUR_SERVICE_PRINCIPAL_ID>);
$spnObjectId=$spn.Id;
Set-AzureRmKeyVaultAccessPolicy -VaultName key-vault-tutorial -ObjectId $spnObjectId -PermissionsToSecrets get,list;