본문 바로가기
CLOUD/AZURE

Azure Service Principal 생성 및 환경 변수 설정 가이드

by Rainbound-IT 2025. 8. 14.
반응형

Azure CLI 스크립트를 윈도우 작업 스케줄러나 자동화 환경에서 실행하려면, 로그인 없이도 Azure에 인증할 수 있는 계정이 필요합니다.
이를 위해 Azure에서는 서비스 프린시펄(Service Principal) 이라는 앱 계정을 제공합니다.

이 글에서는 Azure Portal에서 서비스 프린시펄을 생성하고, 필요한 값을 환경 변수로 설정하는 방법을 정리합니다.


1. Service Principal 이란?

  • Azure AD에 등록되는 애플리케이션 계정
  • 앱 ID(AppId), 비밀(Client Secret), 테넌트 ID(TenantId)로 로그인 가능
  • 사용자 개입 없이 자동화 스크립트에서 Azure CLI 명령 실행 가능
  • 권한(Role) 을 부여하면 구독이나 리소스 그룹 내 리소스를 관리할 수 있음

2. 생성 절차

2.1 Azure Portal 접속

https://portal.azure.com 에 접속 후 Azure Active Directory로 이동합니다.


2.2 앱 등록

  1. Azure Active Directory앱 등록(App registrations)새 등록(New registration) 클릭
  2. 이름(Name): 원하는 이름 입력 (예: MI-Copy-Automation)
  3. 지원 계정 유형(Supported account types): 기본값(조직 디렉터리) 그대로
  4. Redirect URI: 비워둠
  5. 등록(Register) 클릭

2.3 App ID / Tenant ID 확인

앱 등록이 완료되면 개요(Overview) 화면에서:

  • Application (client) IDAZ_APP_ID
  • Directory (tenant) IDAZ_TENANT_ID

2.4 클라이언트 비밀 생성

  1. 앱 화면에서 인증서 및 비밀(Certificates & secrets) 메뉴 클릭
  2. 새 클라이언트 비밀(New client secret) 클릭
  3. 설명(예: MI-Copy-Key)과 만료 기간 선택
  4. 추가(Add) 클릭
  5. 생성된 Value 값을 복사 → AZ_CLIENT_SECRET
    ⚠️ 이 값은 한 번만 볼 수 있으니 안전한 곳에 보관하세요.

2.5 Subscription ID 확인

[Subscriptions] 메뉴로 이동하여:

  • 사용할 구독 선택
  • Subscription ID 값 복사 → AZ_SUBSCRIPTION_ID

2.6 권한 부여

이 앱 계정이 SQL Managed Instance를 관리할 수 있도록 권한을 부여합니다.

  1. 구독 또는 리소스 그룹액세스 제어(IAM)역할 할당 추가(Add role assignment)
  2. 역할: Contributor 또는 SQL Managed Instance Contributor
  3. 멤버 선택 → 방금 등록한 앱 선택
  4. 저장

3. 환경 변수 설정

3.1 현재 세션만 적용 (일시적)

PowerShell에서:

 
$env:AZ_APP_ID = '<appId>'
$env:AZ_TENANT_ID = '<tenantId>'
$env:AZ_CLIENT_SECRET = '<clientSecret>'
$env:AZ_SUBSCRIPTION_ID = '<subscriptionId>'
 
  • 지금 실행 중인 PowerShell 세션에서만 유효
  • 세션 종료 시 값이 사라짐
  • 스크립트 자동 실행 시, 맨 위에 이 부분 추가하면 매번 자동 설정 가능

3.2 영구 적용 (Windows 환경 변수 저장)

setx AZ_APP_ID "<appId>"
setx AZ_TENANT_ID "<tenantId>"
setx AZ_CLIENT_SECRET "<clientSecret>"
setx AZ_SUBSCRIPTION_ID "<subscriptionId>"
 
 
  • Windows 사용자 환경 변수에 저장 → 다음 세션부터 자동 적용
  • 보안상 중요한 값(Client Secret)은 일반 환경 변수보다 Windows 자격 증명 관리자를 권장

4. 스크립트에서 로그인 사용 예

환경 변수가 설정되어 있으면, 스크립트에서 다음과 같이 로그인 가능:

 
az login --service-principal `
  -u $env:AZ_APP_ID `
  -p $env:AZ_CLIENT_SECRET `
  --tenant $env:AZ_TENANT_ID

az account set --subscription $env:AZ_SUBSCRIPTION_ID
 

5. 마무리

이렇게 서비스 프린시펄을 설정하면, 작업 스케줄러, Azure Automation, GitHub Actions 등에서 사람 없이도 Azure CLI 명령을 실행할 수 있습니다.
보안이 중요한 환경에서는 Client Secret을 평문 스크립트에 두지 말고,
Windows 자격 증명 관리자, Key Vault, Azure Automation 변수에 저장하는 방법을 추천합니다.

반응형

댓글