在PowerShell脚本中加密Azure存储帐户名称和密钥

时间:2014-05-08 09:45:44

标签: powershell azure encryption

我们有一个PowerShell脚本来安装和配置应用程序。从Windows Azure存储下载软件和脚本更新。该脚本由合作伙伴使用。

目前,Azure存储名称和密钥是纯文本格式。

$context = New-AzureStorageContext
            -StorageAccountName 'myAccountName'
            -StorageAccountKey 'qwertynOc6bmpUhsnFuzSzFLHG7rJgkiakdWpIQ=='

有没有办法加密Azure存储名称和密钥(或至少是密钥),以便合作伙伴无法直接访问Azure存储?

修改

我还使用Azure表存储进行日志记录。

我确实找到了下面的代码,但我想你必须在使用该脚本的每台机器上重新生成该文件。这对我们不起作用。

$file = '.\myPasswd.txt'

$securedStorageKey = Read-Host -Prompt "Enter Storage Key" -AsSecureString 
ConvertFrom-SecureString $securedStorageKey | Set-Content $file

$accountName = 'myAccountName'
$securedStorageKey = Get-Content $file |  ConvertTo-SecureString
$accountKey = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($securedStorageKey));
$accountContext = New-AzureStorageContext -StorageAccountName $accountName -StorageAccountKey $accountKey

2 个答案:

答案 0 :(得分:1)

您可能需要考虑通过共享访问签名实现访问。使用SAS,您可以对资源进行有限访问,并且还可以定期访问该访问权限。这确实增加了一些复杂性,因为您需要在某处运行代码来验证用户并生成SAS令牌,但至少您并未放弃对存储资源的完全访问权限。

本文详细解释了这个概念:http://blogs.msdn.com/b/windowsazurestorage/archive/2012/06/12/introducing-table-sas-shared-access-signature-queue-sas-and-update-to-blob-sas.aspx

答案 1 :(得分:0)

我假设您将此脚本交给您的合作伙伴;没有好办法做到这一点。

New-AzureStorageContext需要凭据才能工作。这意味着如果您要使用加密的"密钥"将此脚本分发给您的合作伙伴,您还必须将其与未加密的""方法,而合作伙伴可以用来解密你的密钥。

如果您无法将密钥分发给合作伙伴,我会考虑使用其他策略来分发和下载您的软件。

配置Azure存储以提供公共数据 如果合作伙伴在下载数据后不需要您的密钥,则一种解决方案可能是将Azure配置为使用公共URL。

http://www.sitefinity.com/documentation/documentationarticles/installation-and-administration-guide/system-settings/configuring-windows-azure-storage-provider

更改您的powershell脚本(您的合作伙伴正在使用),从公共位置下载脚本/数据/安装,然后再下载。那么你就不必分发你的钥匙了。