Depolama hesabı anahtarlarını Key Vault ve Azure PowerShell
Önemli
Microsoft'un bulut Depolama erişim yönetimi hizmeti Azure Active Directory (Azure AD) ile Azure Depolama tümleştirmesi kullanılması önerilir. Azure AD tümleştirmesi, Azure bloblarıve kuyrukları için kullanılabilir ve Azure Depolama'ye OAuth2 belirteç tabanlı erişim sağlar (Azure Key Vault). Azure AD, depolama hesabı kimlik bilgileri yerine bir uygulama veya kullanıcı kimliği kullanarak istemci uygulama kimliğini doğrulamanıza olanak sağlar. Azure'da çalıştırarak Azure AD yönetilen kimliğini kullanabilirsiniz. Yönetilen kimlikler istemci kimlik doğrulamasına olan ihtiyacı ortadan kaldırır ve kimlik bilgilerini uygulamanıza veya uygulamanıza depolar. Aşağıdaki çözümü yalnızca Azure AD kimlik doğrulaması mümkün değilken kullanın.
Azure depolama hesabı, hesap adı ve anahtardan oluşan kimlik bilgilerini kullanır. Anahtar otomatik olarak ojendir ve şifreleme anahtarı yerine parola işlevi de sağlar. Key Vault, depolama hesabında düzenli aralıklarla yeniden üreterek depolama hesabı anahtarlarını yönetir ve depolama hesabınıza temsilci erişimi için paylaşılan erişim imzası belirteçleri sağlar.
Azure depolama hesabıyla Key Vault (eşitleme) ve anahtarları düzenli aralıklarla yeniden oluşturma (döndürme) için yönetilen depolama hesabı anahtarı özelliğini kullanabilirsiniz. Hem depolama hesapları hem de Klasik depolama hesapları için anahtarları yönetebilirsiniz.
Yönetilen depolama hesabı anahtarı özelliğini kullanıyorsanız aşağıdaki noktaları göz önünde bulundurabilirsiniz:
- Anahtar değerleri hiçbir zaman çağıranın yanıt olarak döndürülz.
- Yalnızca Key Vault depolama hesabı anahtarlarınızı yönetmesi gerekir. Anahtarları kendiniz yönetmeyin ve bu işlemlere müdahale Key Vault kaçının.
- Depolama hesabı Key Vault tek bir nesne yönetmesi gerekir. Birden çok nesneden anahtar yönetimine izin verme.
- Anahtarları yalnızca Key Vault yeniden üretin. Depolama hesabı anahtarlarınızı el ile yeniden üretin.
Önemli
Anahtarı doğrudan depolama hesabında yeniden oluşturma, yönetilen depolama hesabı kurulumunu bozar ve kullanım sırasında SAS belirteçlerini geçersiz kılınarak kesintiye neden olabilir.
Not
Bu makalede, Azure ile etkileşim kurmak için önerilen PowerShell modülü olan Azure Az PowerShell modülü kullanılır. Az PowerShell modülünü kullanmaya başlamak için Azure PowerShell’i yükleyin. Az PowerShell modülüne nasıl geçeceğinizi öğrenmek için bkz. Azure PowerShell’i AzureRM’den Az’ye geçirme.
Hizmet sorumlusu uygulama kimliği
Azure AD kiracısı, kayıtlı her uygulamaya bir hizmet sorumlusu sağlar. Hizmet sorumlusu, Azure RBAC aracılığıyla diğer Azure kaynaklarına erişim için yetkilendirme kurulumu sırasında kullanılan uygulama kimliği olarak görev alır.
Key Vault, tüm Azure AD kiracılarında önceden kaydedilmiş bir Microsoft uygulamasıdır. Key Vault Azure bulutlarında aynı Uygulama Kimliği altında kaydedilir.
| Kiracılar | Bulut | Uygulama Kimliği |
|---|---|---|
| Azure AD | Azure Kamu | 7e7c393b-45d0-48b1-a35e-2905ddf8183c |
| Azure AD | Azure genel | cfa8b339-82a2-471a-a3c9-0fc0be7a4093 |
| Diğer | Herhangi biri | cfa8b339-82a2-471a-a3c9-0fc0be7a4093 |
Önkoşullar
Bu kılavuzu tamamlamak için önce aşağıdaki adımları tamamlamanız gerekir:
- Azure PowerShell yükleyin.
- Anahtar kasası oluşturma
- Azure depolama hesabı oluşturun. Depolama hesabı adı yalnızca küçük harf ve sayı kullanılmalıdır. Adın uzunluğu 3 ile 24 karakter arasında olmalıdır.
Depolama hesabı anahtarlarını yönetme
Azure hesabınıza bağlanma
Bağlan-AzAccount cmdlet'ini kullanarak PowerShell oturum açın.
Connect-AzAccount
Birden çok Azure aboneliğiniz varsa Get-AzSubscription cmdlet'ini kullanarak bunları listeleyebilirsiniz ve Set-AzContext cmdlet'iyle kullanmak istediğiniz aboneliği belirtebilirsiniz.
Set-AzContext -SubscriptionId <subscriptionId>
Değişkenleri ayarlama
İlk olarak, aşağıdaki adımlarda PowerShell cmdlet'leri tarafından kullanılacak değişkenleri ayarlayın. "YourResourceGroupName", "YourStorageAccountName" ve "YourKeyVaultName" yer tutucularını güncelleştirin ve $keyVaultSpAppId olarak (yukarıda Hizmet sorumlusu uygulama kimliğinde belirtildiği gibi) olarak cfa8b339-82a2-471a-a3c9-0fc0be7a4093 ayarlayın.
Kullanıcı kimliğini ve Azure depolama Azure PowerShell bağlamını almak için Get-AzContext ve Get-AzStorageAccount cmdlet'lerini de kullan istiyoruz.
$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
Not
Klasik Depolama hesabı için "birincil" ve "ikincil" $storageAccountKey
Klasik Hesap için 'Get-AzStorageAccount' yerine 'Get-AzResource -Name "ClassicStorageAccountName" -ResourceGroupName $resourceGroupName' Depolama kullanın
Depolama Key Vault erişim izni verme
Depolama Key Vault erişemeden ve yönetemeden önce depolama hesabınıza erişim yetkisi vermeniz gerekir. Key Vault uygulama, depolama hesabınız için anahtarları listeley ve yeniden oluşturma izinleri gerektirir. Bu izinler, Hesap Anahtarı İşleci Hizmet Rolü Depolama Azure yerleşik rolü aracılığıyla etkinleştirilir.
New-AzRoleAssignment cmdlet'ini kullanarak bu rolü Key Vault hizmet sorumlusuna atarak kapsamı depolama hesabınızla sınırlayın. Azure PowerShell
# 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
Rol ataması başarılı oldu sonra aşağıdaki örnektekine benzer bir çıktı görüyor gerekir:
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
Depolama Key Vault role zaten eklenmişse bir "Rol ataması zaten var." alırsınız. hatası döndürür. Rol ataması için, rol ataması sayfasındaki "Erişim denetimi (IAM)" Azure portal.
Kullanıcı hesabınıza yönetilen depolama hesapları için izin verme
Key Vault erişim Azure PowerShell için Set-AzKeyVaultAccessPolicy cmdlet'ini kullanın ve kullanıcı hesabınıza depolama hesabı izinleri verin.
# 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
Depolama hesapları için izinlerin depolama hesabı sayfasındaki "Erişim ilkeleri" sayfasında mevcut olmadığını Azure portal.
Yönetilen depolama hesabını Key Vault ekleme
Azure PowerShell örneğinize yönetilen depolama hesabı oluşturmak için Add-AzKeyVaultManagedStorageAccount cmdlet'ini Key Vault kullanın. anahtarı, -DisableAutoRegenerateKey depolama hesabı anahtarlarını yeniden oluşturmaMAYİS'i belirtir.
# Add your storage account to your Key Vault's managed storage accounts
Add-AzKeyVaultManagedStorageAccount -VaultName $keyVaultName -AccountName $storageAccountName -AccountResourceId $storageAccount.Id -ActiveKeyName $storageAccountKey -DisableAutoRegenerateKey
Anahtar yeniden oluşturması ile depolama hesabının başarıyla eklenmesinin ardından aşağıdaki örnektekine benzer bir çıktı görüyor olun:
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 :
Anahtar yeniden oluşturmayı etkinleştirme
Depolama hesabı Key Vault düzenli aralıklarla yeniden oluşturmanızı istemiyorsanız, yeniden oluşturma dönemi ayarlamak için Azure PowerShell Add-AzKeyVaultManagedStorageAccount cmdlet'ini kullanabilirsiniz. Bu örnekte, üç günlük bir yeniden oluşturma süresi ayarlanıyor. Döndürme zamanı geldiğinde, Key Vault anahtarı yeniden üreterek yeni oluşturulan anahtarı etkin olarak ayarlar. Sas belirteçlerini aynı anda yalnızca bir kez yapmak için anahtarlardan yalnızca biri kullanılır. Bu, etkin anahtardır.
$regenPeriod = [System.Timespan]::FromDays(3)
Add-AzKeyVaultManagedStorageAccount -VaultName $keyVaultName -AccountName $storageAccountName -AccountResourceId $storageAccount.Id -ActiveKeyName $storageAccountKey -RegenerationPeriod $regenPeriod
Anahtar yeniden oluşturma ile depolama hesabının başarıyla eklenmesinin ardından aşağıdaki örnektekine benzer bir çıktı görüyor olun:
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 : 3.00:00:00
Enabled : True
Created : 11/19/2018 11:54:47 PM
Updated : 11/19/2018 11:54:47 PM
Tags :
Paylaşılan erişim imzası belirteçleri
Ayrıca, paylaşılan erişim Key Vault belirteçleri oluşturmasını da silecektir. Paylaşılan erişim imzası, depolama hesabınıza kaynaklara temsilci erişimi sağlar. İstemcilere hesap anahtarlarınızı paylaşmadan depolama hesabı kaynakları için erişim veabilirsiniz. Paylaşılan erişim imzası, hesap anahtarlarınızı tehlikeye atmadan depolama kaynaklarınızı paylaşmanın güvenli bir yolunu sağlar.
Bu bölümdeki komutlar aşağıdaki eylemleri tamamlar:
- Hesap paylaşılan erişim imzası tanımı ayarlayın.
- Blob, Dosya, Tablo ve Kuyruk hizmetleri için hesap paylaşılan erişim imzası belirteci oluşturun. Belirteç Hizmet, Kapsayıcı ve Nesne kaynak türleri için oluşturulur. Belirteç tüm izinlerle, https üzerinden ve belirtilen başlangıç ve bitiş tarihleriyle oluşturulur.
- Kasada Key Vault depolama paylaşılan erişim imzası tanımı ayarlayın. Tanım, oluşturulan paylaşılan erişim imzası belirtecin şablon URI'sını içerir. Tanım paylaşılan erişim imzası türüne sahip
accountve N gün boyunca geçerlidir. - Paylaşılan erişim imzasının anahtar kasanıza bir gizli anahtar olarak kayded olduğunu doğrulayın.
Değişkenleri ayarlama
İlk olarak, aşağıdaki adımlarda PowerShell cmdlet'leri tarafından kullanılacak değişkenleri ayarlayın. ve yer tutucularını <YourStorageAccountName> <YourKeyVaultName> güncelleştirin.
Ayrıca, Azure depolama Azure PowerShell bağlamını almak için New-AzStorageContext cmdlet'leri için de Azure PowerShell cmdlet'lerini kullan istiyoruz.
$storageAccountName = <YourStorageAccountName>
$keyVaultName = <YourKeyVaultName>
$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -Protocol Https -StorageAccountKey Key1 #(or "Primary" for Classic Storage Account)
Paylaşılan erişim imzası belirteci oluşturma
New-AzStorageAccountSASToken cmdlet'Azure PowerShell kullanarak paylaşılan erişim imzası tanımı oluşturun.
$start = [System.DateTime]::Now.AddDays(-1)
$end = [System.DateTime]::Now.AddMonths(1)
$sasToken = New-AzStorageAccountSasToken -Service blob,file,Table,Queue -ResourceType Service,Container,Object -Permission "racwdlup" -Protocol HttpsOnly -StartTime $start -ExpiryTime $end -Context $storageContext
$sasToken değeri şuna benzer.
?sv=2018-11-09&sig=5GWqHFkEOtM7W9alOgoXSCOJO%2B55qJr4J7tHQjCId9S%3D&spr=https&st=2019-09-18T18%3A25%3A00Z&se=2019-10-19T18%3A25%3A00Z&srt=sco&ss=bfqt&sp=racupwdl
Paylaşılan erişim imzası tanımı oluşturma
Paylaşılan erişim Azure PowerShell oluşturmak için Set-AzKeyVaultManagedStorageSasDefinition cmdlet'ini kullanın. Parametresi için tercih ettiğiniz adı sağlayabilirsiniz -Name .
Set-AzKeyVaultManagedStorageSasDefinition -AccountName $storageAccountName -VaultName $keyVaultName -Name <YourSASDefinitionName> -TemplateUri $sasToken -SasType 'account' -ValidityPeriod ([System.Timespan]::FromDays(30))
Paylaşılan erişim imzası tanımını doğrulama
Azure PowerShell Get-azkeyvaultsecret cmdlet 'ini kullanarak, paylaşılan erişim imzası tanımının anahtar kasasında depolandığını doğrulayabilirsiniz.
İlk olarak, Anahtar Kasanızda paylaşılan erişim imzası tanımını bulun.
Get-AzKeyVaultSecret -VaultName <YourKeyVaultName>
SAS tanımınıza karşılık gelen gizli dizi şu özelliklere sahip olacaktır:
Vault Name : <YourKeyVaultName>
Name : <SecretName>
...
Content Type : application/vnd.ms-sastoken-storage
Tags :
Artık bu gizli dizinin içeriğini görüntülemek için Get-AzKeyVaultSecret cmdlet 'ini VaultName ve Name parametrelerini kullanabilirsiniz.
$secret = Get-AzKeyVaultSecret -VaultName <YourKeyVaultName> -Name <SecretName>
$ssPtr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secret.SecretValue)
try {
$secretValueText = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ssPtr)
} finally {
[System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ssPtr)
}
Write-Output $secretValueText
Bu komutun çıktısı, SAS tanım dizenizi gösterecektir.