자동화 시나리오를 위해 비대화형으로 Azure PowerShell에 로그인
Azure의 서비스 주체는 애플리케이션, 서비스 및 자동화 도구에서 특정 Azure 리소스에 액세스하는 데 사용되는 ID를 제공하는 비대화형 계정입니다. 서비스 주체는 할당된 권한을 통해 어떤 작업을 수행할 수 있고 어떤 리소스에 액세스할 수 있는지 관리하는 보안 ID 역할을 하므로 서비스 주체를 통해 인증하는 것은 보안 스크립트를 작성하는 가장 좋은 방법입니다. 서비스 주체는 개인 사용자 계정을 사용하지 않고도 관리 작업을 안전하게 자동화하여 Azure 리소스에 대한 보다 안전하고 관리하기 쉬운 액세스를 제공합니다. 다른 사용자 계정과 마찬가지로 Microsoft Entra를 사용하여 해당 권한을 관리합니다. 서비스 주체에 필요한 권한만 부여하여 자동화 스크립트 보안을 유지할 수 있습니다.
필수 조건
관리 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 구성을 참조하세요.
서비스 주체로 로그인
서비스 주체로 로그인하려면 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