Microsoft ID 플랫폼이 Microsoft Entra 또는 Microsoft 365 테넌트에 저장된 데이터에 앱이 액세스하도록 권한을 부여하려면, 먼저 해당 앱이 Microsoft Entra ID에 등록되어 있어야 합니다. 이 조건은 사용자가 직접 개발하거나, 테넌트가 소유하거나, 활성 구독을 통해 액세스하는 앱에 적용됩니다.
앱에 대한 많은 설정은 Microsoft Entra PowerShell을 사용하여 액세스, 업데이트 또는 삭제할 수 있는 개체로 기록됩니다. 이러한 개체에는 애플리케이션, 서비스 주체 및 앱 역할 할당이 포함됩니다.
이 문서에서는 Microsoft Entra PowerShell을 사용하여 앱 등록 및 서비스 주체 개체를 관리하는 방법을 알아봅니다. 애플리케이션 등록, 속성 구성, 권한 할당 및 앱 소유권 관리에 대해 설명합니다.
사전 요구 사항
Microsoft Entra PowerShell을 사용하여 앱을 관리하려면 다음이 필요합니다.
- Microsoft Entra 사용자 계정. 계정이 아직 없는 경우 계정을 무료로 만들 수 있습니다.
- 다음 역할 중 하나입니다.
- 해당 작업에 대해 표시된 가장 낮은 수준의 위임 권한을 본인에게 부여하세요.
- Microsoft Entra PowerShell 모듈이 설치되었습니다. Microsoft Entra PowerShell 모듈 설치 가이드에 따라 모듈을 설치합니다.
애플리케이션 등록
다음 요청은 필수 displayName 속성만 지정하여 앱을 만듭니다.
Connect-Entra -Scopes 'Application.ReadWrite.All'
New-EntraApplication -DisplayName 'My new application'
DisplayName Id AppId SignInAudience PublisherDomain
----------- -- ----- -------------- -----------
My new application aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb bbbbbbbb-1111-2222-3333-cccccccccccc MyOrg
애플리케이션에는 테넌트의 앱에 대해 고유한 ID와 Microsoft Entra 에코시스템에서 전역적으로 고유한 appId가 할당됩니다.
애플리케이션에 대한 서비스 주체 만들기
Connect-Entra -Scopes 'Application.ReadWrite.All'
$myApp = Get-EntraApplication -Filter "DisplayName eq 'My new application'"
New-EntraServicePrincipal -AppId $myApp.AppId -DisplayName 'My new service principal'
DisplayName Id AppId SignInAudience ServicePrincipalType
----------- -- ----- -------------- --------------------
My new application bbbbbbbb-1111-2222-3333-cccccccccccc 00001111-aaaa-2222-bbbb-3333cccc4444 MyOrg Application
앱의 기본 속성 구성
앱에 대해 여러 속성을 구성할 수 있습니다. 다음 예제에서는 애플리케이션의 표시 이름을 업데이트하는 방법을 보여줍니다.
Connect-Entra -Scopes 'Application.ReadWrite.All'
$application = Get-EntraApplication -Filter "DisplayName eq 'My new application'"
Set-EntraApplication -ApplicationId $application.Id -DisplayName 'Contoso application'
또는 파이프라닝을 사용하여 애플리케이션의 속성을 업데이트합니다.
Connect-Entra -Scopes 'Application.ReadWrite.All'
Get-EntraApplication -Filter "DisplayName eq 'My new application'" | Set-EntraApplication -DisplayName 'Contoso application'
자세한 내용은 Set-EntraApplication을 참조하세요.
앱 로그인을 할당된 ID로만 제한
Microsoft Entra PowerShell을 사용하여 앱 로그인을 할당된 ID로만 제한하면 권한 있는 사용자만 애플리케이션에 액세스할 수 있으므로 보안 및 제어가 향상됩니다.
Connect-Entra -Scopes 'Application.ReadWrite.All'
$application = Get-EntraApplication -Filter "DisplayName eq 'My new application'"
Set-EntraServicePrincipal -ServicePrincipalId $application.Id -AppRoleAssignmentRequired $true
앱에 권한 할당
Microsoft Entra 관리 센터 통해 또는 Microsoft Entra PowerShell을 사용하여 앱에 권한을 할당합니다. PowerShell에서는 기존 권한과 새 권한을 모두 포함하여 앱의 requiredResourceAccess 속성을 업데이트합니다. 새 권한만 전달하면 동의하지 않는 기존 사용 권한만 제거됩니다.
권한을 할당해도 앱에 권한이 자동으로 부여되지는 않습니다. 여전히 Microsoft Entra 관리 센터 사용하여 관리자 동의를 부여해야 합니다.
Connect-Entra -Scopes 'Application.ReadWrite.All'
$application = Get-EntraApplication -Filter "DisplayName eq 'My new application'"
$requiredResourceAccess = @(
@{resourceAppId = '00000003-0000-0000-c000-000000000000'
resourceAccess = @(
@{
id = 'c79f8feb-a9db-4090-85f9-90d820caa0eb'
type = 'Scope'
}
@{
id = '9a5d68dd-52b0-4cc2-bd40-abcf44ac3a30'
type = 'Role'
} )
})
Set-EntraApplication -ApplicationId $application.Id -RequiredResourceAccess $requiredResourceAccess
소유자 관리
서비스 주체의 소유자 검색
Connect-Entra -Scopes 'Application.ReadWrite.All'
$servicePrincipal = Get-EntraServicePrincipal -Filter "displayName eq 'Helpdesk Application'"
Get-EntraServicePrincipalOwner -ServicePrincipalId $servicePrincipal.Id -All | Select-Object Id, DisplayName, '@odata.type'
또는 파이프라닝을 사용하여 서비스 주체의 소유자를 검색합니다.
Get-EntraServicePrincipal -Filter "displayName eq 'Helpdesk Application'" | Get-EntraServicePrincipalOwner | Select-Object Id, DisplayName, '@odata.type'
서비스 주체에 소유자를 할당
Connect-Entra -Scopes 'Application.ReadWrite.All', 'Application.ReadWrite.OwnedBy'
$servicePrincipal = Get-EntraServicePrincipal -Filter "displayName eq 'Helpdesk Application'"
$owner = Get-EntraUser -UserId 'SawyerM@contoso.com'
Add-EntraServicePrincipalOwner -ServicePrincipalId $servicePrincipal.Id -OwnerId $owner.Id
이 예제에서는 서비스 주체에 소유자를 추가하는 방법을 보여줍니다.
-
-ServicePrincipalId- 소유자를 추가할 서비스 주체의 고유 식별자(ObjectId)를 지정합니다. -
-OwnerId- 지정된 서비스 주체의 소유자로 추가하려는 사용자 또는 그룹의 고유 식별자(ObjectId)를 지정합니다.
사용자 할당 없이 모든 애플리케이션 목록 가져오기
사용자 할당이 필요하지 않은 모든 애플리케이션 목록을 얻으려면 다음 명령을 사용합니다.
Connect-Entra -Scopes 'Application.ReadWrite.All'
Get-EntraServicePrincipal -All | Where-Object {$_.appRoleAssignmentRequired -ne 'True'}
DisplayName Id AppId SignInAudience ServicePrincipalType
----------------------------------- ----------------------------------- --------------------------------- ----------------- ------------------
Microsoft password reset service 00aa00aa-bb11-cc22-dd33-44ee44ee44ee 93625bc8-bfe2-437a-97e0-3d0060024faa AzureADMultipleOrgs Application
Microsoft.Azure.SyncFabric 11bb11bb-cc22-dd33-ee44-55ff55ff55ff 00000014-0000-0000-c000-000000000000 AzureADMultipleOrgs Application
Azure Security Insights 22cc22cc-dd33-ee44-ff55-66aa66aa66aa 98785600-1bb7-4fb9-b9fa-19afe2c8a360 AzureADMultipleOrgs Application
서비스 주체가 소유하거나 만든 개체 검색
서비스 주체가 만든 개체
Connect-Entra -Scopes 'Application.Read.All'
$servicePrincipal = Get-EntraServicePrincipal -Filter "displayName eq 'Helpdesk Application'"
Get-EntraServicePrincipalCreatedObject -ServicePrincipalId $servicePrincipal.Id
서비스 주체가 소유한 개체
Connect-Entra -Scopes 'Application.Read.All'
$servicePrincipal = Get-EntraServicePrincipal -Filter "displayName eq 'Helpdesk Application'"
Get-EntraServicePrincipalOwnedObject -ServicePrincipalId $servicePrincipal.Id -All | Select-Object Id, DisplayName, '@odata.type'
만료되는 비밀 및 인증서가 있는 애플리케이션
애플리케이션 비밀 또는 암호 만료
$expirationThreshold = (Get-Date).AddDays(30)
$appsWithExpiringPasswords = Get-EntraApplication -All | Where-Object { $_.PasswordCredentials } |
ForEach-Object {
$app = $_
$app.PasswordCredentials | Where-Object { $_.EndDate -le $expirationThreshold } |
ForEach-Object {
[PSCustomObject]@{
DisplayName = $app.DisplayName
AppId = $app.AppId
SecretDisplayName = $_.DisplayName
KeyId = $_.KeyId
ExpiringSecret = $_.EndDate
}
}
}
$appsWithExpiringPasswords | Format-Table DisplayName, AppId, SecretDisplayName, KeyId, ExpiringSecret -AutoSize
인증서 만료
$expirationThreshold = (Get-Date).AddDays(30)
$appsWithExpiringKeys = Get-EntraApplication -All | Where-Object { $_.KeyCredentials } |
ForEach-Object {
$app = $_
$app.KeyCredentials | Where-Object { $_.EndDate -le $expirationThreshold } |
ForEach-Object {
[PSCustomObject]@{
DisplayName = $app.DisplayName
AppId = $app.AppId
CertificateDisplayName = $_.DisplayName
KeyId = $_.KeyId
ExpiringKeys = $_.EndDate
}
}
}
$appsWithExpiringKeys | Format-Table DisplayName, AppId, CertificateDisplayName, KeyId, ExpiringKeys -AutoSize