Key Vault 및 Azure PowerShell을 사용하여 스토리지 계정 키 관리(레거시)

Important

Key Vault 관리형 스토리지 계정 키(레거시)는 더 이상 업데이트가 계획되지 않은 상태에서 그대로 지원됩니다. 2018-03-28 이전의 SAS 정의 서명된 스토리지 서비스 버전에서는 계정 SAS만 지원됩니다.

Important

Microsoft의 클라우드 기반 ID 및 액세스 관리 서비스인 Microsoft Entra ID와 Azure Storage를 통합하여 사용하는 것이 좋습니다. Microsoft Entra 통합은 Azure BLOB 및 큐에 사용할 수 있으며, Azure Key Vault와 마찬가지로 Azure Storage에 대한 OAuth2 토큰 기반 액세스를 제공합니다. Microsoft Entra ID를 사용하면 스토리지 계정 자격 증명 대신 애플리케이션 또는 사용자 ID를 사용하여 클라이언트 애플리케이션을 인증할 수 있습니다. Azure에서 실행할 때 Microsoft Entra 관리 ID를 사용할 수 있습니다. 관리 ID를 사용하면 클라이언트 인증이 필요 없는 것은 물론이고, 애플리케이션에 또는 애플리케이션을 통해 자격 증명을 저장할 필요가 없습니다. Microsoft Entra 인증을 사용할 수 없는 경우에만 이 솔루션을 사용합니다.

Azure 스토리지 계정은 계정 이름과 키로 구성된 자격 증명을 사용합니다. 키는 자동 생성되며 암호화 키가 아닌 암호 역할을 합니다. Key Vault는 스토리지 계정에서 스토리지 계정 키를 주기적으로 다시 생성하여 스토리지 계정 키를 관리하며, 스토리지 계정의 리소스에 대한 위임된 액세스가 가능하도록 공유 액세스 서명 토큰을 제공합니다.

Key Vault 관리형 스토리키 계정 키 기능을 사용하여 키를 나열(Azure 스토리지 계정과 동기화)하고, 주기적으로 키를 다시 생성(순환)할 수 있습니다. 스토리지 계정과 클래식 스토리지 계정의 키를 모두 관리할 수 있습니다.

관리형 스토리지 계정 키 기능을 사용할 때 다음 사항을 고려해야 합니다.

  • 키 값은 호출자에게 응답으로 반환되지 않습니다.
  • Key Vault에서만 스토리지 계정 키를 관리해야 합니다. 키를 직접 관리하거나 Key Vault 프로세스를 방해하지 마세요.
  • 단일 Key Vault 개체에서만 스토리지 계정 키를 관리해야 합니다. 여러 개체에서 키를 관리하도록 허용하지 마세요.
  • Key Vault만을 사용하여 키를 다시 생성해야 합니다. 스토리지 계정 키를 수동으로 다시 생성하지 않습니다.

Important

스토리지 계정에서 직접 키를 다시 생성하면 관리 스토리지 계정 설정이 중단되고 사용중인 SAS 토큰이 무효화되어 가동 중단이 발생할 수 있습니다.

참고 항목

Azure Az PowerShell 모듈을 사용하여 Azure와 상호 작용하는 것이 좋습니다. 시작하려면 Azure PowerShell 설치를 참조하세요. Az PowerShell 모듈로 마이그레이션하는 방법에 대한 자세한 내용은 Azure PowerShell을 AzureRM에서 Azure로 마이그레이션을 참조하세요.

서비스 주체 애플리케이션 ID

Microsoft Entra 테넌트는 등록된 각 애플리케이션에 서비스 주체를 제공합니다. 서비스 주체는 애플리케이션 ID 역할을 하며, Azure RBAC를 통해 다른 Azure 리소스에 액세스하기 위해 권한 부여를 설정하는 동안 사용됩니다.

Key Vault는 모든 Microsoft Entra 테넌트에서 미리 등록되는 Microsoft 애플리케이션입니다. Key Vault는 각 Azure 클라우드에서 동일한 애플리케이션 ID로 등록됩니다.

테넌트 클라우드 애플리케이션 ID
Microsoft Entra ID Azure Government 7e7c393b-45d0-48b1-a35e-2905ddf8183c
Microsoft Entra ID Azure 공용 cfa8b339-82a2-471a-a3c9-0fc0be7a4093
기타 모두 cfa8b339-82a2-471a-a3c9-0fc0be7a4093

필수 조건

이 가이드를 완료하려면 먼저 다음을 수행해야 합니다.

스토리지 계정 키 관리

Azure 계정에 연결

Connect-AzAccount cmdlet을 사용하여 PowerShell 세션을 인증합니다.

Connect-AzAccount

Azure 구독이 여러 개 있는 경우 Get-AzSubscription cmdlet을 사용하여 구독을 나열하고, Set-AzContext cmdlet을 통해 사용하려는 구독을 지정할 수 있습니다.

Set-AzContext -SubscriptionId <subscriptionId>

변수 설정

먼저 다음 단계에서 PowerShell cmdlet에 사용할 변수를 설정합니다. "YourResourceGroupName", "YourStorageAccountName", "YourKeyVaultName" 자리 표시자를 업데이트하고, 서비스 주체 애플리케이션 ID에 지정된 대로 $keyVaultSpAppId를 cfa8b339-82a2-471a-a3c9-0fc0be7a4093으로 설정합니다.

또한 여기서는 Azure PowerShell Get-AzContextGet-AzStorageAccount cmdlet을 사용하여 사용자 ID와 Azure 스토리지 계정의 컨텍스트를 가져올 것입니다.

$resourceGroupName = <YourResourceGroupName>
$storageAccountName = <YourStorageAccountName>
$keyVaultName = <YourKeyVaultName>
$keyVaultSpAppId = "cfa8b339-82a2-471a-a3c9-0fc0be7a4093"
$storageAccountKey = "key1" #(key1 or key2 are allowed)

# Get your User Id
$userId = (Get-AzContext).Account.Id

# Get a reference to your Azure storage account
$storageAccount = Get-AzStorageAccount -ResourceGroupName $resourceGroupName -StorageAccountName $storageAccountName

참고 항목

클래식 스토리지 계정의 경우 $storageAccountKey에 "primary" 및 "secondary"를 사용합니다.
클래식 스토리지 계정의 경우 'Get-AzStorageAccount' 대신 'Get-AzResource -Name "ClassicStorageAccountName" -ResourceGroupName $resourceGroupName'을 사용합니다.

Key Vault에 스토리지 계정에 대한 액세스 권한 부여

Key Vault가 스토리지 계정 키에 액세스하여 관리하려면 사용자가 스토리지 계정에 액세스 권한을 부여해야 합니다. Key Vault 애플리케이션은 스토리지 계정의 키를 나열하고 다시 생성할 수 있는 권한이 필요합니다. 이러한 권한은 Azure의 기본 제공 역할인 스토리지 계정 키 운영자 서비스 역할을 통해 설정됩니다.

Azure PowerShell New-AzRoleAssignment cmdlet을 사용하여 Key Vault 서비스 주체에 이 역할을 할당하고 스토리지 계정으로 범위를 제한합니다.

# Assign Azure role "Storage Account Key Operator Service Role" to Key Vault, limiting the access scope to your storage account. For a classic storage account, use "Classic Storage Account Key Operator Service Role."
New-AzRoleAssignment -ApplicationId $keyVaultSpAppId -RoleDefinitionName 'Storage Account Key Operator Service Role' -Scope $storageAccount.Id

역할 할당에 성공하면 다음 예제와 비슷한 결과가 나타납니다.

RoleAssignmentId   : /subscriptions/03f0blll-ce69-483a-a092-d06ea46dfb8z/resourceGroups/rgContoso/providers/Microsoft.Storage/storageAccounts/sacontoso/providers/Microsoft.Authorization/roleAssignments/189cblll-12fb-406e-8699-4eef8b2b9ecz
Scope              : /subscriptions/03f0blll-ce69-483a-a092-d06ea46dfb8z/resourceGroups/rgContoso/providers/Microsoft.Storage/storageAccounts/sacontoso
DisplayName        : Azure Key Vault
SignInName         :
RoleDefinitionName : storage account Key Operator Service Role
RoleDefinitionId   : 81a9662b-bebf-436f-a333-f67b29880f12
ObjectId           : 93c27d83-f79b-4cb2-8dd4-4aa716542e74
ObjectType         : ServicePrincipal
CanDelegate        : False

Key Vault가 스토리지 계정의 역할에 이미 추가된 경우 "역할 할당이 이미 존재합니다" 오류가 표시됩니다. 또한 Azure Portal에서 스토리지 계정 “액세스 제어(IAM)” 페이지를 사용하여 역할 할당을 확인할 수도 있습니다.

관리 스토리지 계정에 사용자 계정 권한 부여

Azure PowerShell Set-AzKeyVaultAccessPolicy cmdlet을 사용하여 Key Vault 액세스 정책을 업데이트하고 사용자 계정에 스토리지 계정 권한을 부여합니다.

# Give your user principal access to all storage account permissions, on your Key Vault instance

Set-AzKeyVaultAccessPolicy -VaultName $keyVaultName -UserPrincipalName $userId -PermissionsToStorage get, list, delete, set, update, regeneratekey, getsas, listsas, deletesas, setsas, recover, backup, restore, purge

스토리지 계정에 대한 권한은 Azure Portal의 스토리지 계정 “액세스 정책” 페이지에서 제공되지 않습니다.

Key Vault 인스턴스에 관리 스토리지 계정 추가

Azure PowerShell Add-AzKeyVaultManagedStorageAccount cmdlet을 사용하여 Key Vault 인스턴스에 관리형 스토리지 계정을 만듭니다. -DisableAutoRegenerateKey 스위치는 스토리지 계정 키를 다시 생성하지 않도록 지정합니다.

# Add your storage account to your Key Vault's managed storage accounts

Add-AzKeyVaultManagedStorageAccount -VaultName $keyVaultName -AccountName $storageAccountName -AccountResourceId $storageAccount.Id -ActiveKeyName $storageAccountKey -DisableAutoRegenerateKey

키가 다시 생성되지 않고 스토리지 계정 추가에 성공하면 다음 예제와 유사한 출력이 표시됩니다.

Id                  : https://kvcontoso.vault.azure.net:443/storage/sacontoso
Vault Name          : kvcontoso
AccountName         : sacontoso
Account Resource Id : /subscriptions/03f0blll-ce69-483a-a092-d06ea46dfb8z/resourceGroups/rgContoso/providers/Microsoft.Storage/storageAccounts/sacontoso
Active Key Name     : key1
Auto Regenerate Key : False
Regeneration Period : 90.00:00:00
Enabled             : True
Created             : 11/19/2018 11:54:47 PM
Updated             : 11/19/2018 11:54:47 PM
Tags                :

키 다시 생성 사용

Key Vault에서 스토리지 계정 키를 주기적으로 다시 생성하게 하려면 Azure PowerShell Add-AzKeyVaultManagedStorageAccount cmdlet을 사용하여 다시 생성 기간을 설정하면 됩니다. 이 예제에서는 다시 생성 기간을 30일로 설정합니다. 순환할 시간이 되면 Key Vault는 비활성 키를 다시 생성한 다음, 새로 만든 키를 활성 상태로 설정합니다. SAS 토큰을 발급하는 데 사용되는 키는 활성 키입니다.

$regenPeriod = [System.Timespan]::FromDays(30)

Add-AzKeyVaultManagedStorageAccount -VaultName $keyVaultName -AccountName $storageAccountName -AccountResourceId $storageAccount.Id -ActiveKeyName $storageAccountKey -RegenerationPeriod $regenPeriod

키가 다시 생성되고 스토리지 계정 추가에 성공하면 다음 예제와 유사한 출력이 표시됩니다.

Id                  : https://kvcontoso.vault.azure.net:443/storage/sacontoso
Vault Name          : kvcontoso
AccountName         : sacontoso
Account Resource Id : /subscriptions/03f0blll-ce69-483a-a092-d06ea46dfb8z/resourceGroups/rgContoso/providers/Microsoft.Storage/storageAccounts/sacontoso
Active Key Name     : key1
Auto Regenerate Key : True
Regeneration Period : 30.00:00:00
Enabled             : True
Created             : 11/19/2018 11:54:47 PM
Updated             : 11/19/2018 11:54:47 PM
Tags                :

공유 액세스 서명 토큰

Key Vault에 공유 액세스 서명 토큰을 생성하고 요청할 수도 있습니다. 공유 액세스 서명은 스토리지 계정의 리소스에 대한 위임된 권한을 제공합니다. 계정 키를 공유하지 않고도 스토리지 계정의 리소스에 대한 액세스 권한을 클라이언트에 부여할 수 있습니다. 공유 액세스 서명은 계정 키를 손상시키지 않고 스토리지 리소스를 공유할 수 있는 안전한 방법을 제공합니다.

이 섹션의 명령은 다음 작업을 완료합니다.

  • 계정 공유 액세스 서명 정의를 설정합니다.
  • 자격 증명 모음에서 Key Vault 관리형 스토리지 공유 액세스 서명 정의를 설정합니다. 정의에는 생성된 공유 액세스 서명 토큰의 템플릿 URI가 포함됩니다. 정의의 공유 액세스 서명 유형은 account이며 N일 동안 유효합니다.
  • 공유 액세스 서명이 키 자격 증명 모음에 비밀로 저장되었는지 확인합니다.

변수 설정

먼저 다음 단계에서 PowerShell cmdlet에 사용할 변수를 설정합니다. <YourStorageAccountName> 및 <YourKeyVaultName> 자리 표시자를 업데이트해야 합니다.

$storageAccountName = <YourStorageAccountName>
$keyVaultName = <YourKeyVaultName>

공유 액세스 서명 정의 템플릿 정의

Key Vault는 SAS 정의 템플릿을 사용하여 클라이언트 애플리케이션에 대한 토큰을 생성합니다.

SAS 정의 템플릿 예제:

$sasTemplate="sv=2018-03-28&ss=bfqt&srt=sco&sp=rw&spr=https"

Key Vault용 SAS 정의 템플릿에 필요한 계정 SAS 매개 변수

SAS 쿼리 매개 변수 설명
SignedVersion (sv) 필수입니다. 이 계정 SAS로 수행된 요청에 권한을 부여하는 데 사용할 서명된 스토리지 서비스 버전을 지정합니다. 버전 2015-04-05 이상으로 설정해야 합니다. Key Vault는 2018-03-28 이전 버전을 지원합니다.
SignedServices (ss) 필수입니다. 계정 SAS를 사용하여 액세스할 수 있는 서명된 서비스를 지정합니다. 가능한 값은 다음을 포함합니다.

- Blob(b)
- 큐(q)
- 테이블(t)
- 파일(f)

값을 결합하여 둘 이상의 서비스에 대한 액세스를 제공할 수 있습니다. 예를 들어 ss=bf는 Blob 및 파일 엔드포인트에 대한 액세스를 지정합니다.
SignedResourceTypes (srt) 필수입니다. 계정 SAS를 사용하여 액세스할 수 있는 서명된 리소스 유형을 지정합니다.

- 서비스(s): 서비스 수준 API에 대한 액세스(예를 들어, 서비스 속성 가져오기/설정, 서비스 통계 가져오기, 컨테이너/큐/테이블/공유 나열)
- 컨테이너(c): 컨테이너 수준 API에 대한 액세스(예를 들어, 컨테이너 만들기/삭제, 큐 만들기/삭제, 테이블 만들기/삭제, 공유 만들기/삭제, Blob/파일 및 디렉터리 나열)
- 개체(o): Blob, 큐 메시지, 테이블 엔터티 및 파일에 대한 개체 수준 API에 대한 액세스(예를 들어, Blob 배치, 쿼리 엔터티, 메시지 가져오기, 파일 만들기 등)

값을 결합하여 둘 이상의 리소스 종류에 대한 액세스를 제공할 수 있습니다. 예를 들어 srt=sc는 서비스 및 컨테이너 리소스에 대한 액세스를 지정합니다.
SignedPermission (sp) 필수입니다. 계정 SAS에 대한 서명된 권한을 지정합니다. 사용 권한은 지정된 서명된 리소스 유형과 일치하는 경우에만 유효합니다. 그렇지 않으면 무시됩니다.

- 읽기(r): 서명된 모든 리소스 유형(서비스, 컨테이너 및 개체)에 대해 유효합니다. 지정된 리소스 종류에 대한 읽기 권한을 허용합니다.
- 쓰기(w): 서명된 모든 리소스 유형(서비스, 컨테이너 및 개체)에 대해 유효합니다. 지정된 리소스 종류에 대한 쓰기 권한을 허용합니다.
- 삭제(d): 큐 메시지를 제외하고 컨테이너 및 개체 리소스 종류에 유효합니다.
- 영구 삭제(y): Blob의 개체 리소스 유형에만 유효합니다.
- 목록(l): 서비스 및 컨테이너 리소스 종류에만 유효합니다.
- 추가(a): 큐 메시지, 테이블 엔터티 및 추가 Blob과 같은 개체 리소스 유형에만 유효합니다.
- 만들기(c): Blob 및 파일과 같은 개체 리소스 유형에만 유효합니다. 사용자는 새 Blob 또는 파일을 만들 수 있지만 기존 Blob 또는 파일을 덮어쓸 수는 없습니다.
- 업데이트(u): 다음 개체 리소스 유형에 대해서만 유효합니다. 큐 메시지 및 테이블 엔터티.
- 프로세스(p): 다음 개체 리소스 유형에 대해서만 유효합니다. 큐 메시지.
- 태그(t): 다음 개체 리소스 유형에 대해서만 유효합니다. blob. Blob 태그 작업을 허용합니다.
- 필터(f): 다음 개체 리소스 유형에 대해서만 유효합니다. blob. Blob 태그로 필터링을 허용합니다.
- 불변성 정책 설정(i): 다음 개체 리소스 유형에 대해서만 유효합니다. blob. Blob에 대한 불변성 정책 및 법적 보존 설정/삭제를 허용합니다.
SignedProtocol (spr) 선택 사항. SAS 계정으로 이루어진 요청에 대해 허용되는 프로토콜을 지정합니다. 가능한 값은 HTTPS와 HTTP(https,http) 또는 HTTPS만(https)입니다. 기본값은 https,http입니다.

HTTP만은 허용되는 값이 아닙니다.

계정 SAS에 대한 자세한 내용은 계정 SAS 만들기를 참조하세요.

참고 항목

Key Vault는 ‘서명된 만료’, ‘서명된 시작’과 같은 수명 매개변수 및 2018-03-28 버전 이후에 도입된 매개 변수를 무시합니다.

Key Vault에서 공유 액세스 서명 정의 설정

Azure PowerShell Set-AzKeyVaultManagedStorageSasDefinition cmdlet을 사용하여 공유 액세스 서명 정의를 만듭니다. -Name 매개 변수 이름을 원하는 대로 지정할 수 있습니다.

Set-AzKeyVaultManagedStorageSasDefinition -AccountName $storageAccountName -VaultName $keyVaultName -Name <YourSASDefinitionName> -TemplateUri $sasTemplate -SasType 'account' -ValidityPeriod ([System.Timespan]::FromDays(1))

공유 액세스 서명 정의 확인

Azure PowerShell Get-AzKeyVaultSecret cmdlet을 사용하여 공유 액세스 서명 정의가 키 자격 증명 모음에 저장되었는지 확인할 수 있습니다.

먼저 키 자격 증명 모음에서 공유 액세스 서명 정의를 찾습니다.

Get-AzKeyVaultSecret -VaultName <YourKeyVaultName>

SAS 정의에 해당하는 비밀의 속성은 다음과 같습니다.

Vault Name   : <YourKeyVaultName>
Name         : <SecretName>
...
Content Type : application/vnd.ms-sastoken-storage
Tags         :

이제 VaultNameName 매개 변수와 함께 Get-AzKeyVaultSecret cmdlet을 사용하여 해당 비밀의 내용을 볼 수 있습니다.

$secretValueText = Get-AzKeyVaultSecret -VaultName <YourKeyVaultName> -Name <SecretName> -AsPlainText
Write-Output $secretValueText

이 명령의 출력은 SAS 정의 문자열을 보여줍니다.

다음 단계