자동화 시나리오를 위해 비대화형으로 Azure PowerShell에 로그인
Azure의 서비스 주체(Service Principal)는 애플리케이션, 서비스 및 자동화 도구에서 특정 Azure 리소스에 액세스하는 데 사용하는 ID를 제공하는 비대화형 계정입니다. 서비스 주체를 사용하여 인증하는 것은 수행할 수 있는 작업과 액세스할 수 있는 리소스를 제어하는 할당된 권한이 있는 보안 ID 역할을 하기 때문에 보안 스크립트를 작성하는 가장 좋은 방법입니다. 서비스 주체는 개인 사용자 계정을 사용하지 않고 관리 작업을 안전하게 자동화하여 Azure 리소스에 대한 보다 안전하고 관리 가능한 액세스를 용이하게 합니다. 다른 사용자 계정과 마찬가지로 Microsoft Entra를 사용하여 해당 권한을 관리합니다. 서비스 주체에게 필요한 권한만 부여하면 자동화 스크립트가 안전하게 유지됩니다.
필수 구성 요소
- 최신 버전의 Az PowerShell 모듈설치합니다.
관리 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 VMAzure 리소스에 대한 관리 ID 구성을 참조하세요.
서비스 주체 계정으로 로그인
서비스 주체로 로그인하려면 Connect-AzAccount
cmdlet의 ServicePrincipal 매개 변수를 사용합니다. 서비스 주체에 대한 다음 정보도 필요합니다.
- AppId
- 서비스 주체를 생성하는 데 사용되는 인증서에 대한 로그인 정보 또는 접근 권한
- 임차인 ID
서비스 주체를 사용하여 로그인하는 방법은 인증서 기반 인증 또는 암호 기반 인증에 대해 구성되었는지 여부에 따라 달라집니다.
인증서 기반 인증
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에서 액세스할 수 있는 인증서 저장소로 기존 인증서를 가져오는 방법을 보여 줍니다.
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()
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
암호 기반 인증
이 섹션의 예제와 함께 사용할 서비스 주체를 만듭니다. 서비스 주체를 만드는 방법에 대한 자세한 내용은 Azure PowerShell사용하여 Azure 서비스 주체 만들기를 참조하세요.
$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName
주의
제공된 서비스 주체 암호는 사용자 프로필($env:USERPROFILE\.Azure
)의 AzureRmContext.json
파일에 저장됩니다. 이 디렉터리에 적절한 보호 기능이 있는지 확인합니다.
서비스 주체의 자격 증명을 개체로 얻으려면 Get-Credential
cmdlet을 사용합니다. 이 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
자동화 시나리오의 경우, 서비스 주체의 AppId
및 SecretText
로부터 자격 증명을 생성해야 합니다.
$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 서비스 주체 만들기
- Azure 리소스에 대한 관리 ID란?
- PowerShell 사용하여 리소스에 대한 관리 ID 액세스 할당
- PowerShell 사용하여 관리 ID의 서비스 주체 보기
- Connect-AzAccount
- new-AzADServicePrincipal
- Get-Credential
Azure PowerShell