다음을 통해 공유


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

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

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

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

주의

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

필수 구성 요소

  • Azure PowerShell을 로컬로 사용하도록 선택한 경우:
  • Azure Cloud Shell을 사용하도록 선택한 경우:
    • 자세한 내용은 Azure Cloud Shell 개요를 참조하세요.

서비스 주체 만들기

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

중요하다

Az PowerShell 모듈 버전 7.x부터 New-AzADServicePrincipal 기본적으로 기여자 역할을 서비스 주체에 더 이상 할당하지 않습니다. 서비스 주체에 특정 역할을 할당하려면, 단계에서 역할 할당을 추가하는 방법을에서 확인하세요.

메모

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

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

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

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

암호 기반 인증

중요하다

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

다른 인증 매개 변수가 없으면 암호 기반 인증이 사용되고 임의의 암호가 생성됩니다. 암호 기반 인증을 원하는 경우 이 방법을 사용하는 것이 좋습니다.

$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName

반환된 개체에는 생성된 암호를 포함하는 PasswordCredentials.SecretText 속성이 포함됩니다. 서비스 주체를 사용하여 인증할 수 있도록 이 값을 안전한 위치에 저장해야 합니다. 콘솔 출력에 값은 표시되지 않습니다. 암호를 분실한 경우, 서비스 주체 자격 증명을다시 재설정하십시오.

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

$sp.PasswordCredentials.SecretText

반환된 New-AzADServicePrincipal 개체에는 서비스 주체로 로그인을 할 수 있는 IdDisplayName 멤버가 포함되어 있으며, 이 둘 중 하나를 사용할 수 있습니다.

중요하다

서비스 주체 계정으로 로그인하려면 서비스 주체가 생성된 테넌트 ID가 필요합니다. 서비스 주체가 생성되었을 때 활성 테넌트에 액세스하려면 서비스 주체 생성 직후에 다음 명령 을(를) 실행하십시오.

(Get-AzContext).Tenant.Id

인증서 기반 인증

중요하다

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

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

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

반환된 New-AzADServicePrincipal 개체에는 IdDisplayName 속성이 포함되어 있으며, 둘 중 하나를 사용하여 서비스 주체로 로그인할 수 있습니다. 서비스 주체로 로그인하는 클라이언트도 인증서의 프라이빗 키에 액세스해야 합니다.

중요하다

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

(Get-AzContext).Tenant.Id

기존 서비스 주체 가져오기

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

  • 제공된 값과 일치하는 접두사가 있는 서비스 주체를 DisplayNameBeginsWith에서 요청합니다. 서비스 주체의 표시 이름은 생성 시 DisplayName을 사용하여 설정한 값입니다.
  • DisplayName는 서비스 주체 이름의 정확히 일치하는를 요청합니다.

서비스 주체 역할 관리

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

RBAC(Role-Based 액세스 제어) 및 역할에 대해 더 많은 정보를 원하시면 RBAC: 기본 제공 역할을 참조하십시오.

다음 예제에서는 읽기 권한자 역할을 추가하고 기여자 역할을 제거합니다.

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

중요하다

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

메모

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

역할 을 추가한다고 해서 이전에 할당된 사용 권한을 제한하지 않습니다. 서비스 주체의 권한을 제한할 때 기여자 역할을 제거해야 합니다.

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

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에서 액세스할 수 있는 자격 증명 저장소로 인증서를 가져오는 방법에 대한 지침은 인증서 기반 인증

자격 증명 다시 설정

서비스 주체에 대한 자격 증명을 잊어버린 경우 New-AzADSpCredential 사용하여 임의 암호로 새 자격 증명을 추가합니다. 이 cmdlet은 암호를 재설정할 때 사용자 정의 자격 증명을 지원하지 않습니다.

중요하다

새 자격 증명을 할당하기 전에 기존 자격 증명을 제거하여 로그인을 방지할 수 있습니다. 이렇게 하려면 Remove-AzADSpCredential cmdlet을 사용합니다.

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

문제 해결

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

Get-AzAdServicePrincipal -DisplayName ServicePrincipalName

기존 서비스 주체가 더 이상 필요하지 않은 경우 다음 예제를 사용하여 제거할 수 있습니다.

Remove-AzAdServicePrincipal -DisplayName ServicePrincipalName

이 오류는 이전에 Azure Active Directory 애플리케이션에 대한 서비스 주체를 만든 경우에도 발생할 수 있습니다. 서비스 주체를 제거하면 애플리케이션을 계속 사용할 수 있습니다. 이 애플리케이션을 사용하면 동일한 이름의 다른 서비스 주체를 만들 수 없습니다.

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

Get-AzADApplication -DisplayName ServicePrincipalName

이름이 같은 애플리케이션이 있고 더 이상 필요하지 않은 경우 다음 예제를 사용하여 제거할 수 있습니다.

Remove-AzADApplication -DisplayName ServicePrincipalName

그렇지 않은 경우 만들려는 새 서비스 주체의 대체 이름을 선택합니다.