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

Azure의 서비스 주체는 애플리케이션, 서비스 및 자동화 도구에서 특정 Azure 리소스에 액세스하는 데 사용하는 ID를 제공하는 비대화형 계정입니다. 서비스 주체를 사용하여 인증하는 것은 수행할 수 있는 작업과 액세스할 수 있는 리소스를 제어하는 할당된 권한이 있는 보안 ID 역할을 하기 때문에 보안 스크립트를 작성하는 가장 좋은 방법입니다. 서비스 주체는 개인 사용자 계정을 사용하지 않고 관리 작업을 안전하게 자동화하여 Azure 리소스에 대한 보다 안전하고 관리 가능한 액세스를 용이하게 합니다. 다른 사용자 계정과 마찬가지로 Microsoft Entra를 사용하여 해당 권한을 관리합니다. 서비스 주체에게 필요한 권한만 부여하면 자동화 스크립트가 안전하게 유지됩니다.

필수 조건

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

서비스 주체로 로그인하려면 cmdlet의 ServicePrincipal 매개 변수를 Connect-AzAccount 사용합니다. 서비스 주체에 대한 다음 정보도 필요합니다.

  • AppId
  • 서비스 주체를 만드는 데 사용되는 인증서에 대한 로그인 자격 증명 또는 액세스
  • 테넌트 ID

서비스 보안 주체로 로그인하는 방법은 암호 기반 또는 인증서 기반 인증 중 어떤 것으로 구성되어 있는지에 따라 다릅니다.

암호 기반 인증

이 섹션의 예제와 함께 사용할 서비스 주체를 만듭니다. 서비스 주체를 만드는 방법에 대한 자세한 내용은 Azure PowerShell을 사용하여 Azure 서비스 주체 만들기를 참조하세요.

$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName

주의

제공된 서비스 주체 암호는 사용자 프로필($env:USERPROFILE\.Azure)의 AzureRmContext.json 파일에 저장됩니다. 이 디렉터리에 적절한 보호 기능이 있는지 확인합니다.

서비스 주체의 자격 증명을 개체로 얻으려면 cmdlet을 Get-Credential 사용합니다. 이 cmdlet은 사용자 이름 및 암호를 묻는 메시지를 표시합니다. 사용자 이름에 서비스 주체 AppId 를 사용하고 암호를 일반 텍스트로 변환 secret 합니다.

# Retrieve the plain text password for use with Get-Credential in the next command.
$sp.PasswordCredentials.SecretText

$pscredential = Get-Credential -UserName $sp.AppId
Connect-AzAccount -ServicePrincipal -Credential $pscredential -Tenant $tenantId

자동화 시나리오의 경우 서비스 주체 AppIdSecretText에서 자격 증명을 만들고 다음을 수행해야 합니다.

$SecureStringPwd = $sp.PasswordCredentials.SecretText | ConvertTo-SecureString -AsPlainText -Force
$pscredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $sp.AppId, $SecureStringPwd
Connect-AzAccount -ServicePrincipal -Credential $pscredential -Tenant $tenantId

서비스 주체 연결을 자동화할 때 적절한 암호 스토리지 사례를 사용합니다.

인증서 기반 인증

Azure PowerShell에 대한 서비스 주체를 만드는 방법을 알아보려면 Azure PowerShell을 사용하여 Azure 서비스 주체 만들기를 참조하세요.

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

Connect-AzAccount -ApplicationId $appId -Tenant $tenantId -CertificateThumbprint <thumbprint>

등록된 애플리케이션 대신 서비스 주체를 사용하는 경우 ServicePrincipal 매개 변수를 지정하고 서비스 주체의 AppId를 ApplicationId 매개 변수의 값으로 제공합니다.

Connect-AzAccount -ServicePrincipal -ApplicationId $servicePrincipalId -Tenant $tenantId -CertificateThumbprint <thumbprint>

Windows PowerShell 5.1에서는 PKI 모듈을 사용하여 인증서 저장소를 관리하고 검사할 수 있습니다. PowerShell 7.x 이상에서는 프로세스가 다릅니다. 다음 스크립트는 PowerShell에서 액세스할 수 있는 인증서 저장소로 기존 인증서를 가져오는 방법을 보여 줍니다.

Windows PowerShell 5.1에서 인증서 가져오기

# Import a PFX
$credentials = Get-Credential -Message 'Provide PFX private key password'
Import-PfxCertificate -FilePath <path to certificate> -Password $credentials.Password -CertStoreLocation cert:\CurrentUser\My

PowerShell 7.x 이상에서 인증서 가져오기

# Import a PFX
$storeName = [System.Security.Cryptography.X509Certificates.StoreName]::My
$storeLocation = [System.Security.Cryptography.X509Certificates.StoreLocation]::CurrentUser
$store = [System.Security.Cryptography.X509Certificates.X509Store]::new($storeName, $storeLocation)
$certPath = <path to certificate>
$credentials = Get-Credential -Message "Provide PFX private key password"
$flag = [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable
$certificate = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new($certPath, $credentials.Password, $flag)
$store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite)
$store.Add($Certificate)
$store.Close()

관리 ID를 사용하여 로그인

관리 ID는 Azure 서비스에 자동으로 관리 ID를 제공하는 특수한 유형의 서비스 주체입니다. 이 유형의 ID를 사용하면 관리 ID를 지원하는 Azure 서비스에 인증하기 위해 구성 또는 코드에 자격 증명을 저장할 필요가 없습니다.

두 가지 종류의 관리 ID가 있습니다.

  • 시스템 할당 관리 ID
  • 사용자 할당 관리 ID

관리 ID는 개발자가 자격 증명을 관리할 필요 없이 다른 Azure 서비스와 통신할 수 있는 안전한 방법을 제공합니다. 또한 자격 증명 누출의 위험을 완화하는 데 도움이 됩니다.

실제 시나리오에서 관리 ID가 작동하는 방법은 다음과 같습니다.

  • Azure는 관리 ID에서 사용하는 자격 증명의 생성 및 삭제를 자동으로 관리합니다.
  • 관리 ID로 사용하도록 설정된 Azure 서비스는 Microsoft Entra 토큰을 사용하여 Azure Key Vault, Azure SQL Database, Azure Blob Storage 등과 같은 다른 서비스에 안전하게 액세스할 수 있습니다.
  • 이 ID는 추가 프로비저닝 없이 Azure 내에서 직접 관리됩니다.

관리 ID는 자격 증명을 저장하고 관리할 필요가 없도록 하여 보안 모델을 간소화하며, 비밀 처리와 관련된 위험을 줄여 보안 클라우드 운영에서 중요한 역할을 합니다.

시스템 할당 관리 ID

Azure는 Azure 서비스 인스턴스(예: Azure VM, App Service 또는 Azure Functions)에 대한 시스템 할당 관리 ID를 자동으로 만듭니다. 서비스 인스턴스가 삭제되면 Azure는 자격 증명 및 서비스와 연결된 ID를 자동으로 클린.

다음 예제에서는 호스트 환경의 시스템 할당 관리 ID를 사용하여 연결합니다. 할당된 관리 ID가 있는 가상 머신에서 실행되는 경우 코드에서 할당된 ID를 사용하여 로그인할 수 있습니다.

 Connect-AzAccount -Identity

사용자 할당 관리 ID

사용자 할당 관리 ID는 Microsoft Entra에서 만들고 관리하는 ID입니다. 하나 이상의 Azure 서비스 인스턴스에 할당할 수 있습니다. 사용자 할당 관리 ID의 수명 주기는 할당된 서비스 인스턴스와 별도로 관리됩니다.

사용자 할당 관리 ID를 사용하는 경우 다음 예제와 같이 AccountId 매개 변수 및 IDENTITy 매개 변수를 지정해야 합니다.

 Connect-AzAccount -Identity -AccountId <user-assigned-identity-clientId-or-resourceId>

다음 명령은 .의 myUserAssignedIdentity관리 ID를 사용하여 연결합니다. 가상 머신에 사용자 할당 ID를 추가한 다음 사용자 할당 ID의 ClientId를 사용하여 연결합니다.

$identity = Get-AzUserAssignedIdentity -ResourceGroupName myResourceGroup -Name myUserAssignedIdentity
Get-AzVM -ResourceGroupName contoso -Name testvm | Update-AzVM -IdentityType UserAssigned -IdentityId $identity.Id
Connect-AzAccount -Identity -AccountId $identity.ClientId # Run on the virtual machine
Account                              SubscriptionName TenantId                             Environment
-------                              ---------------- --------                             -----------
00000000-0000-0000-0000-000000000000 My Subscription  00000000-0000-0000-0000-000000000000 AzureCloud

자세한 내용은 Azure VM에서 Azure 리소스에 대한 관리 ID 구성을 참조하세요.

참고 항목