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 [IT재직자] 개강임박!! 올해 마지막 무료 및 국비지원 교육 (JAVA, 리눅스 기초/고급 , CCNA, CCIE 등) 코난(김대우) 2022.12.02 109
Notice 2022년 11월 SQLER의 강좌 업데이트 리스트 코난(김대우) 2022.12.01 24
Notice 2022 공개SW 페스티벌 - Open Up 코난(김대우) 2022.12.01 15
333 SonarQube 리뷰 및 Azure DevOps 연결 file 코난(김대우) 2021.10.01 111
332 PySpark, koalas와 pandas dataframe file 코난(김대우) 2021.09.29 193
331 Apache Spark, pyspark 설치 후 jupyter notebook 실행 file 코난(김대우) 2021.09.29 185
330 Azure Data Explorer의 데이터를 Python Pandas Dataframe과 CSV로 변환 코난(김대우) 2021.09.28 100
329 Azure Blob Storage SAS token 생성 코난(김대우) 2021.09.17 102
328 Azure Data Factory를 이용해 ADX에서 SQL로 900만건의 데이터 전송 file 코난(김대우) 2021.09.16 156
327 Azure Data Explorer에서 SQL서버 데이터베이스 테이블 조회/삽입 - sql_request plugin file 코난(김대우) 2021.09.16 84
326 Azure Data Explorer에 대량 CSV 파일 ingest 코난(김대우) 2021.09.15 84
325 Azure Event Hubs의 데이터를 Azure Data Explorer로 전송 file 코난(김대우) 2021.09.15 115
324 Azure Event Hubs로 kafka message 전송 처리 file 코난(김대우) 2021.09.15 139
» Service Principal과 Azure 리소스 접근/사용을 위한 인증 방법 3+1가지 file 코난(김대우) 2020.12.26 345
322 Azure storage 관리 도구 - storage explorer 설치와 사용 방법 코난(김대우) 2020.12.25 245
321 Azure cli - command line interface 명령줄 인터페이스 도구를 쓰는 이유와 방법 코난(김대우) 2020.12.25 250
320 클라우드 오픈소스 개발환경 - WSL [1] file 코난(김대우) 2020.12.20 966
319 Cloud RoadShow 세션 발표 자료 코난(김대우) 2016.05.04 11334
318 한방에 보는 HDInsight 소개 정보 코난(김대우) 2015.03.12 9788
317 모던 비즈니스를 위한 클라우드 (6) Azure 데이터 서비스 - DaaS 코난(김대우) 2014.11.11 15520
316 모던 비즈니스를 위한 클라우드 (5) 모바일 디바이스를 위한 Mobile Service 코난(김대우) 2014.11.11 16387
315 모던 비즈니스를 위한 클라우드 (4) 클라우드 플랫폼의 주인공은 PaaS! Azure Website 코난(김대우) 2014.11.11 16141
314 모던 비즈니스를 위한 클라우드 (3) 클라우드 서비스의 초석, 인프라스트럭처 코난(김대우) 2014.11.11 14031





XE Login

테스트 팝업
Close