연습 - 환경 설정

완료됨

중요

이 연습을 수행하려면 사용자의 Azure 구독이 필요하며 요금이 발생할 수 있습니다. Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.

장난감 회사의 웹 사이트 워크플로 작업을 시작하려면 먼저 환경을 구성해야 합니다. 이 섹션에서는 이 모듈의 나머지 부분을 완료할 수 있도록 Azure 및 GitHub 환경을 설정합니다.

이러한 목표를 달성하기 위해 다음 작업을 수행합니다.

  • 이 모듈에 대한 GitHub 리포지토리를 설정합니다.
  • 컴퓨터에 리포지토리를 복제합니다.
  • Azure에서 리소스 그룹을 만듭니다.
  • GitHub에서 비밀을 만듭니다.

GitHub 리포지토리 가져오기

템플릿 리포지토리를 기반으로 새 리포지토리를 만들어 이 모듈의 나머지 부분을 완료하려면 GitHub 리포지토리를 설정합니다. 템플릿 리포지토리에는 이 모듈을 시작하는 데 필요한 파일이 포함되어 있습니다.

이 학습 경로의 모듈은 진행 과정을 구성합니다. 학습을 위해 각 모듈에는 연결된 GitHub 템플릿 리포지토리가 있습니다.

학습 경로에서 이전 모듈을 완료했더라도 다음 지침에 따라 새 리포지토리를 만들고 새 이름을 지정하세요.

템플릿 리포지토리에서 시작

GitHub 리포지토리를 설정하는 템플릿을 실행합니다.

GitHub 사이트에서 다음 단계를 수행하여 템플릿에서 리포지토리를 만듭니다.

  1. 이 템플릿 사용>새 리포지토리 만들기를 선택합니다.

    ‘이 템플릿 사용’ 단추가 강조 표시된 템플릿 리포지토리를 보여주는 GitHub 인터페이스의 스크린샷

  2. 소유자 드롭다운 목록에서 GitHub 사용자 이름을 선택합니다.

  3. 새 프로젝트의 리포지토리 이름(예: toy-website-test)을 입력합니다.

  4. 퍼블릭 옵션을 선택합니다.

    사용자 고유의 리포지토리를 만들 때 프라이빗으로 설정할 수 있습니다. 그러나 이 모듈은 공용 리포지토리 및 GitHub Enterprise 계정에서만 작동하는 GitHub의 일부 기능을 사용합니다.

  5. 리포지토리 만들기를 선택합니다.

    리포지토리 만들기 페이지를 보여주는 GitHub 인터페이스의 스크린샷

중요

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

리포지토리 복제

이제 사용자 계정에 템플릿 리포지토리의 복사본이 있습니다. 작업을 시작할 수 있도록 이 리포지토리를 로컬로 복제합니다.

  1. 코드를 선택하고 복사 아이콘을 선택합니다.

    리포지토리 URL 복사 단추가 강조 표시된 새 리포지토리를 보여주는 GitHub 인터페이스의 스크린샷

  2. Visual Studio Code를 엽니다.

  3. 보기>터미널을 선택하여 Visual Studio Code 터미널 창을 엽니다. 이 창은 일반적으로 화면 하단에 열립니다.

  4. 터미널에서 로컬 컴퓨터의 GitHub 리포지토리를 복제하려는 디렉터리로 이동합니다.

  5. git clone을 입력한 다음 이전에 복사한 다음과 같은 URL을 붙여넣습니다.

    git clone https://github.com/mygithubuser/toy-website-test.git
    
  6. Visual Studio Code 터미널에서 다음 명령을 실행하여 리포지토리 폴더에서 Visual Studio Code를 다시 엽니다.

    code -r toy-website-test
    

Azure에 로그인

Azure에서 리소스 그룹을 작업하려면 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 만들기

다음으로, 배포 워크플로를 위해 Microsoft Entra ID에서 워크로드 ID를 만듭니다.

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

  1. 다음 코드를 실행하여 GitHub 사용자 이름 및 리포지토리 이름에 대한 변수를 정의합니다. <myGithubUser>를 이전 연습 단원에서 적어 둔 GitHub 사용자 이름으로 바꿔야 합니다. 또한 올바른 GitHub 리포지토리 이름을 지정했는지 확인합니다.

    githubOrganizationName='<myGithubUser>'
    githubRepositoryName='toy-website-test'
    
  2. 배포 워크플로에 대한 워크로드 ID를 만듭니다. 이 모듈의 뒷부분에 나오는 연습에 대비하기 위해 두 개의 페더레이션된 자격 증명을 만듭니다.

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

    $githubOrganizationName = '<myGithubUser>'
    $githubRepositoryName = 'toy-website-test'
    
  2. 배포 워크플로에 대한 워크로드 ID를 만듭니다. 이 모듈의 뒷부분에 나오는 연습에 대비하기 위해 두 개의 페더레이션된 자격 증명을 만듭니다.

    $applicationRegistration = New-AzADApplication -DisplayName 'toy-website-test'
    New-AzADAppFederatedCredential `
       -Name 'toy-website-test' `
       -ApplicationObjectId $applicationRegistration.Id `
       -Issuer 'https://token.actions.githubusercontent.com' `
       -Audience 'api://AzureADTokenExchange' `
       -Subject "repo:$($githubOrganizationName)/$($githubRepositoryName):environment:Website"
    
    New-AzADAppFederatedCredential `
       -Name 'toy-website-test-branch' `
       -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 ToyWebsiteTest --location westus3 --query id --output tsv)

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

Visual Studio Code 터미널에서 다음 Azure PowerShell 명령을 실행합니다.

$resourceGroup = New-AzResourceGroup -Name ToyWebsiteTest -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 인터페이스의 스크린샷