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에서 다룬 부분.

SQLER.com - 데이터베이스, 클라우드, 머신러닝, 오픈소스 개발자 커뮤니티 - Azure cli - command line interface 명령줄 인터페이스 도구를 쓰는 이유와 방법

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로 인증하는 코드

variable "client_secret" {
}

provider "azurerm" {
  # Whilst version is optional, we /strongly recommend/ using it to pin the version of the Provider being used
  version = "=2.4.0"

  subscription_id = "00000000-0000-0000-0000-000000000000"
  client_id       = "00000000-0000-0000-0000-000000000000"
  client_secret   = var.client_secret
  tenant_id       = "00000000-0000-0000-0000-000000000000"

  features {}
}

이렇게 terraform에서도 SP를 이용 가능.

Azure Provider: Authenticating via a Service Principal and a Client Secret | Guides | hashicorp/azurerm | Terraform Registry

 

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 생성

azure_cloud_service_principal.png

포털에서 생성 가능하나, 권장하지 않음. CLI 이용을 권장.

Create an Azure AD app & service principal in the portal - Microsoft identity platform | Microsoft Docs

 

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

MachineLearningNotebooks/authentication-in-azureml.ipynb at master · Azure/MachineLearningNotebooks (github.com)

Azure Provider: Authenticating via a Service Principal and a Client Secret | Guides | hashicorp/azurerm | Terraform Registry

Create an Azure AD app & service principal in the portal - Microsoft identity platform | Microsoft Docs

 

 

 

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 33859
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 17027
338 Azure Data Explorer - SELECT INTO(CTAS) 또는 INSERT SELECT 쿼리 수행 코난(김대우) 2021.10.26 326
337 Azure Data Explorer에서 Trigger 기능 구현 - update policy file 코난(김대우) 2021.10.22 280
336 vscode에서 일관된 팀 단위 개발 환경 구성 - devcontainer file 코난(김대우) 2021.10.19 566
335 Bicep - Azure 클라우드 리소스 배포를 위한 언어 file 코난(김대우) 2021.10.19 139
334 Azure Data Explorer - Event Hub 스트리밍 ingest 중 컬럼추가 file 코난(김대우) 2021.10.18 126
333 SonarQube 리뷰 및 Azure DevOps 연결 file 코난(김대우) 2021.10.01 216
332 PySpark, koalas와 pandas dataframe file 코난(김대우) 2021.09.29 249
331 Apache Spark, pyspark 설치 후 jupyter notebook 실행 file 코난(김대우) 2021.09.29 358
330 Azure Data Explorer의 데이터를 Python Pandas Dataframe과 CSV로 변환 코난(김대우) 2021.09.28 161
329 Azure Blob Storage SAS token 생성 코난(김대우) 2021.09.17 182
328 Azure Data Factory를 이용해 ADX에서 SQL로 900만건의 데이터 전송 file 코난(김대우) 2021.09.16 237
327 Azure Data Explorer에서 SQL서버 데이터베이스 테이블 조회/삽입 - sql_request plugin file 코난(김대우) 2021.09.16 148
326 Azure Data Explorer에 대량 CSV 파일 ingest 코난(김대우) 2021.09.15 147
325 Azure Event Hubs의 데이터를 Azure Data Explorer로 전송 file 코난(김대우) 2021.09.15 178
324 Azure Event Hubs로 kafka message 전송 처리 file 코난(김대우) 2021.09.15 224
» Service Principal과 Azure 리소스 접근/사용을 위한 인증 방법 3+1가지 file 코난(김대우) 2020.12.26 559
322 Azure storage 관리 도구 - storage explorer 설치와 사용 방법 코난(김대우) 2020.12.25 400
321 Azure cli - command line interface 명령줄 인터페이스 도구를 쓰는 이유와 방법 코난(김대우) 2020.12.25 335
320 클라우드 오픈소스 개발환경 - WSL [1] file 코난(김대우) 2020.12.20 1225
319 Cloud RoadShow 세션 발표 자료 코난(김대우) 2016.05.04 11416





XE Login