Azure, AWS, GCP 클라우드 활용 Tip과 강좌 게시판

이곳은 개발자를 위한 Azure, AWS, GCP등 클라우드 활용 Tip과 강좌 게시판 입니다. 클라우드 환경을 개발하면서 알아내신 Tip이나 강좌, 새로운 소식을 적어 주시면 다른 클라우드를 공부하는 개발자 분들에게 큰 도움이 됩니다. 감사합니다. SQLER.com은 개발자와 IT전문가의 지식 나눔을 실천하기 위해 노력하고 있습니다.

 

Service Princial과 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
330 Azure Blob Storage SAS token 생성 코난(김대우) 2021.09.17 5
329 Azure Data Factory를 이용해 ADX에서 SQL로 900만건의 데이터 전송 file 코난(김대우) 2021.09.16 6
328 Azure Data Explorer에서 SQL서버 데이베이스 테이블 조회/삽입 - sql_request plugin file 코난(김대우) 2021.09.16 4
327 Azure Data Explorer에 대량 CSV 파일 ingest 코난(김대우) 2021.09.15 6
326 Azure Event Hubs의 데이터를 Azure Data Explorer로 전송 file 코난(김대우) 2021.09.15 3
325 Azure Event Hubs로 kafka message 전송 처리 file 코난(김대우) 2021.09.15 7
» Service Princial과 Azure 리소스 접근/사용을 위한 인증 방법 3+1가지 file 코난(김대우) 2020.12.26 245
323 Azure storage 관리 도구 - storage explorer 설치와 사용 방법 코난(김대우) 2020.12.25 191
322 Azure cli - command line interface 명령줄 인터페이스 도구를 쓰는 이유와 방법 코난(김대우) 2020.12.25 182
321 클라우드 오픈소스 개발환경 - WSL [1] file 코난(김대우) 2020.12.20 386
320 Cloud RoadShow 세션 발표 자료 코난(김대우) 2016.05.04 11301
319 한방에 보는 HDInsight 소개 정보 코난(김대우) 2015.03.12 9767
318 모던 비즈니스를 위한 클라우드 (6) Azure 데이터 서비스 - DaaS 코난(김대우) 2014.11.11 15453
317 모던 비즈니스를 위한 클라우드 (5) 모바일 디바이스를 위한 Mobile Service 코난(김대우) 2014.11.11 16364
316 모던 비즈니스를 위한 클라우드 (4) 클라우드 플랫폼의 주인공은 PaaS! Azure Website 코난(김대우) 2014.11.11 16117
315 모던 비즈니스를 위한 클라우드 (3) 클라우드 서비스의 초석, 인프라스트럭처 코난(김대우) 2014.11.11 13966
314 모던 비즈니스를 위한 클라우드 (2) 엔터프라이즈 클라우드, 하이브리드 클라우드 코난(김대우) 2014.11.11 14603
313 모던 비즈니스를 위한 클라우드 (1) Microsoft Azure의 숨가쁘게 달려온 1년 코난(김대우) 2014.11.11 14708
312 클라우드 모바일 서비스 서버 로직을 .NET으로! - 한걸음 더, .NET으로 암호화 루틴 추가해 보기 (3) 코난(김대우) 2014.10.15 15364
311 클라우드 모바일 서비스 서버 로직을 .NET으로! - Visual Studio로 개발과 배포를 한방에! (2) 코난(김대우) 2014.10.15 15574





XE Login