Microsoft Cloud Service/Identity

Azure AD 앱을 통한 Graph Powershell 인증받기

o959 2024. 9. 30. 10:56
반응형

Azure AD 앱을 통한 Graph Powershell 인증받기

 

Graph Powershell을 이용하여 스크립트 파일을 작성하여 자동으로 인증받을 수 있도록 만들어보려고 해요

 

이전에 M365, EXO Shell등은 자격증명을 파워쉘 스크립트에 적어서 바로 로그인이 가능하게

스크립트를 생성할 수 있었는데, Graph Powershell은 자격증명을 평문으로 적어서 로그인 하는게 불가능 하더라구요

 

 

 

 

Graph Shell 연결을 위한 Azure AD 앱 생성 

 

 

Graph Shell을 연결하기 위해 자격증명을 팝업하는게 아닌

해당 Graph Shell을 Azure AD의 앱을 통해 필요한 API (Graph Shell)에 대하여 권한을 할당해준 뒤

 

Powershell 스크립트에서 해당 Azure AD의 앱을 호출하여 기능을 사용할 계획이에요

 

 

앱 등록 페이지 접근

Azure Portal - [앱 등록] - [모든 애플리케이션] - [새 등록] 클릭해주세요

 

 

앱 등록

 

어플리케이션 이름을 적어주시고 생성해주세요

 

 

클라이언트/테넌트ID 확인

 

클라이언트/테넌트ID를 따로 적어주세요

 

 

 

이제 해당 앱에 대한 자격 증명(비밀번호)를 만들어주려고 해요

 

 

인증서 또는 비밀추가를 클릭해주세요

 

 

 

 

[새 클라이언트 암호] 클릭 후 설명과 만료 시간을 정해주세요

 

 

암호가 생성되었어요 (값)이라는 비밀키를 따로 적어주시고

해당 비밀키는 이제 더이상 확인이 불가하니 꼭!! 적어놔 주셔야 해요

 

 

 

다음으론 Graph Shell에 연결할 Scope에 대해 권한을 추가해줘야해요

Connect-MgGraph -Scopes "User.ReadWrite.All" , "Directory.ReadWrite.All"

위 명령어의 Scopes 파라미터에 대한 값을 미리 권한을 추가해 놓는 거라고 생각하시면 됩니다

 

 

[API 사용권한] 클릭 - [권한 추가] 클릭

Microsoft Graph 클릭 해주세요

 

 

 

 

 

 

사용 권한이 필요한 권한명을 입력해서 선택해주세요

 

 

 

해당 권한을 사용해도 되냐는 관리자 승인을 해줘야해요

[관리자 동의 허용 클릭] 후 허용됨 으로 변경이 되었는지 확인해주세요

 

 

 

Azure AD 앱 호출을 통한 Powershell 스크립트 동작 확인

 

아래 스크립트를 통해 테넌트의 모든 사용자의 라이선스를 Export 할꺼에요

(Client 비밀키를 적어놓은 파일을 실수로 삭제해서 다시 만들었습니다ㅠㅠ)

# Configuration
$ClientId = "c215db63-90f4-41ca-a6f8-907565759cb8"
$TenantId = "c766c769-37d5-4f20-b799-b7e6b9dabb0e"
$ClientSecret = "Secret_KEY"
 
# Convert the client secret to a secure string
$ClientSecretPass = ConvertTo-SecureString -String $ClientSecret -AsPlainText -Force
 
# Create a credential object using the client ID and secure string
$ClientSecretCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $ClientId, $ClientSecretPass
 
# Connect to Microsoft Graph with Client Secret
Connect-MgGraph -TenantId $tenantId -ClientSecretCredential $ClientSecretCredential
 
Start-Sleep -Seconds 60
 
$users = Get-MgUser -All
 
$licenseInfo = @()
 
foreach ($user in $users) {
    $userLicenses = Get-MgUserLicenseDetail -UserId $user.Id
 
    foreach ($license in $userLicenses) {
        $licenseInfo += [PSCustomObject]@{
            UserPrincipalName = $user.UserPrincipalName
            SkuId             = $license.SkuId
        }
    }
}
$Date = (Get-Date -Format "yyyyMMdd")
$licenseInfo | Export-Csv -Path ("C:\CSV\LicenseBackup"+$date+".csv") -Encoding UTF8 -NoTypeInformation

 

 

 

명령어 실행 결과는 특이사항 없이 잘 실행 되었고

자격증명도 팝업되지 않았어요!

실행 결과 값으로 라이선스 파일도 잘 Export 되었구요

 

 

 

 

 

 

 

 

반응형