Sion
Sion
M365 운영 업무를 담당하고 있습니다. 배우고 경험한 것들을 조금씩 기록해나갑니다.

[Admin] M365 테넌트 구축(6) - AGDLP 구성

[Admin] M365 테넌트 구축(6) - AGDLP 구성

해당 시리즈에서는 AD 서버를 이용한 하이브리드 구조의 M365 테넌트 를 직접 구축해보도록 합니다.

본 포스팅에서는, allways365.life 도메인의 AD를 본격적으로 구성하고, 이를 기반으로 AGDLP를 구성해봅니다.

개요

Active Directory 는 네트워크 자원을 통합하여 중앙 관리자가 관리할 수 있는 시스템입니다.
사용자 계정, 디바이스 등의 자원을 추가하고, 정책 등을 통해 자원을 제어 및 관리할 수 있습니다.
이러한 자원을 그룹을 통해 정책으로 관리하는 방법으로는 Microsoft에서 권장하는 AGDLP 의 방식이 있습니다.

저는 AllWays365 라는 단일 테넌트를 생성할 것입니다.
테넌트 내에는 아래와 같은 여러 그룹사 및 자회사가 포함되어 있습니다.

AD에 이를 구현하고, AGDLP를 기반으로 정책을 할당해봅시다.

OU, 사용자, 그룹 생성

이전 포스팅에서, AD에 OU/사용자/그룹을 생성하고 관리하는 방법에 대해 알아보았습니다.

일반적인 운영 환경의 경우, 인사 시스템으로부터 계정 정보를 AD에 프로비저닝 시켜줍니다.
테스트 환경의 경우 위와 같은 자동화 된 솔루션이 없으므로, 빠른 작업을 위해 Powershell 을 이용해 OU/사용자/그룹을 생성해줍시다.

OU/사용자/그룹 구성에 대한 정보는 다음 포스팅을 참고해주세요.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$info = @(
    @('11000', 'OU=11000,DC=allways365,DC=life', 'AllWaysTech', 'tech', '김정보', 'tech.kim', '대표이사'),
    @('12000', 'OU=12000,DC=allways365,DC=life', 'AllWaysComm', 'comm', '한통신', 'comm.han', '대표이사'),
    @('20000', 'OU=20000,DC=allways365,DC=life', 'AllWaysFinance', 'finance', '박자산', 'finan.park', '대표이사'),
    @('30000', 'OU=30000,DC=allways365,DC=life', 'AllWaysHealth', 'health', '최튼튼', 'health.choi', '대표이사'),
    @('41000', 'OU=41000,DC=allways365,DC=life', 'AllWaysMart', 'mart', '이마트', 'mart.lee', '대표이사'),
    @('42000', 'OU=42000,DC=allways365,DC=life', 'AllWaysBrand', 'brand', '유명품', 'brand.yoo', '대표이사'),
    @('50000', 'OU=50000,DC=allways365,DC=life', 'AllWaysIndustry', 'industry', '김산업', 'indust.kim', '대표이사'),
    @('60000', 'OU=60000,DC=allways365,DC=life', 'AllWaysEnergy', 'energy', '남에너지', 'energy.nam', '대표이사'),
    @('70000', 'OU=70000,DC=allways365,DC=life', 'AllWaysEstate', 'estate', '당부자', 'rich.dang', '대표이사'),
    @('80000', 'OU=80000,DC=allways365,DC=life', 'AllWaysMaterial', 'material', '소재섭', 'material.so', '대표이사'),
    @('90000', 'OU=90000,DC=allways365,DC=life', 'AllWaysUtility', 'utility', '유티리티', 'tility.u', '대표이사')
)

New-ADOrganizationalUnit -Name '00000' -Path 'DC=allways365,DC=life'
New-ADOrganizationalUnit -Name 'Users' -Path 'OU=00000,DC=allways365,DC=life'
New-ADOrganizationalUnit -Name 'Groups' -Path 'OU=00000,DC=allways365,DC=life'
New-ADOrganizationalUnit -Name 'Devices' -Path 'OU=00000,DC=allways365,DC=life'

foreach($i in $info) {
    New-ADOrganizationalUnit -Name $i[0] -Path 'DC=allways365,DC=life'
    New-ADOrganizationalUnit -Name 'Users' -Path $i[1]
    New-ADOrganizationalUnit -Name 'Groups' -Path $i[1]
    New-ADOrganizationalUnit -Name 'Devices' -Path $i[1]

    New-ADUser -Name (Get-Date).ToFileTime() -Path "OU=Users,$($i[1])" -Office $i[2] -DisplayName "$($i[4])($($i[2])-$($i[6]))" -Description "$($i[4])($($i[2])-$($i[6]))" -SamAccountName $i[5] -UserPrincipalName "$($i[5])@allways365.life" -EmailAddress "$($i[5])@allways365.life" -Department $i[6] -Enabled $true  -AccountPassword (ConvertTo-SecureString "Password1!" -AsPlainText -Force)
    New-ADGroup -Name (Get-Date).ToFileTime() -Path "OU=Groups,$($i[1])" -GroupCategory Security -GroupScope Global -DisplayName "$($i[2])-전체" -Description "$($i[2])-전체" -SamAccountName "all.$($i[3])"
    Add-ADGroupMember -Identity "all.$($i[3])" -Members $i[5]
}

New-ADGroup -Name (Get-Date).ToFileTime() -Path 'DC=allways365,DC=life' -GroupCategory Security -GroupScope DomainLocal -DisplayName 'AllWays365-전체' -Description 'AllWays365-전체' -SamAccountName 'all'

foreach($i in $info) {
    Add-ADGroupMember -Identity "all" -Members $i[5]
}

저의 경우 위와 같은 스크립트를 통해 일괄적으로 구성을 진행해주었습니다.

AGDLP

다음으로, AGDLP 라는 개념에 대해 알아봅시다.

RBAC(Role Based Access Controls)를 구현하기 위해, Microsoft에서는 그룹을 중첩하여 정책을 할당하는 방식을 권장하고 있습니다.
해당 방식에는 AGLP, AGDLP, AGDLUP 등 여러 종류가 있으나, 본 섹션에서는 가장 대표적인 방식인 AGDLP만을 소개합니다.

  • A: Account
  • G: Global Group
  • DL: Domain Local Group
  • U: Universal Group
  • P: Policy

AGDLP 란 A(Account)G(Global)DL(Domain Local)P(Policy) 의 약자입니다.
사용자 계정을 Global Group으로 묶고, Global Group을 Domain Local Group으로 묶고, Domain Local Group을 정책에 할당시켜 관리한다 는 의미입니다.
이름 그대로 해석하면 됩니다. 직관적이죠😀

위와 같이 대상을 그룹핑하여 정책을 할당하고 관리하는 이유는 다음과 같습니다.

  1. 각 그룹의 멤버/리소스 범위가 상이
  2. 1번을 이용해, 구조적/계층적으로 멤버 관리 가능

그룹은 Universal < Global < Domain Local 순서로 큰 범주에 속합니다.
그러나 리소스에 대한 접근 권한은 Universal > Global > Domain Local 순으로 큽니다.

즉, 정책이 되는 대상을 비교적 큰 범위의 Global Group 으로 묶고, 실질적으로 정책을 할당할 그룹을 Domain Local Group 으로 설정해줌으로써 비교적 정책 대상을 편하게 관리할 수 있게 되는 것입니다.
또한, Domain Local Group의 권한 범위가 가장 작으므로 보안 홀을 미연에 예방할 수도 있겠지요.

*Universal Group의 경우, 리소스 측면에서 비효율적이므로 논외로 둡니다.

AGDLP 구현

상기 내용을 바탕으로, AD에서 직접 AGDLP를 구현해봅시다.

사전 준비

AGDLP의 경우, 여러 도메인으로 구성된 포리스트 환경에서 권장하는 RBAC 환경입니다.
본 포스팅의 경우, 자식 도메인(edu.allways365.life)를 생성한 상태에서 실습이 진행되었습니다.

  • 부모 도메인 ADDS (allways365.life)
  • 자식 도메인 ADDS (edu.allways365.life)
  • 도메인 조인에 필요한 Windows PC
    • Windows 10의 경우, Pro 이상부터 도메인 조인 가능 (Home 버전 불가)

실습1(공유 폴더)

첫 번째로, 공유 폴더를 생성하고 도메인 내 멤버가 이에 접근하는 실습을 해봅시다.
단 지금과 같은 실습 조건의 경우, “동일 네트워크 내 디바이스 검색” 이 활성화되어 있어야 테스트가 가능합니다.

먼저, 부모 도메인(allways365.life) 에 Domain Local Group을 생성합니다.
(해당 그룹에 부모 도메인 하위의 계정을 멤버로 추가해주셔도 됩니다.)

다음으로, 자식 도메인(edu.allways365.life) 에 Global Group을 생성합니다.
그룹에 자식 도메인 하위의 계정을 멤버로 추가해주세요.

다시 부모 도메인으로 이동합니다.
Domain Local Group 의 멤버로, 방금 자식 도메인에서 생성한 Global Group을 포함시킵니다.

부모 도메인에서, C 드라이브 하위에 임의의 폴더를 생성해줍니다.

폴더 우클릭 > [속성] > [공유] > [고급 공유] 를 클릭합니다.

“선택한 폴더 공유”를 체크하고, [권한]을 클릭합니다.

“Everyone” 을 제거하고, [추가]를 클릭합니다.

부모 도메인 의 Domain Local Group 을 추가합니다.
“모든 권한”, “변경”, “읽기”를 체크한 후 저장합니다.

폴더 내에 임의의 텍스트 파일을 생성한 후 저장해줍니다.

Windows PC 에서 도메인 조인을 진행한 후, Domain Local Group 내 아무 멤버의 계정으로 로그인합니다.

실행(Win 키 + R) > \\192.168.64.2 (부모 도메인 IP) 를 입력해줍니다.

“폴더” 에 들어간 후,

앞서 생성한 텍스트 파일이 있는지 확인하고, 새로운 텍스트 파일도 만들어봅시다.
권한이 부여된 대로 정상동작 하는 것을 확인할 수 있습니다.

실습2(AGDLP)

다음으로, 실습1에서 생성한 그룹을 이용해 AGDLP 를 구현해봅시다.
앞선 단계에서, 이미 AGDL까지는 완성되었다고 볼 수 있습니다.

그룹 정책 관리(Group Policy Management)를 실행합니다.
[포리스트(Forest)] > [도메인(Domains)] > “allways365.life” > “그룹 정책 개체(Default Domain Policy)” 우클릭 > “새로 만들기” 를 클릭합니다.
네이밍은 임의로 지정합니다.

생성된 그룹 정책을 우클릭하여 “편집” 을 클릭합니다.

“Prohibit access to Control Panel and PC settings” 를 선택하고 적용합니다.
이는 제어판 및 PC 설정을 사용자가 임의로 변경할 수 없는 정책입니다.

이후, 그룹 정책 관리에서 “도메인(Domains)” 하위의 “allways365.life” 우클릭 > “기존 GPO 연결” 을 클릭합니다.
앞서 생성한 정책을 연결해줍니다.

정책이 연결되었다면, Windows PC 에서 도메인 조인을 진행해줍니다.
이때, 자식 도메인인 edu.allways365.life 에 있고, 그룹 내 멤버로 포함된 계정으로 로그인해줍니다.

제어판에 접속했을 때 위와 같은 에러가 발생하면 정책이 정상적으로 적용된 것으로 볼 수 있습니다.