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 구독 아직 없는 경우 Azure 계정을 무료로 만듭니다.
샘플 코드 가져오기
사용자 고유의 리포지토리가 이미 있는 경우 다음 단계를 진행합니다. 그렇지 않으면 다음 샘플 리포지토리를 Azure 리포지토리로 가져옵니다.
Azure DevOps 조직에 로그인한 다음 프로젝트로 이동합니다.
리포지토리를 선택한 다음 가져오기를 선택합니다. 다음 리포지토리 URL을 입력한 다음 가져오기를 선택합니다.
https://github.com/MicrosoftDocs/pipelines-dotnet-core
Azure Key Vault 만들기
Azure Portal에 로그인한 다음 오른쪽 위 모서리에서 Cloud Shell 단추를 선택합니다.
계정과 연결된 Azure 구독이 둘 이상인 경우 아래 명령을 사용하여 기본 구독을 지정합니다. 구독 목록을 생성하는 데 사용할
az account list
수 있습니다.az account set --subscription <YOUR_SUBSCRIPTION_NAME_OR_ID>
기본 Azure 지역을 설정합니다. 사용 가능한 지역 목록을 생성하는 데 사용할
az account list-locations
수 있습니다.az config set defaults.location=<YOUR_REGION>
새 리소스 그룹 만들기
az group create --name <YOUR_RESOURCE_GROUP_NAME>
새 Azure Key Vault를 만듭니다.
az keyvault create \ --name <YOUR_KEY_VAULT_NAME> \ --resource-group <YOUR_RESOURCE_GROUP_NAME>
Azure Key Vault에 새 비밀을 만듭니다.
az keyvault secret set \ --name <YOUR_SECRET_NAME> \ --value <YOUR_ACTUAL_SECRET> \ --vault-name <YOUR_KEY_VAULT_NAME>
인증 설정
사용자 할당 관리 ID 만들기
Azure Portal에 로그인한 다음 검색 창에서 관리 ID 서비스를 검색합니다.
만들기를 선택하고 다음과 같이 필요한 필드를 채웁니다.
- 구독: 드롭다운 메뉴에서 구독을 선택합니다.
- 리소스 그룹: 기존 리소스 그룹을 선택하거나 새 리소스 그룹을 만듭니다.
- 지역: 드롭다운 메뉴에서 지역을 선택합니다.
- 이름: 사용자 할당 관리 ID의 이름을 입력합니다.
완료되면 검토 + 만들기를 선택합니다.
배포가 완료되면 리소스로 이동을 선택한 다음, 향후 단계에서 사용할 구독 및 클라이언트 ID 값을 복사합니다.
설정>속성으로 이동하고 나중에 사용할 수 있도록 관리 ID의 테넌트 ID 값을 복사합니다.
키 자격 증명 모음 액세스 정책 설정
Azure Portal로 이동하고 검색 창을 사용하여 이전에 만든 키 자격 증명 모음을 찾습니다.
액세스 정책을 선택한 다음 만들기를 선택하여 새 정책을 추가합니다.
비밀 사용 권한에서 가져오기 및 목록 확인란을 선택합니다.
다음을 선택한 다음 이전에 만든 관리 ID의 클라이언트 ID를 검색 창에 붙여넣습니다. 관리 ID를 선택합니다.
다음을 선택한 다음, 다음을 한 번 더 선택합니다.
새 정책을 검토한 다음, 완료되면 만들기를 선택합니다.
서비스 연결 만들기
Azure DevOps 조직에 로그인한 다음 프로젝트로 이동합니다.
프로젝트 설정>서비스 연결을 선택한 다음 새 서비스 연결을 선택하여 새 서비스 연결을 만듭니다.
Azure Resource Manager를 선택한 다음, 다음을 선택합니다.
ID 형식의 경우 드롭다운 메뉴에서 관리 ID를 선택합니다.
1단계: 관리 ID 세부 정보의 경우 다음과 같이 필드를 입력합니다.
관리 ID에 대한 구독: 관리 ID가 포함된 구독을 선택합니다.
관리 ID에 대한 리소스 그룹: 관리 ID를 호스팅하는 리소스 그룹을 선택합니다.
관리 ID: 드롭다운 메뉴에서 관리 ID를 선택합니다.
2단계: Azure Scope의 경우 다음과 같이 필드를 입력합니다.
서비스 연결에 대한 범위 수준: 구독을 선택합니다.
서비스 연결에 대한 구독: 관리 ID가 액세스할 구독을 선택합니다.
서비스 연결에 대한 리소스 그룹: (선택 사항) 관리 ID 액세스를 하나의 리소스 그룹으로 제한하도록 지정합니다.
3단계: 서비스 연결 세부 정보:
서비스 연결 이름: 서비스 연결의 이름을 제공합니다.
서비스 관리 참조: (선택 사항) ITSM 데이터베이스의 컨텍스트 정보입니다.
설명: (선택 사항) 설명을 추가합니다.
보안에서 모든 파이프라인에서 이 서비스 연결을 사용할 수 있도록 모든 파이프라인에 대한 액세스 권한 부여 확인란을 선택합니다. 이 옵션을 선택하지 않으면 이 서비스 연결을 사용하는 각 파이프라인에 대한 액세스 권한을 수동으로 부여해야 합니다.
저장을 선택하여 서비스 연결의 유효성을 검사하고 만듭니다.
파이프라인에서 키 자격 증명 모음 비밀에 액세스
Azure DevOps 조직에 로그인한 다음 프로젝트로 이동합니다.
파이프라인을 선택한 다음 새 파이프라인을 선택합니다.
YAML(Azure Repos Git)을 선택한 다음, 리포지토리를 선택합니다.
시작 파이프라인 템플릿을 선택합니다.
기본 파이프라인에는 에코 명령을 실행하는 스크립트가 포함됩니다. 이러한 항목은 필요하지 않으므로 삭제할 수 있습니다.
자리 표시자를 이전에 만든 서비스 연결의 이름과 키 자격 증명 모음 이름으로 바꾸는 AzureKeyVault 작업을 추가합니다. YAML 파일은 다음 코드 조각과 유사해야 합니다.
trigger: - main pool: vmImage: ubuntu-latest steps: - task: AzureKeyVault@2 displayName: Azure Key Vault inputs: azureSubscription: 'SERVICE_CONNECTION_NAME' KeyVaultName: 'KEY_VAULT_NAME' SecretsFilter: '*' RunAsPreJob: false
다음 작업을 추가하여 비밀을 복사하고 게시해 보겠습니다. 이 예제는 데모용으로만 사용되며 프로덕션 환경에서 구현해서는 안 됩니다.
trigger: - main pool: vmImage: ubuntu-latest steps: - task: AzureKeyVault@2 displayName: Azure Key Vault inputs: azureSubscription: 'SERVICE_CONNECTION_NAME' KeyVaultName: 'KEY_VAULT_NAME' SecretsFilter: '*' RunAsPreJob: false - task: CmdLine@2 displayName: Create file inputs: script: 'echo $(SECRET_NAME) > secret.txt' - task: CopyFiles@2 displayName: Copy file inputs: Contents: secret.txt targetFolder: '$(Build.ArtifactStagingDirectory)' - task: PublishBuildArtifacts@1 displayName: Publish Artifact inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)' ArtifactName: 'drop' publishLocation: 'Container'
저장 및 실행을 선택한 다음 다시 한 번 선택하여 변경 내용을 커밋하고 파이프라인을 트리거합니다. Azure 리소스에 대한 파이프라인 액세스를 허용하라는 메시지가 표시되면 허용을 선택 하라는 메시지가 표시될 수 있습니다. 파이프라인을 한 번만 승인하면 됩니다.
로그를 보려면 CmdLine 작업을 선택합니다.
파이프라인 실행이 완료되면 파이프라인 요약으로 돌아가서 게시된 아티팩트 선택
드롭>secret.txt 선택하여 다운로드합니다.
방금 다운로드한 텍스트 파일을 열면 텍스트 파일에 Azure Key Vault의 비밀이 포함되어야 합니다.
Warning
이 자습서는 교육용으로만 제공됩니다. 보안 모범 사례 및 비밀로 안전하게 작업하는 방법은 Azure Key Vault를 사용하여 서버 앱에서 비밀 관리를 참조하세요.
리소스 정리
다음 단계에 따라 만든 리소스를 삭제합니다.
프로젝트를 호스트할 새 조직을 만든 경우 조직을 삭제하고, 그렇지 않으면 프로젝트를 삭제하는 방법을 참조하세요.
이 자습서에서 만든 모든 Azure 리소스는 단일 리소스 그룹에서 호스트됩니다. 다음 명령을 실행하여 리소스 그룹 및 모든 리소스를 삭제합니다.
az group delete --name <YOUR_RESOURCE_GROUP_NAME>
FAQ
Q: "사용자 또는 그룹에 비밀 목록 권한이 없습니다."라는 오류가 발생합니다. 어떻게 해야 하나요?
A: 사용자 또는 그룹에 키 자격 증명 모음에 대한 비밀 목록 권한이 없음을 나타내는 오류가 발생하는 경우 다음 명령을 실행하여 Azure Key Vault의 키 또는 비밀에 액세스하도록 애플리케이션에 권한을 부여합니다.
az account set --subscription <YOUR_SUBSCRIPTION_ID>
az login
$spnObjectId = az ad sp show --id <YOUR_SERVICE_PRINCIPAL_ID>
az keyvault set-policy --name <YOUR_KEY_VAULT_NAME> --object-id $spnObjectId --secret-permissions get list