Service Principal과 Azure 리소스 접근/사용을 위한 인증 방법 3+1가지
이 문서에서는 Azure에서 사용되는 인증방식 세가지를 다루고, 특히 Service Principal을 이용하는 방법에 대해서 논의
인증(Authentication), 권한부여(authorization), identity, 권한(permission)에 대해 주의.
Azure 리소스에 접근/사용하기 위한 인증 방식 종류
- 포털 로그인
- az cli 로그인
- Service Principal(이하 SP), 정확히 말하면, SP는 identity로 인증에 필요한 정보를 포함
이 포스팅은 SP 소개와 이해가 목적이니 우선은 하나의 인증 방법으로 접근을 권장.
포털 로그인
말이 필요 없는 Azure 포털 웹사이트 에 접근해서 로그인 하고, 리소스 접근/사용/생성이 가능.
로그인한 Azure Active Directory identity와 authorization으로 관리 작업을 수행하며, 일반적으로 interactive login으로 분류.
az cli 로그인
이미 한번 SQLER.com에서 다룬 부분.
CLI(Command Line Interface)를 이용해 로그인. cli는 당연히 도구이다. Interactive login도 가능하고, Service principal로 로그인도 가능하다.
Service princpal 로그인
포스팅의 주인공. 정확히 말하면, identity로 인증에 필요한 정보를 포함하고 있으며 주로, 어플리케이션이나 클라우드의 여러 서비스, 또는 자동화 툴에서 인증할때 사용된다. 앞으로 개발자 커뮤니티, SQLER.com에서 진행될 포스트에서 지속적으로 많이 다루게 될 것임.
예를 들어,
1) 머신러닝에 이용되는 AzureML에서 SP로 인증할 경우
import os from azureml.core.authentication import ServicePrincipalAuthentication
svc_pr_password = os.environ.get("AZUREML_PASSWORD")
svc_pr = ServicePrincipalAuthentication( tenant_id="my-tenant-id", service_principal_id="my-application-id", service_principal_password=svc_pr_password)
ws = Workspace( subscription_id="my-subscription-id", resource_group="my-ml-rg", workspace_name="my-ml-workspace", auth=svc_pr )
print("Found workspace {} at location {}".format(ws.name, ws.location)) |
이렇게 Python code에서 AzureML 리소스에 SP로 인증을 받아 사용 가능.
2) 리소스 배포를 위해 업계에서 많이 사용하는 terraform에서 SP로 인증하는 코드
|
이렇게 terraform에서도 SP를 이용 가능.
3) ADO pipeline에서 Service Connection과 연결 설정
ADO의 Service connection을 만들때 이 service principal을 이용해 생성한다. (결국, Service connection = 일종의 SP)
Connect to Microsoft Azure - Azure Pipelines | Microsoft Docs
이렇게 개발자가 클라우드 리소스 접근시 다양한 부분에서 SP를 이용하게 된다.
service principal 생성 방법
포털에서 SP 생성
포털에서 생성 가능하나, 권장하지 않음. CLI 이용을 권장.
cli로 생성
먼저, 내 계정의 현재 구독(subscription) 확인이 필요. 이를 위해, Portal에서 subscription이나 cli의 az account show로 확인 가능
SP의 접근 가능한 리소스 scope 제한
cli를 이용해 생성할때 scope를 둬서 SP의 리소스 접근 범위 제한이 가능.
Subscription scope로 SP를 생성
az ad sp create-for-rbac --name <SPNAME> --role="Contributor" --scopes="/subscriptions/<SUBSCRIPTION_ID>" |
Resource group scope로 SP를 생성
az ad sp create-for-rbac --name <SPNAME> --role="Contributor" --scopes="/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>" |
이렇게 특정 리소스 그룹의 리소스들만 접근 가능하게 구성 가능.
당연히, 프로젝트와 개발의 목적에 맞게 가장 적은 scope로 생성하는 것이 중요
보안을 위한 선택 - Key vault
Application이나 ADO와 같은 서비스에서 SP의 보안성을 높이기 위해 Key Vault를 사용할 것을 강력하게 권장.
상세한 적용 방안은, 이후 Key Vault 포스트에서 논의 예정.
+1 추가 인증 방식 : 인증서 기반(certificate-based authentication) 인증
Certificate-based authentication - Azure Active Directory | Microsoft Docs
참고자료
Apps & service principals in Azure AD - Microsoft identity platform | Microsoft Docs
Authentication vs authorization - Microsoft identity platform | Microsoft Docs
Use Azure service principals with Azure CLI | Microsoft Docs
Sign in with the Azure CLI | Microsoft Docs