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

Warning

AzureRM PowerShell 모듈은 2024년 2월 29일부터 공식적으로 사용되지 않습니다. 사용자는 지속적인 지원 및 업데이트를 보장하기 위해 AzureRM에서 Az PowerShell 모듈로 마이그레이션하는 것이 좋습니다.

AzureRM 모듈은 여전히 작동할 수 있지만 더 이상 기본 또는 지원되지 않으므로 사용자의 재량에 따라 계속 사용할 수 있습니다. Az 모듈로 전환하는 방법에 대한 지침은 마이그레이션 리소스를 참조하세요.

Azure PowerShell을 사용하여 앱 또는 서비스를 관리하려는 경우 사용자 자격 증명이 아닌 Azure Microsoft Entra 서비스 주체에서 실행해야 합니다. 이 문서에서는 Azure PowerShell을 사용하여 보안 주체를 만드는 과정을 설명합니다.

참고 항목

Azure Portal을 통해 서비스 주체를 만들 수도 있습니다. 자세한 내용은 포털을 사용하여 리소스에 액세스할 수 있는 Active Directory 애플리케이션 및 서비스 주체 만들기를 참고하세요.

'서비스 주체'란?

Azure 서비스 주체는 사용자가 만든 앱, 서비스 및 자동화 도구에서 특정 Azure 리소스에 액세스하는 데 사용하는 보안 ID입니다. 특정한 역할이 있는 '사용자 ID'(사용자 이름과 암호 또는 인증서)이며 엄격하게 통제된 권한을 갖습니다. 일반 사용자 ID와 달리 서비스 주체는 특정 작업만 수행하면 됩니다. 관리 작업을 수행하는 데 필요한 최소 권한 수준만 부여하면 보안이 향상됩니다.

사용자 고유의 권한 수준 확인

먼저 Microsoft Entra ID와 Azure 구독 모두에 충분한 권한이 있어야 합니다. Active Directory에서 앱을 만들고 서비스 주체에 역할을 할당할 수 있어야 합니다.

계정에 올바른 권한이 있는지 여부를 검사 가장 쉬운 방법은 포털을 통해서입니다. 필요한 사용 권한 확인을 참조하세요.

앱에 대한 서비스 주체 만들기

Azure 계정에 로그인하면 서비스 주체를 만들 수 있습니다. 다음 방법 중 하나로 배포된 앱을 식별해야 합니다.

  • 다음 예제처럼 "MyDemoWebApp"와 같은 배포된 앱의 고유 이름
  • 애플리케이션 ID, 배포된 앱, 서비스 또는 개체와 연결된 고유 GUID

애플리케이션에 대한 정보 가져오기

cmdlet을 Get-AzureRmADApplication 사용하여 애플리케이션에 대한 정보를 가져올 수 있습니다.

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               : {}

애플리케이션의 서비스 주체 만들기

cmdlet New-AzureRmADServicePrincipal 은 서비스 주체를 만드는 데 사용됩니다.

$servicePrincipal = New-AzureRmADServicePrincipal -ApplicationId 00c01aaa-1603-49fc-b6df-b78c4e5138b4
Secret                : System.Security.SecureString
ServicePrincipalNames : {00c01aaa-1603-49fc-b6df-b78c4e5138b4, http://MyDemoWebApp}
ApplicationId         : 00c01aaa-1603-49fc-b6df-b78c4e5138b4
DisplayName           : MyDemoWebApp
Id                    : 698138e7-d7b6-4738-a866-b4e3081a69e4
AdfsId                :
Type                  : ServicePrincipal

여기에서 커넥트-AzureRmAccount에서 $servicePrincipal.Secret 속성을 직접 사용하거나(아래의 "서비스 주체를 사용하여 로그인" 참조) 나중에 사용할 수 있도록 이 SecureString을 일반 텍스트 문자열로 변환할 수 있습니다.

$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($servicePrincipal.Secret)
$password = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
[Runtime.InteropServices.Marshal]::ZeroFreeBSTR($BSTR)

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

이제 사용자가 제공한 appId자동으로 생성된 암호를 사용하여 앱의 새 서비스 주체로 로그인할 수 있습니다. 서비스 주체에 대한 테넌트 ID도 필요합니다. 개인 자격 증명을 사용하여 Azure에 로그인하면 테넌트 ID가 표시됩니다. 서비스 주체로 로그인하려면 다음 명령을 사용합니다.

$cred = New-Object System.Management.Automation.PSCredential ("00c01aaa-1603-49fc-b6df-b78c4e5138b4", $servicePrincipal.Secret)
Connect-AzureRmAccount -Credential $cred -ServicePrincipal -TenantId 00000000-0000-0000-0000-000000000000

로그인에 성공하면 다음과 같은 출력이 표시됩니다.

Environment           : AzureCloud
Account               : 00c01aaa-1603-49fc-b6df-b78c4e5138b4
TenantId              : 00000000-0000-0000-0000-000000000000
SubscriptionId        :
SubscriptionName      :
CurrentStorageAccount :

축하합니다! 이러한 자격 증명을 사용하여 앱을 실행할 수 있습니다. 다음으로 서비스 주체의 권한을 조정해야 합니다.

역할 관리

참고 항목

Azure RBAC(역할 기반 액세스 제어)는 사용자 및 서비스 주체에 대한 역할을 정의하고 관리하기 위한 모델입니다. 역할에는 보안 주체가 읽고, 액세스하거나, 쓰거나, 관리할 수 있는 리소스를 결정하는 권한 집합이 연결되어 있습니다. RBAC 및 역할에 대한 자세한 내용은 RBAC: 기본 제공 역할을 참조 하세요.

Azure PowerShell은 역할 할당을 관리하는 다음 cmdlet을 제공합니다.

서비스 주체의 기본 역할은 기여자입니다. 광범위한 사용 권한이 있는 경우 앱이 Azure 서비스와 상호 작용하는 범위에 따라 최선의 선택이 아닐 수 있습니다. 읽기 권한자 역할은 더 제한적이며 읽기 전용 앱에 적합할 수 있습니다. 역할 관련 사용 권한에 대한 세부 정보를 보거나 Azure Portal을 통해 사용자 지정 레코드를 만들 수 있습니다.

이 예제에서는 이전 예제에 읽기 권한자 역할을 추가하고 참가자 역할을 삭제합니다.

New-AzureRmRoleAssignment -ResourceGroupName myRG -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4 -RoleDefinitionName Reader
RoleAssignmentId   : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG/providers/Microsoft.Authorization/roleAssignments/818892f2-d075-46a1-a3a2-3a4e1a12fcd5
Scope              : /subscriptions/00000000-0000-0000-0000-000000000000/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

할당된 현재 역할을 보려면 다음을 수행합니다.

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

역할 관리를 위한 다른 Azure PowerShell cmdlet:

보안 주체의 자격 증명 변경

사용 권한을 검토하고 정기적으로 암호를 업데이트하는 것이 좋은 보안 방법입니다. 앱이 변경될 때 보안 자격 증명을 관리하고 수정할 수도 있습니다. 예를 들어, 새 암호를 만들고 이전 암호를 제거하여 서비스 주체의 암호를 변경할 수 있습니다.

서비스 주체의 새 암호 추가

New-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp
Secret    : System.Security.SecureString
StartDate : 11/16/2018 12:38:23 AM
EndDate   : 11/16/2019 12:38:23 AM
KeyId     : 6f801c3e-6fcd-42b9-be8e-320b17ba1d36
Type      : Password

서비스 주체에 대한 자격 증명 목록 가져오기

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-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

서비스 주체에 대한 자격 증명 목록 확인

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

서비스 주체에 대한 정보 가져오기

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