[Azure] 사용자 계정 관리

2025. 7. 16. 11:12·클라우드(Azure, AWS, Alibaba)

컴플라이언스 준수를 위해 미사용 계정 정리

  • Last sign-in 기준 90일 미사용자 계정 disable 처리 (interactive, non-interactive)
  • 서비스 계정은 제외 (그룹을 설정하여 제외 처리)

 

PowerShell에서 Az 모듈 명령어 사용을 위해 Connect-AzAccount 실행 후 진행

  • PowerShell 버전: 7.4.7
  • Microsoft.Graph 모듈 버전: 2.25.0

 

사전 세팅

Automation Account 생성

  • Azure portal 접속 - Automation Accounts 검색 후 Create 클릭

  • Automation account name 설정 후 나머지는 기본 값으로 진행.

 

 

이 후 과정은 PowerShell CLI 창에서 진행

 

 

Microsoft.Graph 모듈 설치

PS C:\> Install-Module Microsoft.Graph

 

 

Microsoft Graph에 로그인 (OAuth 인증 + 권한 위임)

PS C:\> Connect-MgGraph -Scopes "AppRoleAssignment.ReadWrite.All", "Application.Read.All"
  • Microsoft Graph API에 로그인
  • 이 스크립트는 다른 앱에 역할(AppRole)을 할당하기 위해 AppRoleAssignment.ReadWrite.All 권한이 필요
  • Application.Read.All은 SPN(Service Principal) 정보 조회용

 

변수 설정

PS C:\> $automationAccountName = "<Automation Account의 이름>"
PS C:\> $tenantId = "<Tenant ID>"

 

 

Automation Account의 Managed Identity 정보 조회

PS C:\> $managedIdentity = Get-AzADServicePrincipal -Filter "displayName eq '$automationAccountName'"

 

 

Microsoft Graph 자체의 Service Principal 정보 가져오기

PS C:\> $graphSp = Get-MgServicePrincipal -Filter "appId eq '00000003-0000-0000-c000-000000000000'"

 

 

Microsoft Graph AppRole 중 원하는 권한 골라내기

PS C:\> $role1 = $graphSp.AppRoles | Where-Object { $_.Value -eq "User.ReadWrite.All"}
PS C:\> $role2 = $graphSp.AppRoles | Where-Object { $_.Value -eq "AuditLog.Read.All" }
PS C:\> $role3 = $graphSp.AppRoles | Where-Object { $_.Value -eq "Directory.Read.All" }
PS C:\> $role4 = $graphSp.AppRoles | Where-Object { $_.Value -eq "GroupMember.Read.All" }

 

 

Microsoft Graph AppRole 권한 부여하기

PS C:\> New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentity.Id -PrincipalId $managedIdentity.Id -ResourceId $graphSp.Id -AppRoleId $role1.Id
PS C:\> New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentity.Id -PrincipalId $managedIdentity.Id -ResourceId $graphSp.Id -AppRoleId $role2.Id
PS C:\> New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentity.Id -PrincipalId $managedIdentity.Id -ResourceId $graphSp.Id -AppRoleId $role3.Id
PS C:\> New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentity.Id -PrincipalId $managedIdentity.Id -ResourceId $graphSp.Id -AppRoleId $role4.Id
  • User.ReadWrite.All: 모든 사용자 읽기 및 수정 (매우 강력한 권한)
  • AuditLog.Read.All: 감사 로그 전체 읽기
  • Directory.Read.All: 디렉터리 전체 읽기
  • GroupMember.Read: All 그룹 구성원 정보 읽기

 


 

Automation Account에 Graph Module 추가하기

Azure Automation 계정에서 PowerShell Runbook을 실행할 때, 필요한 Microsoft Graph 관련 모듈들을 미리 설치

 

변수 정의

PS C:\> $moduleName1 = "Microsoft.Graph.Authentication"
PS C:\> $moduleName2 = "Microsoft.Graph.Users"
PS C:\> $moduleName3 = "Microsoft.Graph.Groups"

PS C:\> $moduleVersion = "2.25.0"
PS C:\> $runtimeVersion = "7.2"
PS C:\> $resourceGroupName = "<Resource Group 이름>"
PS C:\> $automationAccountName = "<Automation Account 이름>"
  • Authentication: 인증 처리용
  • Users: 사용자 관리용
  • Groups: 그룹 관리용

 

Azure Automation에 모듈 등록

  • Az.Automation 모듈이 설치되어 있어야 함  (PS C:\> Install-Module Az.Automation)
PS C:\> New-AzAutomationModule -AutomationAccountName $automationAccountName -ResourceGroupName $resourceGroupName -Name $moduleName1 -RuntimeVersion $runtimeVersion -ContentLinkUri "https://www.powershellgallery.com/api/v2/package/$moduleName1/$moduleVersion"
PS C:\> New-AzAutomationModule -AutomationAccountName $automationAccountName -ResourceGroupName $resourceGroupName -Name $moduleName2 -RuntimeVersion $runtimeVersion -ContentLinkUri "https://www.powershellgallery.com/api/v2/package/$moduleName2/$moduleVersion"
PS C:\> New-AzAutomationModule -AutomationAccountName $automationAccountName -ResourceGroupName $resourceGroupName -Name $moduleName3 -RuntimeVersion $runtimeVersion -ContentLinkUri "https://www.powershellgallery.com/api/v2/package/$moduleName3/$moduleVersion"

 

 

 

이 후 과정은 Azure portal Automation Runbook 에서 진행

 


 

Automation Accounts 설정

생성 해 놓은 Automation Accounts 접속 후 Runbook 접속

 

 

Create a runbook 클릭

  • Name: 임의로 생성
  • PowerShell 7.2 선택 후 나머지는 기본값으로 생성.

 

PowerShell 스크립트 등록 -> Save -> Publish 진행

 

 

신규로 생성 된 runbook 확인

  • 시간이 자니면 Authoring status 가 New 에서 Published 로 변경 

 


 

Runbook 테스트

신규로 생성 된 runbook 클륵 -> Edit -> Edit in portal 선택

 

상단에 Test pane 클릭

 

DRYRUN 부분에 True 입력 후  Start 클릭

  • True
    • 실제 리소스 변경 없이 Runbook의 동작을 테스트
    • Runbook이 작성한 코드대로 실행되지만, 실제 Azure 리소스에는 영향을 주지 않음
  • False
    • 코드 실행에 따른 결과값 적용(리소스 변경)

 

대상 계정 정보 출력


 

스케줄 설정

Runbook 하면으로 돌아가서 Schedules 선택 -> Add a schedule 클릭

  • AccDisable90DayInactive 계정 아래 schedules 가 아닌 runbook 하위에 있는 schedules 

 

 

Schedule 클릭

 

Add a schedule 클릭 -> 스케줄 설정 후 Create

 

 

Parameters and run settings 클릭

 

false 입력 후 OK

 

 

스케줄 생성 확인

  • DryRun 값을 false 로 설정했기 때문에 스케줄에 따라 진행 시 90일 초과 계정은 disable 설정 됨.

저작자표시 비영리 변경금지 (새창열림)
'클라우드(Azure, AWS, Alibaba)' 카테고리의 다른 글
  • [Azure] NAS 마운트 이슈
  • [Azure] AGW 네트워크 흐름
  • [Alibaba] PrivateLink 생성 및 접근 제어
  • [Alibaba] VPC 생성
기억보다는 기록을...
기억보다는 기록을...
내가 보려고 정리하는 글..
  • 기억보다는 기록을...
    메모장
    기억보다는 기록을...
    • 분류 전체보기
      • 클라우드(Azure, AWS, Alibaba)
      • 모니터링(Zabbix,Grafana)
      • 가상화(VMWare, Hyper-V)
      • Docker
      • Ansible
      • Linux
      • Windows
      • 이것저것
      • SQL
      • -------------------------
      • 재테크
  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.2
기억보다는 기록을...
[Azure] 사용자 계정 관리
상단으로

티스토리툴바