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
» Service Princial과 Azure 리소스 접근/사용을 위한 인증 방법 3+1가지 file 코난(김대우) 2020.12.26 164
323 Azure storage 관리 도구 - storage explorer 설치와 사용 방법 코난(김대우) 2020.12.25 124
322 Azure cli - command line interface 명령줄 인터페이스 도구를 쓰는 이유와 방법 코난(김대우) 2020.12.25 117
321 클라우드 오픈소스 개발환경 - WSL [1] file 코난(김대우) 2020.12.20 242
320 Cloud RoadShow 세션 발표 자료 코난(김대우) 2016.05.04 11234
319 한방에 보는 HDInsight 소개 정보 코난(김대우) 2015.03.12 9744
318 모던 비즈니스를 위한 클라우드 (6) Azure 데이터 서비스 - DaaS 코난(김대우) 2014.11.11 15401
317 모던 비즈니스를 위한 클라우드 (5) 모바일 디바이스를 위한 Mobile Service 코난(김대우) 2014.11.11 16331
316 모던 비즈니스를 위한 클라우드 (4) 클라우드 플랫폼의 주인공은 PaaS! Azure Website 코난(김대우) 2014.11.11 16084
315 모던 비즈니스를 위한 클라우드 (3) 클라우드 서비스의 초석, 인프라스트럭처 코난(김대우) 2014.11.11 13924
314 모던 비즈니스를 위한 클라우드 (2) 엔터프라이즈 클라우드, 하이브리드 클라우드 코난(김대우) 2014.11.11 14577
313 모던 비즈니스를 위한 클라우드 (1) Microsoft Azure의 숨가쁘게 달려온 1년 코난(김대우) 2014.11.11 14663
312 클라우드 모바일 서비스 서버 로직을 .NET으로! - 한걸음 더, .NET으로 암호화 루틴 추가해 보기 (3) 코난(김대우) 2014.10.15 15345
311 클라우드 모바일 서비스 서버 로직을 .NET으로! - Visual Studio로 개발과 배포를 한방에! (2) 코난(김대우) 2014.10.15 15562
310 클라우드 모바일 서비스 서버 로직을 .NET으로! - Microsoft Azure Mobile Service의 .NET backend (1) 코난(김대우) 2014.10.15 14555
309 [15차 캠프 후기]15차-Microsoft Azure 커뮤니티 연합 온라인 캠프를 참석하고... 곰붕어 2014.05.26 9684
308 [13차 캠프후기]SQL Server 2014 기능체험 - Native Backup Encryption [1] 주디아줌마 2014.04.21 9622
307 [13차 캠프후기] Windows Azure 가상머신에서 SQL Server 2014 체험 오버탑 2014.04.19 9966
306 [13차 캠프후기]SQL Server 2014 기능체험 - Azure Backup 테스트 성대중(지우아빠) 2014.04.18 9666
305 12차 캠프 후기 - XE를 애저 윈도우 가상머신에 설치하자 자윤마이1 2014.04.07 8368





XE Login