연습 - 배포에 대한 서비스 주체 권한 부여

완료됨

이전 연습에서는 웹 사이트의 배포 파이프라인에 대한 서비스 주체를 만들고 해당 키를 사용하여 로그인할 수 있는지 테스트했습니다. 이제 서비스 주체에 Azure 환경에 대한 액세스 권한을 부여할 준비가 되었습니다. 이 연습에서는 서비스 주체에 대한 역할 할당을 만들고, 서비스 주체를 사용하여 Bicep 파일을 배포합니다.

프로세스 중에 다음을 수행합니다.

  • 귀하의 사용자 계정을 사용하여 로그인합니다.
  • 회사 웹 사이트에 대한 리소스 그룹을 만듭니다.
  • 서비스 주체가 리소스 그룹에 리소스를 배포할 수 있도록 역할 할당을 만듭니다.
  • 서비스 주체로 로그인하고 회사의 웹 사이트 리소스를 만드는 Bicep 파일을 배포합니다.
  • 배포를 확인합니다.
  • 리소스 그룹 및 서비스 주체를 정리합니다.

귀하의 사용자 계정으로 로그인

이전 연습에서는 서비스 주체를 사용하여 로그인한 후 로그아웃했습니다. 이 연습의 다음 단계를 따를 수 있도록 귀하의 사용자 계정으로 다시 로그인해야 합니다.

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

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

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

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

리소스 그룹 만들기

이제 장난감 회사의 웹 사이트 리소스를 포함할 리소스 그룹을 만듭니다.

  1. Visual Studio Code 터미널에서 이 Azure CLI 명령을 실행하여 리소스 그룹을 만듭니다.

    az group create --name ToyWebsite --location eastus
    
  2. 이전 명령의 JSON 출력을 살펴보세요. 여기에는 리소스 그룹의 ID인 id 속성이 포함됩니다. 이를 안전한 곳에 복사하세요. 곧 이를 사용하게 될 것입니다.

  1. Visual Studio Code 터미널에서 이 Azure PowerShell 명령을 실행하여 리소스 그룹을 만듭니다.

    New-AzResourceGroup -Name ToyWebsite -Location eastus
    
  2. 이전 명령의 출력을 살펴보세요. 여기에는 리소스 그룹의 ID인 ResourceId 속성이 포함됩니다. 이를 안전한 곳에 복사하세요. 곧 이를 사용하게 될 것입니다.

역할 할당 만들기

웹 사이트의 배포 파이프라인에 대해 다음 세부 정보를 사용하여 역할 할당을 만들기로 결정합니다.

  • 담당자: 이전 연습에서 만든 서비스 주체입니다.
  • 역할: 참가자 기본 제공 역할입니다.
  • 범위: 이전 단계에서 만든 리소스 그룹입니다.

Visual Studio Code 터미널에서 다음 Azure CLI 명령을 실행하여 역할 할당을 만듭니다. 자리 표시자를 이전에 복사한 값으로 바꿉니다.

az role assignment create \
  --assignee APPLICATION_ID \
  --role Contributor \
  --scope RESOURCE_GROUP_ID \
  --description "The deployment pipeline for the company's website needs to be able to create resources within the resource group."

Visual Studio Code 터미널에서 다음 Azure CLI 명령을 실행하여 역할 할당을 만듭니다. 자리 표시자를 이전에 복사한 값으로 바꿉니다.

New-AzRoleAssignment `
  -ApplicationId APPLICATION_ID `
  -RoleDefinitionName Contributor `
  -Scope RESOURCE_GROUP_ID `
  -Description "The deployment pipeline for the company's website needs to be able to create resources within the resource group."

Bicep 파일 만들기

이전에 웹 사이트의 리소스를 배포하는 Bicep 파일을 만들었습니다. 여기서는 서비스 주체를 사용하여 테스트할 수 있도록 이 파일을 저장합니다.

  1. main.bicep이라는 새 파일을 만듭니다.

  2. main.bicep 파일에 다음 콘텐츠를 추가합니다. 조금 뒤에 템플릿을 배포할 것입니다.

    @description('The Azure region into which the resources should be deployed.')
    param location string = resourceGroup().location
    
    @description('The name of the App Service app.')
    param appServiceAppName string = 'toywebsite${uniqueString(resourceGroup().id)}'
    
    @description('The name of the App Service plan SKU.')
    param appServicePlanSkuName string = 'F1'
    
    var appServicePlanName = 'toy-website-plan'
    var applicationInsightsInstanceName = 'toy-website-insights'
    
    resource appServicePlan 'Microsoft.Web/serverFarms@2020-06-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: appServicePlanSkuName
      }
    }
    
    resource applicationInsightsInstance 'Microsoft.Insights/components@2018-05-01-preview' = {
      name: applicationInsightsInstanceName
      location: location
      kind: 'web'
      properties: {
        Application_Type: 'web'
      }
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2020-06-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
        siteConfig: {
          appSettings: [
            {
              name: 'APPINSIGHTS_INSTRUMENTATIONKEY'
              value: applicationInsightsInstance.properties.InstrumentationKey
            }
            {
              name: 'APPLICATIONINSIGHTS_CONNECTION_STRING'
              value: applicationInsightsInstance.properties.ConnectionString
            }
          ]
        }
      }
    }
    
  3. 파일의 변경 내용을 저장합니다. 파일>다른 이름으로 저장을 선택해도 되고 Windows에서 Ctrl+S(macOS는 ⌘+S) 키를 눌러도 됩니다. 파일을 저장한 위치를 기억해야 합니다. 예를 들어 파일을 저장할 scripts 폴더를 만들 수 있습니다.

서비스 주체를 사용하여 Bicep 파일 배포

현재 배포 파이프라인이 없으므로 파이프라인이 Bicep 파일을 배포하기 위해 수행하는 작업을 시뮬레이션합니다.

  1. Visual Studio Code 터미널에서 다음 Azure CLI 명령을 실행하여 서비스 주체의 자격 증명을 사용하여 로그인합니다. 자리 표시자를 이전 연습에서 복사한 값으로 바꿉니다.

    az login --service-principal \
      --username APPLICATION_ID \
      --password SERVICE_PRINCIPAL_KEY \
      --tenant TENANT_ID
    
  2. 다음 Azure CLI 명령을 실행하여 Bicep 파일을 배포합니다.

    az deployment group create \
      --resource-group ToyWebsite \
      --template-file main.bicep
    

    1~2분 정도 후에 배포가 성공적으로 완료됩니다.

  1. Visual Studio Code 터미널에서 다음 Azure PowerShell 명령을 실행하여 서비스 주체의 자격 증명에 대한 메시지를 안전하게 표시합니다. 사용자 이름 및 암호에 대해 이전 연습의 서비스 주체 애플리케이션 ID와 키를 각각 사용합니다.

    $credential = Get-Credential
    
  2. Visual Studio Code 터미널에서 다음 Azure PowerShell 명령을 실행하고 서비스 주체의 자격 증명을 사용하여 로그인합니다. TENANT_ID 자리 표시자를 이전에 복사한 값으로 바꿉니다.

    Connect-AzAccount -ServicePrincipal `
      -Credential $credential `
      -Tenant TENANT_ID
    
  3. 다음 Azure PowerShell 명령을 실행하여 Bicep 파일을 배포합니다.

    New-AzResourceGroupDeployment -ResourceGroupName ToyWebsite -TemplateFile main.bicep
    

    1~2분 정도 후에 배포가 성공적으로 완료됩니다.

배포 확인

Azure Portal을 사용하여 배포한 리소스를 검사하고 각 배포의 결과를 검사합니다.

  1. Azure Portal로 이동합니다.

  2. 왼쪽 창에서 리소스 그룹을 선택합니다.

  3. ToyWebsite를 선택합니다.

  4. 배포를 선택하여 성공적인 배포를 확인합니다 .

    Screenshot of the Azure portal resource group Deployments pane, displaying the successful deployment.

    Failure-Anomalies-Alert-Rule-Deployment라는 배포가 표시될 수도 있습니다. Application Insights는 이 배포를 자동으로 만듭니다.

  5. 기본 배포를 선택하여 배포된 리소스를 확인하고 배포 세부 정보를 확장합니다.

    이 경우 App Service 계획, 앱 및 Application Insights 인스턴스가 나열됩니다.

    Screenshot of the Azure portal deployments overview pane for the main deployment, with an App Service plan and app, and an Application Insights instance listed.

    이 배포에 대한 특별한 내용은 없습니다. 서비스 주체가 시작했지만 다른 Bicep 배포와 같습니다.

리소스 그룹 및 서비스 주체 정리

서비스 주체 및 역할 할당을 성공적으로 만들었으며 Bicep 파일을 사용하여 웹 사이트의 리소스를 배포했습니다. 이제 만든 리소스를 제거할 수 있습니다.

  1. 다음 명령을 사용하여 서비스 주체의 계정에서 로그아웃합니다.

    az logout
    
  2. 다음 명령을 실행하여 귀하의 사용자 계정으로 Azure에 다시 로그인합니다.

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

  4. 다음 Azure CLI 명령을 실행하여 리소스 그룹, 해당 콘텐츠 및 역할 할당을 삭제합니다.

    az group delete --name ToyWebsite
    

    확인하라는 메시지가 표시되면 y을(를) 입력하세요.

  5. 다음 명령을 실행하여 서비스 주체를 삭제하세요. APPLICATION_ID 자리 표시자를 이전 연습에서 복사한 애플리케이션 ID로 바꿉니다.

    az ad sp delete --id APPLICATION_ID
    
  1. 다음 명령을 사용하여 서비스 주체의 계정에서 로그아웃합니다.

    Logout-AzAccount
    
  2. 다음 명령을 실행하여 귀하의 사용자 계정으로 Azure에 다시 로그인합니다.

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

  4. 다음 Azure PowerShell 명령을 실행하여 리소스 그룹, 해당 콘텐츠 및 역할 할당을 삭제합니다.

    Remove-AzResourceGroup -Name ToyWebsite
    

    확인하라는 메시지가 표시되면 y을(를) 입력하세요.

  5. 다음 명령을 실행하여 서비스 주체를 삭제하세요. APPLICATION_ID 자리 표시자를 이전 연습에서 복사한 애플리케이션 ID로 바꿉니다.

    Remove-AzADServicePrincipal -ApplicationId APPLICATION_ID
    

    확인하라는 메시지가 표시되면 y을(를) 입력하세요.