연습 - 워크로드 ID 만들기

완료됨

워크플로를 사용하여 장난감 회사의 웹 사이트를 배포하려면 워크플로가 Azure에 인증하도록 설정해야 합니다. 이 연습에서는 다음을 수행합니다.

  • 웹 사이트에 대한 리소스 그룹을 만듭니다.
  • Microsoft Entra 워크로드 ID를 만들고 리소스 그룹에 대한 액세스 권한을 부여합니다.
  • GitHub 비밀을 만들어 워크로드 ID를 사용하도록 워크플로를 준비합니다.

이 연습을 수행하려면 Microsoft Entra 디렉터리에서 애플리케이션을 만들 수 있는 권한이 있어야 합니다. 현재 Azure 계정으로 이 요구 사항을 충족할 수 없는 경우 평가판을 통해 새 Azure 구독 및 테넌트를 만들 수 있습니다.

중요

이 모듈의 마지막 연습에는 중요한 정리 단계가 포함되어 있습니다. 이 모듈을 완료하지 않더라도 정리 단계를 수행해야 합니다.

Azure에 로그인

Azure에서 워크로드 ID 작업을 수행하려면 Visual Studio Code 터미널에서 Azure 계정에 로그인합니다. Azure CLI 도구를 설치했는지 확인하세요.

  1. 터미널 메뉴에서 새 터미널을 선택합니다. 터미널 창은 일반적으로 화면의 아래쪽 절반에서 열립니다.

    기본 셸은 일반적으로 터미널 창 오른쪽에 표시된 대로 pwsh입니다.

    pwsh가 셸 옵션으로 표시된 Visual Studio Code 터미널 창의 스크린샷입니다.

  2. 프로필 시작 드롭다운을 선택한 다음 Azure Cloud Shell(Bash)을 선택합니다.

    Visual Studio Code 터미널 창의 스크린샷입니다. 터미널 셸 드롭다운 목록과 Azure Cloud Shell(Bash) 메뉴 항목이 표시됩니다.

    새로운 셸이 열립니다.

Azure CLI를 사용하여 Azure에 로그인

  1. Visual Studio Code 터미널에서 다음 명령을 실행하여 Azure에 로그인합니다.

    az login
    
  2. 열리는 브라우저에서 Azure 계정에 로그인합니다.

이 템플릿을 Azure에 배포하려면 Visual Studio Code 터미널에서 Azure 계정에 로그인합니다. Azure PowerShell을 설치했는지 확인하고 샌드박스를 활성화하는 데 사용한 동일한 계정으로 로그인합니다.

  1. 터미널 메뉴에서 새 터미널을 선택합니다. 터미널 창은 일반적으로 화면의 아래쪽 절반에서 열립니다.

    기본 셸은 일반적으로 터미널 창 오른쪽에 표시된 대로 pwsh입니다.

    pwsh가 셸 옵션으로 표시된 Visual Studio Code 터미널 창의 스크린샷입니다.

  2. 프로필 시작 드롭다운 목록을 선택한 다음 Azure Cloud Shell(PowerShell)을 선택합니다.

    Visual Studio Code 터미널 창의 스크린샷입니다. 터미널 셸 드롭다운 목록과 Azure Cloud Shell(PowerShell) 메뉴 항목이 표시됩니다.

    새로운 셸이 열립니다.

Azure PowerShell을 사용하여 Azure에 로그인

  1. Visual Studio Code 터미널에서 다음 명령을 실행하여 Azure에 로그인합니다.

    Connect-AzAccount
    
  2. 열리는 브라우저에서 Azure 계정에 로그인합니다.

워크로드 ID 만들기

이 모듈에서는 사용할 워크플로에 대한 워크로드 ID를 만듭니다. 워크로드 ID를 사용하여 Azure 배포 워크플로 인증 모듈은 작동 방식을 비롯하여 워크로드 ID에 대한 자세한 설명은 물론 역할을 만들고 할당하고 관리하는 방법도 제공합니다.

워크로드 ID를 만들기 위해 Azure CLI 명령은 jq를 사용하여 JSON 출력의 데이터를 구문 분석합니다. jq가 설치되지 않은 경우 Azure Cloud Shell에서 Bash를 사용하여 워크로드 ID, 리소스 그룹 및 역할 할당을 만들고, GitHub 비밀을 준비할 수 있습니다.

  1. 다음 코드를 실행하여 GitHub 사용자 이름 및 리포지토리 이름에 대한 변수를 정의합니다. mygithubuser를 이전 연습 단원에서 적어 둔 GitHub 사용자 이름으로 바꿔야 합니다.

    githubOrganizationName='mygithubuser'
    githubRepositoryName='toy-website-workflow'
    
  2. 다음 코드를 실행하여 워크로드 ID를 만들고 GitHub 리포지토리와 연결합니다.

    applicationRegistrationDetails=$(az ad app create --display-name 'toy-website-workflow')
    applicationRegistrationObjectId=$(echo $applicationRegistrationDetails | jq -r '.id')
    applicationRegistrationAppId=$(echo $applicationRegistrationDetails | jq -r '.appId')
    
    az ad app federated-credential create \
       --id $applicationRegistrationObjectId \
       --parameters "{\"name\":\"toy-website-workflow\",\"issuer\":\"https://token.actions.githubusercontent.com\",\"subject\":\"repo:${githubOrganizationName}/${githubRepositoryName}:ref:refs/heads/main\",\"audiences\":[\"api://AzureADTokenExchange\"]}"
    
  1. 다음 코드를 실행하여 GitHub 사용자 이름 및 리포지토리 이름에 대한 변수를 정의합니다. mygithubuser를 이전 연습 단원에서 적어 둔 GitHub 사용자 이름으로 바꿔야 합니다.

    $githubOrganizationName = 'mygithubuser'
    $githubRepositoryName = 'toy-website-workflow'
    
  2. 다음 코드를 실행하여 워크로드 ID를 만들고 GitHub 리포지토리와 연결합니다.

    $applicationRegistration = New-AzADApplication -DisplayName 'toy-website-workflow'
    
    New-AzADAppFederatedCredential `
       -Name 'toy-website-workflow' `
       -ApplicationObjectId $applicationRegistration.Id `
       -Issuer 'https://token.actions.githubusercontent.com' `
       -Audience 'api://AzureADTokenExchange' `
       -Subject "repo:$($githubOrganizationName)/$($githubRepositoryName):ref:refs/heads/main"
    

Azure에서 리소스 그룹 만들기 및 워크로드 ID 액세스 권한 부여

새 리소스 그룹을 만들고 워크로드 ID에 대한 액세스 권한을 부여하려면 Visual Studio Code 터미널에서 다음 Azure CLI 명령을 실행합니다.

resourceGroupResourceId=$(az group create --name ToyWebsite --location westus3 --query id --output tsv)

az ad sp create --id $applicationRegistrationObjectId
az role assignment create \
   --assignee $applicationRegistrationAppId \
   --role Contributor \
   --scope $resourceGroupResourceId

리소스 그룹을 만들고 워크로드 ID에 대한 액세스 권한을 부여하려면 Visual Studio Code 터미널에서 다음 Azure PowerShell 명령을 실행합니다.

$resourceGroup = New-AzResourceGroup -Name ToyWebsite -Location westus3

New-AzADServicePrincipal -AppId $applicationRegistration.AppId
New-AzRoleAssignment `
   -ApplicationId $($applicationRegistration.AppId) `
   -RoleDefinitionName Contributor `
   -Scope $resourceGroup.ResourceId

GitHub 비밀 준비

다음 코드를 실행하여 GitHub 비밀로 만드는 데 필요한 값을 표시합니다.

echo "AZURE_CLIENT_ID: $applicationRegistrationAppId"
echo "AZURE_TENANT_ID: $(az account show --query tenantId --output tsv)"
echo "AZURE_SUBSCRIPTION_ID: $(az account show --query id --output tsv)"
$azureContext = Get-AzContext
Write-Host "AZURE_CLIENT_ID: $($applicationRegistration.AppId)"
Write-Host "AZURE_TENANT_ID: $($azureContext.Tenant.Id)"
Write-Host "AZURE_SUBSCRIPTION_ID: $($azureContext.Subscription.Id)"

GitHub 비밀 만들기

리소스 그룹 및 워크로드 ID를 만들었습니다. 다음으로 워크플로가 워크로드 ID를 사용하여 로그인할 수 있도록 GitHub Actions의 몇 가지 비밀을 만듭니다.

  1. 브라우저에서 GitHub 리포지토리로 이동합니다.

  2. 설정>비밀 및 변수>작업을 선택합니다.

  3. 새 리포지토리 비밀을 선택합니다.

    ‘리포지토리 비밀 만들기’ 단추가 강조 표시되어 있으며 ‘비밀’ 페이지를 보여주는 GitHub 인터페이스의 스크린샷

  4. 비밀의 이름을 AZURE_CLIENT_ID로 지정합니다.

  5. 필드에 터미널 출력의 첫 번째 줄의 GUID를 붙여넣습니다. 값에 AZURE_CLIENT_ID, 콜론 또는 공백을 포함하지 마세요.

  6. 비밀 추가를 선택합니다.

    이름과 값이 작성되어 있고 ‘비밀 추가’ 단추가 강조 표시되어 있으며 ‘새 비밀’ 페이지를 보여주는 GitHub 인터페이스의 스크린샷

  7. 이 프로세스를 반복하여 터미널 출력의 해당 필드에서 값을 복사해 AZURE_TENANT_IDAZURE_SUBSCRIPTION_ID에 대한 비밀을 만듭니다.

  8. 이제 비밀 목록에 세 비밀이 모두 표시되는지 확인합니다.

    비밀 목록을 보여주는 GitHub 인터페이스의 스크린샷