GitHub Actions를 사용하여 Azure에 연결

Azure PowerShell 또는 Azure CLI에서 Azure 로그인을 사용하여 Azure 리소스와 상호 작용하는 방법을 알아봅니다.

GitHub Actions 워크플로에서 Azure PowerShell 또는 Azure CLI를 사용하려면 먼저 Azure 로그인 작업으로 로그인해야 합니다.

Azure 로그인 작업은 Azure로 인증하는 두 가지 다른 방법을 지원합니다.

기본적으로 로그인 작업은 Azure CLI를 사용하여 로그인하고 Azure CLI에 대한 GitHub Actions 실행기 환경을 설정합니다. Azure 로그인 작업의 속성과 함께 enable-AzPSSession Azure PowerShell을 사용할 수 있습니다. 그러면 Azure PowerShell 모듈을 사용하여 GitHub Actions 실행기 환경이 설정됩니다.

Azure 로그인을 사용하여 Azure Government 및 Azure Stack Hub를 비롯한 퍼블릭 또는 소버린 클라우드에 연결할 수 있습니다.

OpenID Connect에서 Azure 로그인 작업 사용

OpenID Connect를 사용하여 Azure 로그인을 설정하고 GitHub 작업 워크플로에서 사용하려면 다음이 필요합니다.

  • 구독에 적절한 역할로 할당된 서비스 주체가 있는 Microsoft Entra 애플리케이션입니다.
  • GitHub Actions에서 GitHub 리포지토리에 발급한 토큰을 신뢰하도록 페더레이션 자격 증명으로 구성된 Microsoft Entra 애플리케이션입니다. Azure Portal 또는 Microsoft Graph REST API를 사용하여 구성할 수 있습니다.
  • GitHub 발급 토큰을 워크플로에 요청하고 Azure 로그인 작업을 사용하는 GitHub Actions 워크플로입니다.

Microsoft Entra 애플리케이션 및 서비스 주체 만들기

Microsoft Entra 애플리케이션 및 서비스 주체를 만든 다음, 워크플로에서 구독에 액세스할 수 있도록 애플리케이션에 대한 역할을 할당해야 합니다.

  1. 기존 애플리케이션이 없는 경우 리소스에 액세스할 수 있는 새 Microsoft Entra 애플리케이션 및 서비스 주체를 등록합니다. 이 프로세스의 일부로 다음을 수행해야 합니다.

    • Microsoft Entra ID를 사용하여 애플리케이션 등록 및 서비스 주체 만들기
    • 애플리케이션에 역할 할당
  2. Azure Portal에서 앱 등록을 열고 애플리케이션을 찾습니다. GitHub Actions 워크플로에서 사용할 애플리케이션(클라이언트) ID디렉터리(테넌트) ID 값을 복사합니다.

  3. Azure Portal에서 구독을 열어 구독을 찾습니다. 구독 ID를 복사합니다.

페더레이션된 자격 증명 추가

Azure Portal에서 또는 Microsoft Graph REST API를 사용하여 페더레이션된 자격 증명을 추가할 수 있습니다.

  1. Azure Portal에서 앱 등록으로 이동하여 구성하려는 앱을 엽니다.
  2. 앱 내에서 인증서 및 비밀로 이동합니다.
    Select Certificates & secrets.
  3. 페더레이션된 자격 증명 탭에서 자격 증명 추가를 선택합니다. Add the federated credential
  4. Azure 리소스를 배포하는 GitHub Actions 자격 증명 시나리오를 선택합니다. 자격 증명 세부 정보를 입력하여 자격 증명을 생성합니다.
필드 Description 예시
조직 GitHub 조직 이름 또는 GitHub 사용자 이름입니다. contoso
리포지토리 GitHub 리포지토리 이름입니다. contoso-app
엔터티 형식 GitHub 워크플로에서 OIDC 요청 범위를 지정하는 데 사용되는 필터입니다. 이 필드는 subject 클레임을 생성하는 데 사용됩니다. Environment, Branch, Pull requestTag
GitHub 이름 환경, 분기 또는 태그의 이름입니다. main
이름 페더레이션된 자격 증명의 식별자입니다. contoso-deploy

자세한 개요는 GitHub 리포지토리를 신뢰하도록 앱 구성을 참조하세요.

GitHub 비밀 만들기

로그인 작업에 애플리케이션의 클라이언트 ID, 테넌트 ID구독 ID를 제공해야 합니다. 이러한 값은 워크플로에서 직접 제공하거나 GitHub 비밀에 저장하고 워크플로에서 참조할 수 있습니다. 값을 GitHub 비밀로 저장하는 것이 더 안전한 옵션입니다.

  1. GitHub 리포지토리를 열고 설정 이동합니다.

    Select Settings in the navigation

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

    Choose to add a secret

  3. AZURE_CLIENT_ID, AZURE_TENANT_IDAZURE_SUBSCRIPTION_ID에 대한 비밀을 만듭니다. GitHub 비밀에 대해 Azure Active Directory 애플리케이션에서 다음 값을 사용합니다.

    GitHub 비밀 Azure Active Directory 애플리케이션
    AZURE_CLIENT_ID 애플리케이션(클라이언트) ID
    AZURE_TENANT_ID 디렉터리(테넌트) ID
    AZURE_SUBSCRIPTION_ID 구독 ID
  4. 비밀 추가를 선택하여 각 비밀을 저장합니다.

OpenID Connect 인증을 사용하여 Azure 로그인 설정

GitHub Actions 워크플로는 OpenID Connect를 사용하여 Azure에 인증합니다. 이 상호 작용에 대해 자세히 알아보려면 GitHub Actions 설명서를 참조하세요.

이 예제에서는 OpenID 커넥트 Azure CLI를 사용하여 Azure 로그인 작업을 사용하여 Azure로 인증합니다. 이 예제에서는 client-id, tenant-idsubscription-id 값에 GitHub 비밀을 사용합니다. 로그인 작업에서 이러한 값을 직접 전달할 수도 있습니다.

Azure 로그인 작업에는 기본값인 선택적 audience 입력 매개 변수가 포함됩니다 api://AzureADTokenExchange. 사용자 지정 대상 그룹 값에 대해 이 매개 변수를 업데이트할 수 있습니다.

이 워크플로는 OpenID 커넥트 인증하고 Azure CLI를 사용하여 연결된 구독 및 목록 리소스 그룹의 세부 정보를 가져옵니다.

name: Run Azure Login with OpenID Connect
on: [push]

permissions:
      id-token: write
      contents: read
      
jobs: 
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
    - name: 'Az CLI login'
      uses: azure/login@v1
      with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
  
    - name: 'Run Azure CLI commands'
      run: |
          az account show
          az group list
          pwd 

OpenID를 통해 성공적인 Azure 로그인 확인

Az CLI login 작업을 열고 성공적으로 실행되었는지 확인합니다. 메시지가 Login successful표시됩니다. 로그인에 실패하면 Az CLI Login failed. 메시지가 표시됩니다.

GitHub Actions Azure Login successful.

서비스 주체 비밀을 통해 Azure 로그인 작업 사용

서비스 주체에서 Azure 로그인을 사용하려면 먼저 Azure 서비스 주체를 GitHub 리포지토리에 비밀로 추가해야 합니다.

서비스 주체 만들기

이 예제에서는 Azure로 인증하는 데 사용할 수 있는 비밀을 만듭니다 AZURE_CREDENTIALS .

  1. Azure Portal 또는 Azure CLI에서 로컬로 Azure Cloud Shell을 엽니다.

    참고 항목

    Azure Stack Hub를 사용하는 경우 SQL 관리 엔드포인트 not supported를 .로 설정해야 합니다. az cloud update -n {environmentName} --endpoint-sql-management https://notsupported

  2. 앱에 대한 Azure Portal에서 새 서비스 주체 를 만듭니다. 서비스 주체는 적절한 역할로 할당되어야 합니다.

        az ad sp create-for-rbac --name "myApp" --role contributor \
                                    --scopes /subscriptions/{subscription-id}/resourceGroups/{resource-group} \
                                    --json-auth
    

    매개 변수 --json-auth 는 Azure CLI 버전 >= 2.51.0에서 액세스할 수 있는 로그인 작업에서 허용하는 결과 사전을 출력합니다. 사용 중단 경고와 함께 사용하기 --sdk-auth 이전 버전입니다.

  3. 서비스 주체에 대한 JSON 개체를 복사합니다.

    {
        "clientId": "<GUID>",
        "clientSecret": "<GUID>",
        "subscriptionId": "<GUID>",
        "tenantId": "<GUID>",
        (...)
    }
    

서비스 주체를 GitHub 비밀로 추가

  1. GitHub에서 리포지토리로 이동합니다.

  2. 탐색 메뉴에서 설정으로 이동합니다.

  3. 보안 > 비밀 및 변수 > 작업을 선택합니다.

    Screenshot of select Actions menu item.

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

  5. Azure CLI 명령의 전체 JSON 출력을 비밀의 값 필드에 붙여넣습니다. 비밀 이름을 AZURE_CREDENTIALS으로 지정합니다.

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

Azure 로그인 작업 사용

Azure 로그인 작업과 함께 서비스 주체 비밀을 사용하여 Azure에 인증합니다.

이 워크플로에서는 에 저장된 서비스 주체 세부 정보와 함께 Azure 로그인 작업을 사용하여 인증합니다 secrets.AZURE_CREDENTIALS. 그런 다음, Azure CLI 작업을 실행합니다. 워크플로 파일의 GitHub 비밀 참조에 대한 자세한 내용은 GitHub Docs의 워크플로에서 암호화된 비밀 사용을 참조하세요.

제대로 작동하는 Azure 로그인 단계가 있으면 Azure PowerShell 또는 Azure CLI 작업을 사용할 수 있습니다. Azure 웹앱 배포 및 Azure 함수와 같은 다른 Azure 작업을 사용할 수도 있습니다.

on: [push]

name: AzureLoginSample

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Log in with Azure
        uses: azure/login@v1
        with:
          creds: '${{ secrets.AZURE_CREDENTIALS }}'

Azure PowerShell 작업 사용

이 예제에서는 Azure 로그인 작업으로 로그인한 다음 Azure PowerShell 작업을 사용하여 리소스 그룹을 검색합니다.

on: [push]

name: AzureLoginSample

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Log in with Azure
        uses: azure/login@v1
        with:
          creds: '${{ secrets.AZURE_CREDENTIALS }}'
          enable-AzPSSession: true
      - name: Azure PowerShell Action
        uses: Azure/powershell@v1
        with:
          inlineScript: Get-AzResourceGroup -Name "< YOUR RESOURCE GROUP >"
          azPSVersion: "latest"

Azure CLI 작업 사용

이 예제에서는 Azure 로그인 작업을 사용하여 로그인한 다음, Azure CLI 작업을 사용하여 리소스 그룹을 검색합니다.

on: [push]

name: AzureLoginSample

jobs:
build-and-deploy:
  runs-on: ubuntu-latest
  steps:

    - name: Log in with Azure
      uses: azure/login@v1
      with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}

    - name: Azure CLI script
      uses: azure/CLI@v1
      with:
          azcliversion: 2.0.72
          inlineScript: |
            az account show
            az storage -h

Azure Government 및 Azure Stack Hub 클라우드에 커넥트

Azure Government 클라우드 중 하나에 로그인하려면 지원되는 클라우드 이름을 AzureUSGovernmentAzureChinaCloud사용하여 선택적 매개 변수 환경을 설정합니다. 이 매개 변수를 지정하지 않으면 기본값 AzureCloud 을 사용하고 Azure 퍼블릭 클라우드에 연결합니다.

   - name: Login to Azure US Gov Cloud with CLI
     uses: azure/login@v1
        with:
          creds: ${{ secrets.AZURE_US_GOV_CREDENTIALS }}
          environment: 'AzureUSGovernment'
          enable-AzPSSession: false
   - name: Login to Azure US Gov Cloud with Az Powershell
      uses: azure/login@v1
        with:
          creds: ${{ secrets.AZURE_US_GOV_CREDENTIALS }}
          environment: 'AzureUSGovernment'
          enable-AzPSSession: true

다른 Azure 서비스와 커넥트

다음 문서에서는 Azure 및 기타 서비스에서 GitHub에 연결하는 방법에 대해 자세히 설명합니다.

Microsoft Entra ID

Power BI

커넥터

Azure Databricks