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 애플리케이션 및 서비스 주체를 만든 다음, 워크플로에서 구독에 액세스할 수 있도록 애플리케이션에 대한 역할을 할당해야 합니다.
기존 애플리케이션이 없는 경우 리소스에 액세스할 수 있는 새 Microsoft Entra 애플리케이션 및 서비스 주체를 등록합니다. 이 프로세스의 일부로 다음을 수행해야 합니다.
- Microsoft Entra ID를 사용하여 애플리케이션 등록 및 서비스 주체 만들기
- 애플리케이션에 역할 할당
Azure Portal에서 앱 등록을 열고 애플리케이션을 찾습니다. GitHub Actions 워크플로에서 사용할 애플리케이션(클라이언트) ID 및 디렉터리(테넌트) ID 값을 복사합니다.
Azure Portal에서 구독을 열어 구독을 찾습니다. 구독 ID를 복사합니다.
페더레이션된 자격 증명 추가
Azure Portal에서 또는 Microsoft Graph REST API를 사용하여 페더레이션된 자격 증명을 추가할 수 있습니다.
- Azure Portal에서 앱 등록으로 이동하여 구성하려는 앱을 엽니다.
- 앱 내에서 인증서 및 비밀로 이동합니다.
- 페더레이션된 자격 증명 탭에서 자격 증명 추가를 선택합니다.
- Azure 리소스를 배포하는 GitHub Actions 자격 증명 시나리오를 선택합니다. 자격 증명 세부 정보를 입력하여 자격 증명을 생성합니다.
필드 | Description | 예시 |
---|---|---|
조직 | GitHub 조직 이름 또는 GitHub 사용자 이름입니다. | contoso |
리포지토리 | GitHub 리포지토리 이름입니다. | contoso-app |
엔터티 형식 | GitHub 워크플로에서 OIDC 요청 범위를 지정하는 데 사용되는 필터입니다. 이 필드는 subject 클레임을 생성하는 데 사용됩니다. |
Environment , Branch , Pull request Tag |
GitHub 이름 | 환경, 분기 또는 태그의 이름입니다. | main |
이름 | 페더레이션된 자격 증명의 식별자입니다. | contoso-deploy |
자세한 개요는 GitHub 리포지토리를 신뢰하도록 앱 구성을 참조하세요.
GitHub 비밀 만들기
로그인 작업에 애플리케이션의 클라이언트 ID, 테넌트 ID 및 구독 ID를 제공해야 합니다. 이러한 값은 워크플로에서 직접 제공하거나 GitHub 비밀에 저장하고 워크플로에서 참조할 수 있습니다. 값을 GitHub 비밀로 저장하는 것이 더 안전한 옵션입니다.
GitHub 리포지토리를 열고 설정 이동합니다.
보안 > 비밀 및 변수 > 작업을 선택합니다.
AZURE_CLIENT_ID
,AZURE_TENANT_ID
및AZURE_SUBSCRIPTION_ID
에 대한 비밀을 만듭니다. GitHub 비밀에 대해 Azure Active Directory 애플리케이션에서 다음 값을 사용합니다.GitHub 비밀 Azure Active Directory 애플리케이션 AZURE_CLIENT_ID 애플리케이션(클라이언트) ID AZURE_TENANT_ID 디렉터리(테넌트) ID AZURE_SUBSCRIPTION_ID 구독 ID 비밀 추가를 선택하여 각 비밀을 저장합니다.
OpenID Connect 인증을 사용하여 Azure 로그인 설정
GitHub Actions 워크플로는 OpenID Connect를 사용하여 Azure에 인증합니다. 이 상호 작용에 대해 자세히 알아보려면 GitHub Actions 설명서를 참조하세요.
이 예제에서는 OpenID 커넥트 Azure CLI를 사용하여 Azure 로그인 작업을 사용하여 Azure로 인증합니다. 이 예제에서는 client-id
, tenant-id
및 subscription-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.
메시지가 표시됩니다.
서비스 주체 비밀을 통해 Azure 로그인 작업 사용
서비스 주체에서 Azure 로그인을 사용하려면 먼저 Azure 서비스 주체를 GitHub 리포지토리에 비밀로 추가해야 합니다.
서비스 주체 만들기
이 예제에서는 Azure로 인증하는 데 사용할 수 있는 비밀을 만듭니다 AZURE_CREDENTIALS
.
Azure Portal 또는 Azure CLI에서 로컬로 Azure Cloud Shell을 엽니다.
참고 항목
Azure Stack Hub를 사용하는 경우 SQL 관리 엔드포인트
not supported
를 .로 설정해야 합니다.az cloud update -n {environmentName} --endpoint-sql-management https://notsupported
앱에 대한 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
이전 버전입니다.서비스 주체에 대한 JSON 개체를 복사합니다.
{ "clientId": "<GUID>", "clientSecret": "<GUID>", "subscriptionId": "<GUID>", "tenantId": "<GUID>", (...) }
서비스 주체를 GitHub 비밀로 추가
GitHub에서 리포지토리로 이동합니다.
탐색 메뉴에서 설정으로 이동합니다.
보안 > 비밀 및 변수 > 작업을 선택합니다.
새 리포지토리 비밀을 선택합니다.
Azure CLI 명령의 전체 JSON 출력을 비밀의 값 필드에 붙여넣습니다. 비밀 이름을
AZURE_CREDENTIALS
으로 지정합니다.비밀 추가를 선택합니다.
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 클라우드 중 하나에 로그인하려면 지원되는 클라우드 이름을 AzureUSGovernment
AzureChinaCloud
사용하여 선택적 매개 변수 환경을 설정합니다. 이 매개 변수를 지정하지 않으면 기본값 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에 연결하는 방법에 대해 자세히 설명합니다.