다음을 통해 공유


Azure PowerShell을 사용하여 Azure 서비스 주체 만들기

Azure 서비스를 사용하도록 자동화된 도구에는 항상 제한된 권한이 있어야 합니다. 애플리케이션이 완전한 권한이 있는 사용자로 로그인하는 대신 Azure는 서비스 주체를 제공합니다.

Azure 서비스 주체는 애플리케이션, 호스팅된 서비스 및 자동화된 도구에서 사용하여 Azure 리소스에 액세스하기 위해 만든 ID입니다. 이 액세스는 서비스 주체에 할당된 역할로 제한되므로 액세스할 수 있는 리소스와 해당 수준을 제어할 수 있습니다. 보안상의 이유로 사용자 ID를 통해 로그인할 수 있게 하는 대신, 항상 자동화된 도구에서 서비스 주체를 사용하는 것이 좋습니다.

이 문서에서는 Azure PowerShell을 사용하여 서비스 주체를 만들고, 정보를 가져오고, 다시 설정하는 단계를 보여 줍니다.

주의

New-AzADServicePrincipal 명령을 사용하여 서비스 주체를 만들면 보호해야 하는 자격 증명이 출력에 포함됩니다. 또는 자격 증명을 사용할 필요가 없도록 관리 ID를 사용하는 것이 좋습니다.

필수 조건

서비스 주체 만들기

New-AzADServicePrincipal cmdlet을 사용하여 서비스 주체 만들기 서비스 주체를 만드는 경우 사용하는 로그인 인증 유형을 선택합니다.

Important

Az PowerShell 모듈 버전 7.x부터 New-AzADServicePrincipal은 더 이상 기본적으로 Contributor 역할을 서비스 주체에 할당하지 않습니다. 서비스 주체에게 특정 역할을 할당하려면 역할 할당을 추가하는 단계를 참조하세요.

참고 항목

계정에 서비스 주체를 만들 수 있는 권한이 없는 경우 New-AzADServicePrincipal에서 "권한이 부족하여 작업을 완료할 수 없음"이라는 오류 메시지를 반환합니다. Microsoft Entra 관리자에게 문의하여 서비스 주체를 만드세요.

사용자가 Microsoft Entra ID 디렉터리에서 사용자가 애플리케이션을 등록할 수 있음 설정을 없음으로 설정한 경우 다음 Microsoft Entra ID 기본 제공 역할(microsoft.directory/applications/createAsOwner 또는 microsoft.directory/applications/create 작업 포함) 중 하나의 구성원이어야 합니다.

Microsoft Entra ID의 사용자 설정에 관한 자세한 내용은 애플리케이션을 만들 수 있는 사용자 제한을 참조하세요.

서비스 주체에 사용할 수 있는 인증 유형에는 암호 기반 인증 및 인증서 기반 인증의 두 가지 유형이 있습니다.

암호 기반 인증

Important

암호 기반 인증 서비스 주체의 기본 역할은 기여자입니다. 이 역할에는 Azure 계정에서 읽고 쓸 수 있는 모든 권한이 있습니다. 역할 할당 관리에 대한 내용은 서비스 주체 역할 관리를 참조하세요.

다른 인증 매개 변수가 없으면 임의로 만든 암호를 통한 암호 기반 인증이 사용됩니다. 암호 기반 인증을 원하는 경우 이 메서드를 사용하는 것이 좋습니다.

$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName

반환된 개체는 생성된 암호를 포함하는 PasswordCredentials.SecretText 속성을 포함합니다. 서비스 주체로 인증하려면 이 값을 안전한 곳에서 저장하세요. 해당 값은 콘솔 출력에 표시되지 않습니다. 암호를 잊어버린 경우 서비스 주체 자격 증명을 다시 설정하세요.

다음 코드를 사용하면 비밀을 내보낼 수 있습니다.

$sp.PasswordCredentials.SecretText

New-AzADServicePrincipal에서 반환된 개체는 IdDisplayName 멤버를 포함하며, 이들은 서비스 주체로 로그인에 사용할 수 있는 멤버입니다.

Important

서비스 주체로 로그인하려면 서비스 주체가 생성된 테넌트 ID가 필요합니다. 서비스 주체를 만들 때 활성 테넌트를 얻으려면 서비스 주체 생성 직후에 다음 명령을 실행하세요.

(Get-AzContext).Tenant.Id

인증서 기반 인증

Important

인증서 기반 인증 서비스 주체를 만들 때에는 기본 역할이 할당되지 않습니다. 역할 할당 관리에 대한 내용은 서비스 주체 역할 관리를 참조하세요.

인증서 기반 인증을 사용하는 서비스 주체는 CertValue 매개 변수를 사용하여 만들어집니다. 이 매개 변수는 공용 인증서의 base64로 인코딩된 ASCII 문자열을 취합니다. 이는 PEM 파일 또는 텍스트 인코딩 CRT 또는 CER로 표시됩니다. 공용 인증서의 이진 인코딩은 지원되지 않습니다. 이러한 명령은 사용할 수 있는 인증서가 이미 있다고 가정합니다.

$cert = <public certificate as base64-encoded string>
$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName -CertValue $cert

New-AzADServicePrincipal에서 반환된 개체는 IdDisplayName 속성을 포함하며, 이들은 서비스 주체로 로그인에 사용할 수 있는 멤버입니다. 서비스 주체로 로그인하는 클라이언트는 인증서의 프라이빗 키에 액세스해야 합니다.

Important

서비스 주체로 로그인하려면 서비스 주체가 생성된 테넌트 ID가 필요합니다. 서비스 주체를 만들 때 활성 테넌트를 얻으려면 서비스 주체 생성 직후에 다음 명령을 실행하세요.

(Get-AzContext).Tenant.Id

기존 서비스 주체 가져오기

활성 테넌트의 서비스 주체 목록은 Get-AzADServicePrincipal을 사용하여 검색할 수 있습니다. 이 명령은 기본적으로 테넌트의 모든 서비스 주체를 반환합니다. 대규모 조직의 경우 결과를 반환하는 데 시간이 오래 걸릴 수 있습니다. 대신 선택적 서버 측 필터링 인수 중 하나를 사용하는 것이 좋습니다.

  • DisplayNameBeginsWith은 제공된 값과 일치하는 접두사가 있는 서비스 주체를 요청합니다. 서비스 주체의 표시 이름은 만드는 중에 DisplayName으로 설정된 값입니다.
  • DisplayName은 서비스 주체 이름과 정확히 일치하는 것을 요청합니다.

서비스 주체 역할 관리

Azure PowerShell은 역할 할당을 관리하는 다음과 같은 cmdlet이 있습니다.

RBAC(역할 기반 액세스 제어) 및 역할에 대한 자세한 내용은 RBAC: 기본 제공 역할을 참조하십시오.

다음 예제에서는 Reader 역할을 추가하고 Contributor 역할을 제거합니다.

New-AzRoleAssignment -ApplicationId <service principal application ID> -RoleDefinitionName 'Reader'
Remove-AzRoleAssignment -ObjectId <service principal object ID> -RoleDefinitionName 'Contributor'

Important

역할 할당 cmdlet은 서비스 사용자 주체 ID를 사용하지 않습니다. 생성 시 생성되는 관련 애플리케이션 ID를 사용합니다. 서비스 주체에 대한 애플리케이션 ID를 가져오려면 Get-AzADServicePrincipal을 사용합니다.

참고 항목

계정에 역할을 할당할 수 있는 권한이 없으면 계정에 "'Microsoft.Authorization/roleAssignments/write' 작업을 수행할 수 있는 권한이 없음"이라는 오류 메시지가 표시됩니다. 역할을 관리하려면 Microsoft Entra 관리자에게 문의하세요.

역할을 추가해도 이전에 할당된 권한은 제한되지 않습니다. 서비스 주체 권한을 제한할 때는 Contributor 역할을 제거해야 합니다.

변경 내용은 할당된 역할을 나열하여 확인할 수 있습니다.

Get-AzRoleAssignment -ServicePrincipalName ServicePrincipalName

서비스 주체를 사용하여 로그인

로그인하여 새 서비스 주체의 자격 증명과 권한을 테스트합니다. 서비스 주체로 로그인하려면 해당 서비스와 연결된 applicationId 값과 이 서비스가 생성된 테넌트가 필요합니다.

암호를 사용하는 서비스 주체로 로그인하려면 다음과 같습니다.

# Use the application ID as the username, and the secret as password
$credentials = Get-Credential
Connect-AzAccount -ServicePrincipal -Credential $credentials -Tenant <tenant ID>

인증서 기반 인증을 사용하려면 Azure PowerShell이 인증서 지문을 기반으로 로컬 인증서 저장소에서 정보를 검색할 수 있어야 합니다.

Connect-AzAccount -ServicePrincipal -Tenant <TenantId> -CertificateThumbprint <Thumbprint> -ApplicationId <ApplicationId>

PowerShell에서 액세스할 수 있는 Credential Store로 인증서를 가져오는 방법에 대한 지침은 인증서 기반 인증을 참조하세요.

자격 증명 다시 설정

서비스 주체의 자격 증명을 잊어버린 경우 New-AzADSpCredential을 통해 임의의 암호를 사용하는 새 자격 증명을 추가하세요. 이 cmdlet은 암호를 다시 설정할 때 사용자 정의 자격 증명을 지원하지 않습니다.

Important

새 자격 증명을 할당하기 전에 해당 로그인을 방지하기 위해 기존 자격 증명을 제거하는 것이 좋습니다. 이를 위해서는 Remove-AzADSpCredential cmdlet을 사용합니다.

Remove-AzADSpCredential -DisplayName ServicePrincipalName
$newCredential = New-AzADSpCredential -ServicePrincipalName ServicePrincipalName

문제 해결

"New-AzADServicePrincipal: identifierUris 속성에 대해 동일한 값을 가진 다른 개체가 이미 있습니다."라는 오류가 발생하면 이름이 같은 서비스 주체가 아직 없는지 확인합니다.

Get-AzAdServicePrincipal -DisplayName ServicePrincipalName

기존 서비스 주체가 더 이상 필요 없으면 다음 예제를 사용하여 제거할 수 있습니다.

Remove-AzAdServicePrincipal -DisplayName ServicePrincipalName

이전에 Azure Active Directory 애플리케이션에 대한 서비스 주체를 만든 경우에도 이 오류가 발생할 수 있습니다. 서비스 주체를 제거해도 애플리케이션을 계속 사용할 수 있습니다. 이 애플리케이션은 이름이 같은 또 다른 서비스 주체를 만들지 못하게 차단합니다.

다음 예제를 사용하여 이름이 같은 Microsoft Entra 애플리케이션이 존재하지 않는지 확인할 수 있습니다.

Get-AzADApplication -DisplayName ServicePrincipalName

이름이 같은 애플리케이션이 있는 경우 다음 예제를 사용하여 제거할 수 있습니다.

Remove-AzADApplication -DisplayName ServicePrincipalName

그렇지 않으면 만들려는 새 서비스 주체의 다른 이름을 선택합니다.