在Azure中,Blob存储是一种用于存储大量非结构化数据的服务,如文本或二进制数据。SAS(共享访问签名)令牌是一种安全机制,允许在特定时间内授予对Azure存储资源的有限访问权限。本文将指导如何使用AzurePowerShell创建资源组、存储账户,上传文件,并生成SAS令牌以访问Blob存储。
首先,需要登录到Azure账户。使用以下PowerShell命令:
Login-AzureRmAccount
系统将提示输入电子邮件地址和密码。
接下来,需要为存储账户创建一个新的资源组。资源组的名称可以根据喜好来命名。
$resourceGroupName = "NewResourceGroup"
$location = "West Europe"
New-AzureRmResourceGroup -Name $resourceGroupName -Location $location -Verbose -Force
这段代码将创建一个名为"NewResourceGroup"的新资源组,并将其位置设置为"West Europe"。
现在,将创建实际的存储账户。存储账户的名称需要在Azure中全局唯一,因为它有一个用于访问的URL。如果名称已被占用,需要更改下面的storageAccountName
。
$storageAccountName = "storageaccountsas"
New-AzureRmStorageAccount -Name $storageAccountName -ResourceGroupName $resourceGroupName -Location $location -SkuName "Standard_LRS"
这段代码将创建一个名为"storageaccountsas"的新存储账户,并将其类型设置为"Standard_LRS"。
将创建一个包含文本的txt文件,然后在存储账户中创建一个容器(类似于文件夹结构),最后上传刚刚创建的文件。
echo some-text > filename.txt
$containerName = "upload"
$storageAccount = (Get-AzureRmStorageAccount | Where-Object{$_.StorageAccountName -eq $storageAccountName})
New-AzureStorageContainer -Name $containerName -Context $storageAccount.Context -ErrorAction SilentlyContinue *>&1
$folderPath = (Get-Item -Path "." -Verbose).FullName
$SourcePath = $folderPath + "\filename.txt"
Set-AzureStorageBlobContent -File $SourcePath -Blob $SourcePath.Substring($folderPath.length + 1) -Container $containerName -Context $storageAccount.Context -Force | out-null
这段代码首先创建了一个名为"filename.txt"的文件,并写入了一些文本。然后,它创建了一个名为"upload"的容器,并上传了"filename.txt"文件。
现在已经上传了文件,需要生成一个SAS令牌来访问文件。将设置这个令牌的过期时间为12小时,但可以根据需要更改这个时间。
Set-AzureRmCurrentStorageAccount -ResourceGroupName $resourceGroupName -Name $storageAccountName | out-null
$sasToken = New-AzureStorageContainerSASToken -Name $containerName -Permission r -Protocol HttpsOnly -ExpiryTime (Get-Date).AddHours(12)
$sasToken
这段代码首先将当前存储账户设置为"storageaccountsas",然后生成了一个名为"upload"的容器的SAS令牌,该令牌具有读取权限,并且仅通过HTTPS协议访问。
首先,让测试文件是否仍然是私有的,并且无法被公众访问。
ResourceNotFound
The specified resource does not exist. RequestId:86e3247c-101e-00fa-37d7-060e24000000 Time:2018-06-18T07:41:07.3620454Z
Azure在这里不会透露任何信息,它只是说资源不存在,因为没有权限访问它。
现在,如果在浏览器中输入新上传的文件的位置,并在末尾添加sasToken,例如:
https://storageaccountsas1.blob.core.windows.net/upload/filename.txt?sv=2017-07-29&sr=c&sig=tG3bkXUNUxGa3IwXosTgweQo7XAOChPF4%2FCdYTm4%2Fmc%3D&spr=https&se=2018-06-18T19%3A44%3A40Z&sp=r
它应该会将"filename.txt"下载到计算机上。
以下是完整的脚本,包括创建资源组、存储账户、上传文件和生成SAS令牌的所有步骤。
###
1. CREATE A NEW RESOURCE GROUP
$resourceGroupName = "NewResourceGroup"
$location = "West Europe"
New-AzureRmResourceGroup -Name $resourceGroupName -Location $location -Verbose -Force
###
2. CREATE A NEW STORAGE ACCOUNT
$storageAccountName = "storageaccountsas"
New-AzureRmStorageAccount -Name $storageAccountName -ResourceGroupName $resourceGroupName -Location $location -SkuName "Standard_LRS"
###
3. UPLOAD A FILE
echo some-text > filename.txt
$containerName = "upload"
$storageAccount = (Get-AzureRmStorageAccount | Where-Object{$_.StorageAccountName -eq $storageAccountName})
New-AzureStorageContainer -Name $containerName -Context $storageAccount.Context -ErrorAction SilentlyContinue *>&1
$folderPath = (Get-Item -Path "." -Verbose).FullName
$SourcePath = $folderPath + "\filename.txt"
Set-AzureStorageBlobContent -File $SourcePath -Blob $SourcePath.Substring($folderPath.length + 1) -Container $containerName -Context $storageAccount.Context -Force | out-null
###
4. GENERATE A SAS TOKEN FOR 12 HOURS
Set-AzureRmCurrentStorageAccount -ResourceGroupName $resourceGroupName -Name $storageAccountName | out-null
$sasToken = New-AzureStorageContainerSASToken -Name $containerName -Permission r -Protocol HttpsOnly -ExpiryTime (Get-Date).AddHours(12)
$sasToken