본문 바로가기

클라우드/AZURE

Azure Managed Identity 란? (≒ AWS IAM Role with EC2)

반응형

Intro

클라우드 시장 활성화 초기에는, 클라우드 ≒ AWS가 통용되던 시절이었습니다. 하지만 스타트업을 넘어 대기업까지 클라우드 사용이 필수가 된 현재, 저희는 AWS 이외에도 다양한 선택지를 가질 수 있게 되었죠. Microsoft Azure는 CSP 2위 사업자로써 AWS와 함께 다양한 클라우드 서비스를 제공하고 있습니다.

 

 

오늘은 AWS EC2에 사용하는 IAM Role과 유사한 개념인 Azure의 Managed Identity를 소개합니다.

 

AWS IAM Role이란?

Azure Managed Identity를 설명하기 전에, AWS IAM Role에 대해 간단히 설명합니다.

 

AWS의 IAM Role이란, 특정 권한을 지닌 IAM 자격 증명입니다. IAM Role을 사용해, 여러 주체가 AWS IAM 권한을 가지고 다른 AWS 서비스에 접근할 수 있습니다.

https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/id_roles.html

 

IAM Role with EC2

AWS IAM Role은 활용할 수 있는 형태가 굉장히 다양하지만, 그 중에서 EC2에 attach하여 사용하는 케이스가 있습니다.

EC2가 IAM Role의 권한을 이용하여, AWS의 다른 서비스에 접근하는 것이 가능합니다. API를 날릴 수 있는 권한이 생기는 거죠.

 

IAM Role with EC2

물론 AWS에는 IAM User라는 개념이 있고, 해당 유저의 Credential key를 사용해 동일한 상황에 대해 구현이 가능하지만, 보통 아래와 같은 차이가 있습니다.


즉, 자격 증명에 대한 유출이 불가능하기 때문에, EC2에서 타 AWS를 사용할 때 IAM Role을 사용하는 것이 권고됩니다.

(EKS에서 사용하는 IRSA와 같은 특이 케이스가 있지만, 기본적인 차이를 기술합니다)

 

  IAM Role IAM User Credential Key
일반 사용 예 AWS 리소스에만 할당하여 타 AWS 리소스 접근. -로컬 PC에 키를 저장하여 AWS 리소스 접근.
-on-premise 서버에 키를 저장하여 AWS 리소스 접근.
-AWS EC2에 키를 저장하여 AWS 리소스 접근
공유 가능성 공유 불가. AWS 리소스 자체에만 연결 가능. 공유 가능. (유출 가능)
수명 주기 객체 자체로 존재. 수명 주기가 있으며, 주기적으로 관리해주어야 함.

 

 

Azure IAM Role? Azure Managed Identity!

1:1로 상응되는 개념은 아니지만, Azure에도 리소스에 할당 가능한 자격 증명이 존재합니다.

공유 불가하며, 자격 증명을 위한 정보를 서버에 입력할 필요가 없습니다.

 

  Managed Identity
일반 사용 예 Azure 리소스에만 할당하여 타 Azure 리소스 접근.
공유 가능성 공유 불가. Azure 리소스 자체에만 연결 가능.
수명 주기 객체 자체로 존재.

 

https://learn.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview

 

Managed identities for Azure resources - Microsoft Entra

An overview of the managed identities for Azure resources.

learn.microsoft.com

Azure Managed Identity 동작 방식

 

이런 Managed Identity에는 2가지 종류가 있습니다.

 

1) System Managed Identity

VM과 1:1 관계입니다.

 

2) User assigned Managed Identity

VM과 N:1 관계입니다.

AWS IAM User Role 과 유사하게 여러 자원에 Managed Identity를 할당해 사용할 수 있습니다.
효율적이고 활용도가 높기 때문에, 리소스에 Identity를 사용할 경우 User assigned Managed Identity를 사용하는 것을 추천합니다.

 

 

 

이제 User assigned Managed Identity를 생성한 후, VM에 할당하는 구성을 알아보겠습니다.

1) Managed Identites 서비스 생성

Azure portal 검색 창에 'managed identites' 를 입력해 해당 서비스로 접근한 후, create를 통해 생성을 시작합니다.

managed identites 서비스 페이지. user assign 이라고 명시되어 있지 않지만, 해당 서비스는 user assigned managed identity 만을 생성합니다.

 

생성에 필요한 정보는 자원이 생성될 구독, 리소스 그룹과 리전 정보 입니다.

user assigned managed identity 생성 과정

 

 

생성이 완료된 후 자원을 선택하면, 아래 보이는 이미지와 같이 여러 옵션을 확인할 수 있습니다.

User assigned managed identity 페이지

 

2) User assigned managed identity 에 Role 할당

managed identity는 권한(policy)를 가질 수 있는 자격 증명이기 때문에, 최초에 사용한 후 필요한 권한을 할당해주어야 합니다.

Azure는 RBAC 기반의 권한 체계를 지원하고 있기 때문에, Role을 할당하여 azure 서비스의 권한을 부여할 수 있습니다.

 

조금 전에 생성한 managed identity의 IAM 탭으로 들어가, 'Add role assignment'를 클릭합니다.

User assigned managed identity의 IAM 탭

 

 

사용할 Role은 managed role 혹은 사용자가 직접 생성한 self-managed role로 선택 가능합니다.

이번 예제에서는 관리자 권한을 부여하기 위해 'Contributor' Role을 선택합니다.

Azure에서 제공하는 관리형 Role을 다양하게 사용할 수 있습니다.

 

이후 해당 Role을 할당할 주체를 선택하게 되는데요. Managed Identity로 선택한 후, 조금 전 생성했던 'test-managed-identity-for-storage'를 선택합니다.

선택한 role을 managed identity에 할당

 

할당하는 작업이 끝나면, 아래와 같이 managed identity에 어떠한 role이 assign 되었는지를 확인할 수 있습니다.

managed identity 내 role 할당을 확인

 

 

위의 과정을 통해 Managed Identity의 생성, Role의 할당이 완료되었습니다.

마지막으로 VM(리소스)에서 Managed Identity를 사용하는 예제를 설명합니다.


3) Role이 할당된 User assigned managed identity를 VM에서 사용

 

타겟이 되는 VM 페이지에 들어간 후, 좌측 메뉴탭의 'Identity'를 선택합니다.

이후 [User assigned] 를 선택한 후 [Add] 버튼을 클릭해 할당 과정을 시작합니다.

VM 서비스 내 Identity 페이지

 

과정은 간단합니다. 설명이 따로 필요 없을 정도로 직관적인데요.

우측에 팝업되는 managed identity 선택 페이지 중, 사용할 identity를 할당하여 저장합니다.

VM 서비스 내 identity 할당 과정

 

작업이 완료되면, VM에 user assigned managed identity가 생성된 것을 확인할 수 있습니다.

 

3) 테라폼을 사용한 User assigned Managed Identity 생성

 

테라폼을 통해서도 굉장히 쉽게 user assigned managed identity를 생성할 수 있습니다. 

resource "azurerm_user_assigned_identity" "example" {
  location            = azurerm_resource_group.example.location
  name                = "example"
  resource_group_name = azurerm_resource_group.example.name
}

https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/guides/managed_service_identity#configuring-a-https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/user_assigned_identity

 

지금까지 Azure Managed Identity에 대해 알아보았습니다.

 

배워가며 작성하는 블로그입니다.

피드백 및 의견 환영입니다 🙂

반응형