설치 매뉴얼
설치 전에 준비할 것
Microsoft Defender for Cloud는 보안 상태 데이터를 Azure Resource Graph로 제공합니다. 이 앱은 서비스 주체로 그것을 읽으므로, 준비 작업은 대부분 Azure 쪽입니다. 애플리케이션을 등록하고, 역할을 부여하고, 자격증명을 입력합니다.
조회하려는 구독에 Defender for Cloud가 이미 켜져 있어야 합니다. 이 앱은 Defender가 평가한 결과를 읽을 뿐 Defender를 활성화하지는 않습니다.
1. Microsoft Entra ID에 애플리케이션 등록
- Microsoft Entra ID → 앱 등록 → 새 등록을 엽니다.
logpresso-defender-cloud같은 이름을 지정하고 단일 테넌트로 등록합니다.- 개요 화면에서 애플리케이션(클라이언트) ID와 디렉터리(테넌트) ID를 복사합니다.
- 인증서 및 비밀 → 새 클라이언트 비밀에서 만료 기간을 정하고 값을 즉시 복사합니다. 이 값은 한 번만 표시됩니다.
API 권한은 추가하지 않아도 됩니다. Azure 리소스 접근 권한은 다음 단계의 역할 할당에서 나오며, Entra ID의 애플리케이션 권한과는 무관합니다.
2. Reader 역할 부여
수집하려는 모든 구독에 애플리케이션을 Reader로 할당합니다.
SP=$(az ad sp show --id APPLICATION_ID --query id -o tsv)
az role assignment create \
--assignee-object-id $SP --assignee-principal-type ServicePrincipal \
--role Reader --scope /subscriptions/SUBSCRIPTION_ID
APPLICATION_ID는 1단계의 클라이언트 ID로, SUBSCRIPTION_ID는 각 구독 ID로 바꿉니다.
포털에서는 구독 → 액세스 제어(IAM) → 역할 할당 추가 → Reader → 등록한 애플리케이션입니다.
나중에 만들어질 구독까지 포함하려면 관리 그룹 루트에 한 번만 할당합니다. 루트 범위 할당에는 상위 권한이 필요하며 조직 정책상 허용되지 않는 경우도 있습니다.
az role assignment create \
--assignee-object-id $SP --assignee-principal-type ServicePrincipal \
--role Reader --scope /providers/Microsoft.Management/managementGroups/TENANT_ID
Security Reader가 아니라 Reader입니다. Security Reader는 Microsoft.Security/*/read만
허용하므로 권장 사항과 규정 준수는 조회되지만, 인벤토리의 근거가 되는 리소스 그래프는 읽지
못합니다. Security Reader만 주면 권장 사항은 나오는데 그 권장 사항이 가리키는 리소스가
인벤토리에서 빠집니다. Reader는 둘 다 포함합니다.
3. 접속 프로파일 등록
시스템 → 접속 프로파일 → 추가에서 Microsoft Defender for Cloud를 선택합니다.
| 항목 | 값 |
|---|---|
| 테넌트 ID | 1단계의 디렉터리(테넌트) ID |
| 클라이언트 ID | 1단계의 애플리케이션(클라이언트) ID |
| 클라이언트 암호 | 1단계에서 복사한 비밀 값 |
| 구독 ID 목록 | 비우면 조회 가능한 모든 구독을 수집합니다 |
| HTTP 프록시 | IP:PORT. 외부 통신에 프록시가 필요한 경우에만 |
| 연결 제한시간 | 초 단위. 기본값 30 |
| 읽기 제한시간 | 초 단위. 기본값 120 |
구독 ID 목록은 비워두는 것이 일반적입니다. 비우면 서비스 주체가 볼 수 있는 모든 구독을 수집하므로, 구독이 새로 생겨도 프로파일을 고칠 필요가 없습니다. 범위를 의도적으로 좁힐 때만 입력합니다.
저장 전에 연결 테스트를 실행합니다. 테스트는 세 가지 실패를 구분해 보고합니다. 각각 조치가 다르기 때문입니다.
| 메시지 | 원인 |
|---|---|
| 토큰 발급 실패 | 테넌트 ID, 클라이언트 ID, 암호가 틀렸거나 암호가 만료됨 |
| 조회 가능한 구독 없음 | 역할 할당이 없거나 아직 전파되지 않음 |
| Resource Graph 조회 실패 | 역할은 있으나 보안 데이터 읽기 권한이 부족함 |
역할 할당은 반영까지 몇 분 걸릴 수 있습니다. 역할을 준 직후 테스트가 실패하면 설정을 바꾸기 전에 잠시 기다렸다 다시 시도하세요.
4. 첫 수집 실행
Microsoft Defender for Cloud → 보안 상태에서 지금 수집을 누릅니다. 구독, 자산 인벤토리, 공격 경로, 권장 사항, 컨트롤, 규정 준수, 취약점, 점수, 변화 기록 순으로 진행 상황을 보여주며 수집합니다.
한 사이클은 테넌트 규모에 따라 수 초에서 수 분이 걸립니다. 대부분의 시간은 가장 큰 결과인 규정 준수 데이터가 차지합니다.
이어서 자동 수집에서 주기를 활성화합니다. 대부분의 테넌트에는 1시간이 적당합니다. Defender 자체가 자기 주기로 재평가하므로 더 자주 수집해도 같은 데이터를 반복해 받을 뿐입니다.
이중화 구성에서는 두 노드 모두 타이머가 돌지만 사이클은 한쪽만 실행합니다. 어느 노드가 활성인지 확인하는 대신 데이터베이스의 조건부 UPDATE로 선점합니다. 장애 전환 중에는 두 노드가 모두 자신을 활성으로 판단할 수 있고, 그러면 하나의 데이터베이스에 두 사이클이 돌며 서로의 행을 지우기 때문입니다.
5. 정상 동작 확인
Azure 포털과 대조합니다. 숫자가 정확히 일치해야 합니다.
| 화면 | 포털 메뉴 |
|---|---|
| 보안 상태 | Defender for Cloud → 개요 |
| 권장 사항 | Defender for Cloud → 권장 사항 |
| 인벤토리 | Defender for Cloud → 인벤토리 |
| 규정 준수 | Defender for Cloud → 규정 준수 |
쿼리로도 확인할 수 있습니다.
PROFILE은 등록한 프로파일 식별자로 바꿉니다.
문제가 발생할 때
| 증상 | 확인 사항 |
|---|---|
| 일부 구독만 나옴 | 역할은 구독마다 할당됩니다. az role assignment list --assignee APPLICATION_ID --all로 범위를 확인하세요 |
| 인벤토리에 리소스가 빠짐 | 역할이 Reader가 아니라 Security Reader입니다. 앱이 해당 구독을 지목해 경고를 남기고, 자산을 감추는 대신 평가된 리소스를 유지합니다 |
| 공격 경로가 비어 있음 | 공격 경로 분석은 Defender CSPM 플랜에서만 제공됩니다. 빈 표 대신 안내 문구가 나옵니다 |
| 위험 수준이 비어 있음 | Defender는 일부 결과에만 상황을 반영한 위험 수준을 제공합니다. 나머지는 심각도로 대체하지 않고 등급 없음으로 두며, 포털도 같습니다 |
| 몇 달 뒤 수집이 멈춤 | 클라이언트 암호가 만료됐습니다. 새로 발급해 프로파일을 수정하세요 |
각 명령어의 전체 옵션과 출력 필드는 확장 명령어 문서에서 확인할 수 있습니다.