반응형
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 앱 등록
- Azure Active Directory → 앱 등록(App registrations) → 새 등록(New registration) 클릭
- 이름(Name): 원하는 이름 입력 (예: MI-Copy-Automation)
- 지원 계정 유형(Supported account types): 기본값(조직 디렉터리) 그대로
- Redirect URI: 비워둠
- 등록(Register) 클릭
2.3 App ID / Tenant ID 확인
앱 등록이 완료되면 개요(Overview) 화면에서:
- Application (client) ID → AZ_APP_ID 값
- Directory (tenant) ID → AZ_TENANT_ID 값
2.4 클라이언트 비밀 생성
- 앱 화면에서 인증서 및 비밀(Certificates & secrets) 메뉴 클릭
- 새 클라이언트 비밀(New client secret) 클릭
- 설명(예: MI-Copy-Key)과 만료 기간 선택
- 추가(Add) 클릭
- 생성된 Value 값을 복사 → AZ_CLIENT_SECRET 값
⚠️ 이 값은 한 번만 볼 수 있으니 안전한 곳에 보관하세요.
2.5 Subscription ID 확인
[Subscriptions] 메뉴로 이동하여:
- 사용할 구독 선택
- Subscription ID 값 복사 → AZ_SUBSCRIPTION_ID
2.6 권한 부여
이 앱 계정이 SQL Managed Instance를 관리할 수 있도록 권한을 부여합니다.
- 구독 또는 리소스 그룹 → 액세스 제어(IAM) → 역할 할당 추가(Add role assignment)
- 역할: Contributor 또는 SQL Managed Instance Contributor
- 멤버 선택 → 방금 등록한 앱 선택
- 저장
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 변수에 저장하는 방법을 추천합니다.
반응형
'CLOUD > AZURE' 카테고리의 다른 글
| Azure App Registrations (0) | 2025.10.27 |
|---|---|
| Azure Application Gateway에서 HostName 중복과 Any Host 리스너 동작 원리 (0) | 2025.08.10 |
| Azure VPN 환경에서 Web 앱 로그인 오류 분석기 — "400 invalid id" 원인과 해결 과정 (0) | 2025.07.30 |
| Azure storage account fileshare SMB 접속 방법 (0) | 2025.07.23 |
| azure action groups (0) | 2025.07.14 |
댓글