Microsoft MVP성태의 닷넷 이야기
글쓴 사람
홈페이지
첨부 파일
 

Azure의 Access control 보안과 Azure Active Directory의 계정 관리 서비스

Azure의 계정 관리가 다소 혼란스러운 면이 있어서 정리해 봤습니다.

우선, Microsoft 계정이 있습니다. 가령 다음의 계정이 마이크로소프트 계정이라면 각종 서비스(아웃룩, 포럼, ...)에 로그인이 가능합니다.

계정: test@testad.com (마이크로소프트 계정)

마찬가지로 이 계정으로 당연히 "Microsoft Azure" 웹 사이트, 즉 https://portal.azure.com Azure Portal에 로그인할 수 있습니다. 이 단계까지는 auzre portal은 단순히 Azure 서비스를 알려주는 사이트에 불과하며 Azure의 어떠한 서비스도 이용할 수 없습니다. 즉, 가상 머신이나 Web App 등을 생성할 수 없습니다.

이 상태의 test@testad.com 사용자는 다음과 같은 역할을 하게 됩니다.

* 마이크로소프트 계정
* Azure 사이트 로그인 계정




test@testad.com 사용자가 Azure 서비스를 사용하기 위해서는 구독(Subscription)을 해야 합니다. (이 글에서는 "MySub"라는 이름으로 구독했다고 가정하겠습니다.) 일단 구독을 하게 되면 test@testad.com 사용자는 해당 구독의 "Owner" 역할로 자동 등록됩니다. 따라서 이제부터는 test@testad.com 계정은 다음의 3가지 역할을 동시에 갖게 되는 것입니다.

* 마이크로소프트 계정
* Azure 사이트 로그인 계정
* MySub 구독(Subscriptions)의 Owner 계정(Access control - IAM)

여기에 더해서, Azure는 구독을 한 경우 자동으로 Azure Active Directory에 test@testad.com 계정을 관리자로 자동 추가합니다. 따라서 실제로는 다음과 같이 4가지 역할을 갖게 됩니다.

* 마이크로소프트 계정
* Azure 사이트 로그인 계정
* MySub 구독(Subscriptions)의 Owner 계정(Access control - IAM)
* MySub - Azure Active Directory의 Global administrator Role에 속한 Member

얼핏 보기에 Access Control과 AAD는 관련 없는 듯 보이지만 계정 관리 기반은 AAD에 있습니다. 즉, AAD가 있는 상태에서 그 디렉터리에 등록된 사용자에 대해 Azure 구독의 Access Control 권한을 주는 것입니다.




Azure 구독을 다른 마이크로소프트 계정의 사용자(여기서는 예를 들어 user@my.com)와 함께 관리를 하고 싶다고 가정해 보겠습니다. 그럼, test@testad.com 사용자는 user@my.com 사용자를 Azure 구독(Subscriptions)의 Access control에 등록하게 되지만, 위에서도 언급했듯이 Access control은 AAD 기반 위에 Role을 부여하는 것이기 때문에 Azure는 이런 경우에도 Access control에 등록된 외부 사용자를 AAD에 Guest 계정으로 자동 등록해 줍니다.

그리하여 test@testad.com 계정과 user@my.com 계정은 다음과 같이 권한을 소유한 상태입니다.

test@testad.com

    * 마이크로소프트 계정
    * Azure 사이트 로그인 계정
    * MySub 구독의 Owner 계정
    * MySub - Azure Active Directory의 Global administrator Role에 속한 Member

user@my.com

    * 마이크로소프트 계정
    * Azure 사이트 로그인 계정
    * MySub 구독의 Contributor 계정 (test@testad.com 계정이 Contributor로 등록해 주었다고 가정)
    * MySub - Azure Active Directory의 Guest




단순히 Azure 리소스 서비스를 사용하는 경우라면 AAD는 Azure 구독의 Access control을 위한 기반 서비스에 불과합니다. 하지만, AAD는 본연의 계정 관리 서비스를 함께 제공합니다. 즉, Azure 구독의 Access control과의 연계 없이 독자적으로 AAD에 계정을 등록/관리할 수 있습니다. 윈도우 서버 관리자라면, 기존 윈도우 서버에 있던 Active Directory 계정 관리 서비스가 Azure의 클라우드 버전으로 포팅된 것으로 생각해도 무리가 없습니다.

예를 들기 위해 testad.com 회사의 사용자 3명을 AAD에 추가한다고 가정해 보겠습니다.

user@testad.com
coworker@testad.com
cure@testad.com

추가할 때, 다음의 3가지 중 하나에 해당하는 "Directory role"을 설정할 수 있습니다. ("구독의 Access control"과 연관된 Role이 아니고 "Directory 서비스의 Role"입니다.)

  1. User (Users can access assigned resources but cannot manage most directory resources.)
  2. Global administrator (Global administrators have full control over all directory resources.)
  3. Limited administrator (Select the administrative role or roles for this user.)

대체로 기존 Active Directory 개념의 사용자를 등록하는 경우라면 "User"를 할당하겠고, 그 외 함께 Azure Active Directory를 관리할 목적이라면 "Limited administrator"를 주고 다음의 권한들 중 취사선택해서 할당할 수 있습니다.

  • Billing administrator
  • Compliance administrator
  • Conditional access administrator
  • Exchange administrator
  • Guest inviter
  • Password administrator
  • Information protection administrator
  • Skype for Business administrator
  • Privileged role administrator
  • Reports reader
  • Security administrator
  • Security reader
  • Service support administrator
  • SharePoint administrator
  • User administrator

위의 권한 목록을 봐도 알 수 있지만, AAD의 Role들은 Azure 구독에서 제공하는 구체적인 리소스(VM, App Services, Functions, ...) 자체와 크게 상관이 없습니다. 말 그대로 기존 Active Directory의 계정 정보 보안에 해당하는 기능들이 나열된 것뿐입니다. (Billing administrator 같은 Azure 특화된 role도 있긴 합니다.)

여기서 재미있는 것은 마이크로소프트가 AAD에 등록된 사용자 계정을 기본적으로 Azure Portal 사이트에도 로그인이 가능하도록 만들어 준다는 점입니다. 그래서 사용자는 마이크로소프트의 계정은 아니지만 AAD에 등록된 것만으로 자연스럽게 Azure Portal에도 로그인을 할 수 있습니다.

그 외에, 비록 AD에 속한 사용자들이 자신이 속한 Azure 구독의 자원들을 활용할 권한은 없지만 원한다면 스스로의 구독을 생성해 Azure 서비스를 이용할 수는 있습니다. 예를 들어, cure@testad.com 사용자가 자신만의 구독(여기서는 CureSub)을 열었다고 가정해 보겠습니다. 그에 대한 비용은 cure@testad.com 개인이 지불하면 되는, test@testad.com이 생성한 구독과는 아무런 관련이 없습니다.

물론 AAD에 등록된 사용자에게 test@testad.com이 생성한 구독에 대한 권한을 주는 것도 가능하며, 심지어 AAD에 등록되지 않았었던 user@my.com 사용자의 경우 Access control에 등록해 자동으로 AAD에 추가된 경우이기도 합니다. 이 글에서는 coworker@testad.com 계정을 MySub 구독의 Contributor로 추가한 걸로 가정합니다.

여기까지, 등록된 계정들을 다음과 같이 정리할 수 있습니다.

test@testad.com

    * 마이크로소프트 계정
    * Azure 사이트 로그인 계정
    * MySub 구독의 Owner 계정
    * MySub - Azure Active Directory의 Global administrator Role에 속한 Member

user@my.com

    * 마이크로소프트 계정
    * Azure 사이트 로그인 계정
    * MySub 구독의 Contributor 계정
    * MySub - Azure Active Directory의 Guest

user@testad.com
    * Azure 사이트 로그인 계정
    * MySub - Azure Active Directory의 User 계정 (test@testad.com 계정이 설정했다고 가정)

coworker@testad.com
    * Azure 사이트 로그인 계정
    * MySub 구독의 Contributor 계정
    * MySub - Azure Active Directory의 Limited administrator 계정 (test@testad.com 계정이 설정했다고 가정)

cure@testad.com
    * Azure 사이트 로그인 계정
    * MySub - Azure Active Directory의 User 계정 (test@testad.com 계정이 설정했다고 가정)
    * CureSub 구독의 Owner 계정
    * CureSub - Azure Active Directory의 Global administrator Role에 속한 Member




당연히 한 사용자가 2개의 구독을 갖는 것도 가능합니다. 예를 들기 위해 독자적인 구독을 열었던 cure@testad.com 사용자에 대해 test@testad.com 사용자의 "MySub" 구독에 대해 Contributor로 추가한 걸로 가정하면 다음과 같이 계정 권한이 바뀝니다.

test@testad.com

    * 마이크로소프트 계정
    * Azure 사이트 로그인 계정
    * MySub 구독의 Owner 계정
    * MySub - Azure Active Directory의 Global administrator Role에 속한 Member

user@my.com

    * 마이크로소프트 계정
    * Azure 사이트 로그인 계정
    * MySub 구독의 Contributor 계정
    * MySub - Azure Active Directory의 Guest

user@testad.com
    * Azure 사이트 로그인 계정
    * MySub - Azure Active Directory의 User 계정 (test@testad.com 계정이 설정했다고 가정)

coworker@testad.com
    * Azure 사이트 로그인 계정
    * MySub 구독의 Contributor 계정
    * MySub - Azure Active Directory의 Limited administrator 계정 (test@testad.com 계정이 설정했다고 가정)

cure@testad.com
    * Azure 사이트 로그인 계정
    * MySub 구독의 Contributor 계정
    * MySub - Azure Active Directory의 User 계정 (test@testad.com 계정이 설정했다고 가정)
    * CureSub 구독의 Owner 계정
    * CureSub - Azure Active Directory의 Global administrator Role에 속한 Member

위와 같은 상황에서 cure@testad.com 사용자는 Azure 구독이 2개가 되며 Azure portal에서 우측 상단의 사용자 계정 아이콘을 눌러 펼치면,

azure_auth_2type_1.png

원하는 디렉터리 서비스를 선택해 인증 서버를 변경할 수 있습니다.




Azure 구독을 하면, 일종의 리소스에 대한 Folder 개념에 해당하는 "Resource Group"을 생성할 수 있습니다. 재미있는 것은 이 리소스 그룹 자체도 구독(Subscription)과 동일한 형식에 해당하는 자신만의 계정(Access control - IAM)을 가집니다. 사실 리소스 그룹뿐만 아니라, Azure에서 제공되는 모든 서비스들의 항목(Load balancer, App Services, Virtual machines, SQL Server, Blob Storage, ...)들이 자체적인 Access control을 제공하므로 그에 따른 계정을 설정할 수 있습니다.

일례로, test@testad.com 사용자가 다음의 Azure 리소스를 생성했다고 가정해 보겠습니다.

TestGrp [리소스 그룹]
    * vm1 [가상 머신]
    * vm2 [가상 머신]

기본적으로 Access control의 권한은 상위에서 하위로 상속됩니다. 따라서 MySub 구독에 대해 test@testad.com은 Owner이고, user@my.com, cure@testad.com은 Contributor이기 때문에 TestGrp 및 그 하위의 가상 머신 vm1, vm2에 대해서도 다음과 같은 권한 설정이 됩니다.

TestGrp [리소스 그룹]
    - test@testad.com   Owner (inherited)
    - user@my.com       Contributor (inherited)
    - cure@testad.com   Contributor (inherited)

    * vm1 [가상 머신]
        - test@testad.com   Owner (inherited)
        - user@my.com       Contributor (inherited)
        - cure@testad.com   Contributor (inherited)

    * vm2 [가상 머신]
        - test@testad.com   Owner (inherited)
        - user@my.com       Contributor (inherited)
        - cure@testad.com   Contributor (inherited)

기억해야 할 점은, 위와 같이 "inherited"로 표시된 권한들은 삭제할 수 없다는 것입니다. 따라서 MySub 구독에 대해 Contributor로 설정되어 있으면 해당 구독에 속한 모든 Azure 자원들에 대해 Contributor 권한을 갖게 됩니다.

이 상태에서 user@testad.com에게 vm1의 Owner 권한을, user@my.com에게 vm2의 Owner 권한을 추가하는 것이 가능합니다.

TestGrp [리소스 그룹]
    - test@testad.com  Owner (inherited)
    - user@my.com  Contributor (inherited)

    * vm1 [가상 머신]
        - test@testad.com   Owner (inherited)
        - user@my.com       Contributor (inherited)
        - cure@testad.com   Contributor (inherited)
        - user@testad.com   Owner

    * vm2 [가상 머신]
        - test@testad.com   Owner (inherited)
        - user@my.com       Contributor (inherited)
        - cure@testad.com   Contributor (inherited)
        - user@my.com       Owner

위의 상황에서 vm1의 경우 user@my.com은 Contributor이기 때문에 vm1을 포함해 그 하위 자원들에 대해 계정을 생성할 수 없습니다. 반면 user@testad.com은 Owner 권한이 있기 때문에 임의 계정을 추가하는 것이 가능합니다.

vm2의 경우 user@my.com이 Contributor이면서 Owner입니다. 이럴 때는 결국 Owner 권한이 있는 것이므로 계정 생성까지 자유롭게 할 수 있습니다.

이 정도 시나리오면, Azure의 권한 관리에 대해 대략적인 그림이 그려질 것입니다. ^^




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]





[최초 등록일: ]
[최종 수정일: 4/18/2018 ]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer@outlook.com

비밀번호

댓글 쓴 사람
 




... 16  17  18  19  20  21  22  23  24  25  26  27  28  [29]  30  ...
NoWriterDateCnt.TitleFile(s)
11516정성태5/9/20182128.NET Framework: 745. Azure runbook을 PowerShell 또는 C# 코드로 실행하는 방법파일 다운로드1
11515정성태6/8/20182495.NET Framework: 744. C# 6 - Expression bodied function
11514정성태5/3/20183947오류 유형: 466. Bitvise - Error in component session/transport/kexHandler [2]
11513정성태5/10/20184847.NET Framework: 743. C# 언어의 공변성과 반공변성 [5]파일 다운로드1
11512정성태5/3/20182215개발 환경 구성: 375. Azure runbook 실행 시 "Errors", "All Logs"에 오류 메시지가 출력되는 경우
11511정성태5/2/20182557개발 환경 구성: 374. Azure - Runbook 기능 소개
11510정성태4/30/20184190.NET Framework: 742. windbg로 확인하는 Finalizer를 가진 객체의 GC 과정파일 다운로드1
11509정성태4/28/20183663.NET Framework: 741. windbg로 확인하는 객체의 GC 여부
11508정성태4/23/20182896개발 환경 구성: 373. MSBuild를 이용해 프로젝트 배포 후 결과물을 zip 파일로 압축하는 방법파일 다운로드1
11507정성태9/29/20183113개발 환경 구성: 372. MSBuild - 빌드 전/후, 배포 전/후 실행하고 싶은 Task 정의
11506정성태6/27/20186017.NET Framework: 740. C#에서 enum을 boxing 없이 int로 변환하기 - 두 번째 이야기 [7]파일 다운로드1
11505정성태4/19/20182507개발 환경 구성: 371. Azure Web App 확장 예제 - Simple WebSite Extension
11504정성태4/19/20182653오류 유형: 465. Azure Web App 확장 - Extplorer File manager 적용 시 오류
11503정성태4/19/20182611오류 유형: 464. PowerShell - Start-Service 명령 오류 (Service 'xxx' cannot be started)
11502정성태5/12/20183653개발 환경 구성: 370. Azure VM/App Services(Web Apps)에 Let's Encrypt 무료 인증서 적용 방법 [2]
11501정성태4/17/20182401개발 환경 구성: 369. New-AzureRmADServicePrincipal로 생성한 계정의 clientSecret, key 값을 구하는 방법파일 다운로드1
11500정성태4/17/20182716개발 환경 구성: 368. PowerShell로 접근하는 Azure의 Access control 보안과 Azure Active Directory의 계정 관리 서비스
11499정성태4/17/20182290개발 환경 구성: 367. Azure - New-AzureRmADServicePrincipal / New-AzureRmRoleAssignment 명령어
11498정성태4/17/20182310개발 환경 구성: 366. Actvie Azure Directory의 사용자 유형 구분 - Guest/Member
11497정성태4/17/20182444개발 환경 구성: 365. Azure 리소스의 액세스 제어(Access control) 별로 사용자에게 권한을 할당하는 방법 [2]
11496정성태4/17/20182055개발 환경 구성: 364. Azure Portal에서 구독(Subscriptions) 메뉴가 보이지 않는 경우
11495정성태4/18/20182651개발 환경 구성: 363. Azure의 Access control 보안과 Azure Active Directory의 계정 관리 서비스
11494정성태4/16/20182425개발 환경 구성: 362. Azure Web Apps(App Services)에 사용자 DNS를 지정하는 방법
11493정성태4/16/20182416개발 환경 구성: 361. Azure Web App(App Service)의 HTTP/2 프로토콜 지원
11492정성태4/13/20182389개발 환경 구성: 360. Azure Active Directory의 사용자 도메인 지정 방법
11491정성태9/30/20192656개발 환경 구성: 359. Azure 가상 머신에 Web Application을 배포하는 방법
... 16  17  18  19  20  21  22  23  24  25  26  27  28  [29]  30  ...