Azure PowerShell을 사용하여 Azure 서비스 주체 만들기Create an Azure service principal with Azure PowerShell

Azure PowerShell을 사용하여 앱 또는 서비스를 관리하려는 경우 고유한 자격 증명 대신 AAD(Azure Active Directory) 서비스 주체에서 실행해야 합니다.If you plan to manage your app or service with Azure PowerShell, you should run it under an Azure Active Directory (AAD) service principal, rather than your own credentials. 이 문서에서는 Azure PowerShell을 사용하여 보안 주체를 만드는 과정을 설명합니다.This article steps you through creating a security principal with Azure PowerShell.

注意

Azure Portal을 통해 서비스 주체를 만들 수도 있습니다.You can also create a service principal through the Azure portal. 자세한 내용은 포털을 사용하여 리소스에 액세스할 수 있는 Active Directory 응용 프로그램 및 서비스 주체 만들기를 참조하세요.Read Use portal to create Active Directory application and service principal that can access resources for more details.

'서비스 주체'란?What is a 'service principal'?

Azure 서비스 주체는 특정 Azure 리소스에 액세스하기 위해 사용자가 만든 앱, 서비스 및 자동화 도구에서 사용하는 보안 ID입니다.An Azure service principal is a security identity used by user-created apps, services, and automation tools to access specific Azure resources. 특정한 역할이 있는 '사용자 ID'(사용자 이름과 암호 또는 인증서)이며 엄격하게 제어됩니다.Think of it as a 'user identity' (username and password or certificate) with a specific role, and tightly controlled permissions. 일반 사용자 ID와 달리 서비스 주체는 특정 작업만 수행하면 됩니다.A service principal should only need to do specific things, unlike a general user identity. 해당 관리 작업을 수행하는 데 필요한 최소 사용 권한 수준을 부여하는 경우 보안이 향상됩니다.It improves security if you only grant it the minimum permissions level needed to perform its management tasks.

고유한 사용 권한 수준 확인Verify your own permission level

먼저 Azure Active Directory와 Azure 구독에 대한 충분한 권한이 있어야 합니다.First, you must have sufficient permissions in both your Azure Active Directory and your Azure subscription. Active Directory에서 앱을 만들고 서비스 주체에 역할을 할당할 수 있어야 합니다.You must be able to create an app in the Active Directory and assign a role to the service principal.

계정에 올바른 사용 권한이 있는지를 확인하는 가장 쉬운 방법은 포털을 통하는 것입니다.The easiest way to check whether your account has the right permissions is through the portal. 포털에서 필요한 사용 권한 확인을 참조하세요.See Check required permission in portal.

앱의 서비스 주체 만들기Create a service principal for your app

Azure 계정에 로그인하면 서비스 주체를 만들 수 있습니다.Once signed in to your Azure account, you can create the service principal. 다음 방법 중 하나로 배포된 앱을 식별해야 합니다.You must have one of the following ways to identify your deployed app:

  • 다음 예제에서 "MyDemoWebApp"와 같은 배포된 앱의 고유 이름 또는The unique name of your deployed app, such as "MyDemoWebApp" in the following examples, or
  • 응용 프로그램 ID, 배포된 앱, 서비스 또는 개체와 관련된 고유 GUIDthe Application ID, the unique GUID associated with your deployed app, service, or object

응용 프로그램에 대한 정보 가져오기Get information about your application

Get-AzureRmADApplication cmdlet을 사용하여 응용 프로그램에 대한 정보를 가져올 수 있습니다.The Get-AzureRmADApplication cmdlet can be used to get information about your application.

Get-AzureRmADApplication -DisplayNameStartWith MyDemoWebApp
DisplayName             : MyDemoWebApp
ObjectId                : 775f64cd-0ec8-4b9b-b69a-8b8946022d9f
IdentifierUris          : {http://MyDemoWebApp}
HomePage                : http://www.contoso.com
Type                    : Application
ApplicationId           : 00c01aaa-1603-49fc-b6df-b78c4e5138b4
AvailableToOtherTenants : False
AppPermissions          :
ReplyUrls               : {}

응용 프로그램의 서비스 주체 만들기Create a service principal for your application

New-AzureRmADServicePrincipal cmdlet을 사용하여 서비스 주체를 만듭니다.The New-AzureRmADServicePrincipal cmdlet is used to create the service principal.

Add-Type -Assembly System.Web
$password = [System.Web.Security.Membership]::GeneratePassword(16,3)
$securePassword = ConvertTo-SecureString -Force -AsPlainText -String $password
New-AzureRmADServicePrincipal -ApplicationId 00c01aaa-1603-49fc-b6df-b78c4e5138b4 -Password $securePassword
DisplayName                    Type                           ObjectId
-----------                    ----                           --------
MyDemoWebApp                   ServicePrincipal               698138e7-d7b6-4738-a866-b4e3081a69e4

서비스 주체에 대한 정보 가져오기Get information about the service principal

$svcprincipal = Get-AzureRmADServicePrincipal -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4
$svcprincipal | Select-Object *
ServicePrincipalNames : {http://MyDemoWebApp, 00c01aaa-1603-49fc-b6df-b78c4e5138b4}
ApplicationId         : 00c01aaa-1603-49fc-b6df-b78c4e5138b4
DisplayName           : MyDemoWebApp
Id                    : 698138e7-d7b6-4738-a866-b4e3081a69e4
Type                  : ServicePrincipal

서비스 주체를 사용하여 로그인Sign in using the service principal

이제 제공한 appId암호를 사용하여 앱에 새로운 서비스 주체로 로그인할 수 있습니다.You can now sign in as the new service principal for your app using the appId and password you provided. 또한 서비스 주체에 대한 테넌트 ID가 필요합니다.You also need the Tenant ID for the service principal. 개인 자격 증명을 사용하여 Azure에 로그인하는 경우 테넌트 ID가 표시됩니다.Your Tenant ID is displayed when you sign into Azure with your personal credentials. 서비스 주체로 로그인하려면 다음 명령을 사용합니다.To sign in with a service principal, use the following commands:

$cred = Get-Credential -UserName $svcprincipal.ApplicationId -Message "Enter Password"
Connect-AzureRmAccount -Credential $cred -ServicePrincipal -TenantId XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

로그인이 성공한 후 다음과 같은 출력이 표시됩니다.After a successful sign-in you see output like:

Environment           : AzureCloud
Account               : 00c01aaa-1603-49fc-b6df-b78c4e5138b4
TenantId              : XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
SubscriptionId        :
SubscriptionName      :
CurrentStorageAccount :

축하합니다!Congratulations! 이러한 자격 증명을 사용하여 앱을 실행할 수 있습니다.You can use these credentials to run your app. 다음으로 서비스 주체의 사용 권한을 조정해야 합니다.Next, you need to adjust the permissions of the service principal.

역할 관리Managing roles

注意

Azure 역할 기반 Access Control(RBAC)은 사용자 및 서비스 주체에 대한 역할을 정의하고 관리하기 위한 모델입니다.Azure Role-Based Access Control (RBAC) is a model for defining and managing roles for user and service principals. 역할에는 그와 관련된 일련의 사용 권한이 있으며 여기서 주체가 읽고 액세스하고 쓰고 관리할 수 있는 리소스를 결정합니다.Roles have sets of permissions associated with them, which determine the resources a principal can read, access, write, or manage. RBAC와 역할에 대한 자세한 내용은 RBAC: 기본 제공 역할을 참조하세요.For more information on RBAC and roles, see RBAC: Built-in roles.

Azure PowerShell은 역할 할당을 관리하는 다음과 같은 cmdlet을 제공합니다.Azure PowerShell provides the following cmdlets to manage role assignments:

서비스 주체의 기본 역할은 참가자입니다.The default role for a service principal is Contributor. 광범위한 사용 권한을 고려하면 Azure 서비스와 앱의 상호 작용의 범위에 따라 최상의 선택이 아닐 수도 있습니다.It may not be the best choice depending on the scope of your app's interactions with Azure services, given its broad permissions. 판독기 역할은 더 제한적이며 읽기 전용 앱의 경우에 좋은 선택이 될 수 있습니다.The Reader role is more restrictive and can be a good choice for read-only apps. 역할 관련 사용 권한에 대한 세부 정보를 보거나 Azure Portal을 통해 사용자 지정 레코드를 만들 수 있습니다.You can view details on role-specific permissions or create custom ones through the Azure portal.

이 예제에서는 판독기 역할을 이전 예제에 추가하고 참가자 역할을 삭제합니다.In this example, we add the Reader role to our prior example, and delete the Contributor one:

New-AzureRmRoleAssignment -ResourceGroupName myRG -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4 -RoleDefinitionName Reader
RoleAssignmentId   : /subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourceGroups/myRG/providers/Microsoft.Authorization/roleAssignments/818892f2-d075-46a1-a3a2-3a4e1a12fcd5
Scope              : /subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourceGroups/myRG
DisplayName        : MyDemoWebApp
SignInName         :
RoleDefinitionName : Reader
RoleDefinitionId   : b24988ac-6180-42a0-ab88-20f7382dd24c
ObjectId           : 698138e7-d7b6-4738-a866-b4e3081a69e4
ObjectType         : ServicePrincipal
Remove-AzureRmRoleAssignment -ResourceGroupName myRG -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4 -RoleDefinitionName Contributor

현재 할당된 역할을 보려면:To view the current roles assigned:

Get-AzureRmRoleAssignment -ResourceGroupName myRG -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4
RoleAssignmentId   : /subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourceGroups/myRG/providers/Microsoft.Authorization/roleAssignments/0906bbd8-9982-4c03-8dae-aeaae8b13f9e
Scope              : /subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourceGroups/myRG
DisplayName        : MyDemoWebApp
SignInName         :
RoleDefinitionName : Reader
RoleDefinitionId   : acdd72a7-3385-48ef-bd42-f606fba81ae7
ObjectId           : 698138e7-d7b6-4738-a866-b4e3081a69e4
ObjectType         : ServicePrincipal

역할 관리를 위한 기타 Azure PowerShell cmdlet:Other Azure PowerShell cmdlets for role management:

보안 주체의 자격 증명 변경Change the credentials of the security principal

사용 권한을 검토하고 암호를 정기적으로 업데이트하는 좋은 보안 방법입니다.It's a good security practice to review the permissions and update the password regularly. 앱이 변경되면 보안 자격 증명을 관리하고 수정할 수도 있습니다.You may also want to manage and modify the security credentials as your app changes. 예를 들어, 새 암호를 만들고 이전 암호를 제거하여 서비스 주체의 암호를 변경할 수 있습니다.For example, we can change the password of the service principal by creating a new password and removing the old one.

서비스 주체의 새 암호 추가Add a new password for the service principal

$password = [System.Web.Security.Membership]::GeneratePassword(16,3)
New-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp -Password $password
StartDate           EndDate             KeyId                                Type
---------           -------             -----                                ----
3/8/2017 5:58:24 PM 3/8/2018 5:58:24 PM 6f801c3e-6fcd-42b9-be8e-320b17ba1d36 Password

서비스 주체의 자격 증명 목록 가져오기Get a list of credentials for the service principal

Get-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp
StartDate           EndDate             KeyId                                Type
---------           -------             -----                                ----
3/8/2017 5:58:24 PM 3/8/2018 5:58:24 PM 6f801c3e-6fcd-42b9-be8e-320b17ba1d36 Password
5/5/2016 4:55:27 PM 5/5/2017 4:55:27 PM ca9d4846-4972-4c70-b6f5-a4effa60b9bc Password

서비스 주체에게서 이전 암호 제거Remove the old password from the service principal

Remove-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp -KeyId ca9d4846-4972-4c70-b6f5-a4effa60b9bc
Confirm
Are you sure you want to remove credential with keyId '6f801c3e-6fcd-42b9-be8e-320b17ba1d36' for
service principal objectId '698138e7-d7b6-4738-a866-b4e3081a69e4'.
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): Y

서비스 주체의 자격 증명 목록 확인Verify the list of credentials for the service principal

Get-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp
StartDate           EndDate             KeyId                                Type
---------           -------             -----                                ----
3/8/2017 5:58:24 PM 3/8/2018 5:58:24 PM 6f801c3e-6fcd-42b9-be8e-320b17ba1d36 Password