【发布时间】:2019-12-31 10:08:37
【问题描述】:
如果我将 blob 的访问级别配置为私有,则即使那些 AD 帐户已添加到存储帐户的用户也无法访问 blob url。
我怎样才能让 blob url 只能由特定的用户组访问? 根据另一个stackoverflow链接,似乎我必须提供访问密钥等效信息才能访问私有blob。在这种情况下,拥有访问密钥的任何人都可以访问 Blob,就好像访问级别是公共的一样。
【问题讨论】:
如果我将 blob 的访问级别配置为私有,则即使那些 AD 帐户已添加到存储帐户的用户也无法访问 blob url。
我怎样才能让 blob url 只能由特定的用户组访问? 根据另一个stackoverflow链接,似乎我必须提供访问密钥等效信息才能访问私有blob。在这种情况下,拥有访问密钥的任何人都可以访问 Blob,就好像访问级别是公共的一样。
【问题讨论】:
根据您的需要,我建议您可以使用共享访问签名或 Azure Active Directory 授权来访问您的 blob。而且我不建议您与其他人共享您的访问密钥。因为它不安全。一旦有人拥有access key,他就可以直接管理存储帐户。更多详情请参考https://docs.microsoft.com/en-us/azure/storage/common/storage-auth?toc=%2fazure%2fstorage%2fblobs%2ftoc.json
如果要使用 Azure AD auth 访问 privet blob,请参考以下步骤 1.注册Azure AD应用
az role assignment create \
--role "Storage Blob Data Contributor" \
--assignee <email> \
--scope "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>
https://login.microsoftonline.com/<tenant>/oauth2/v2.0/authorize?
client_id=<>
&response_type=code
&redirect_uri=http://localhost:3000/
&response_mode=query
&scope=https://storage.azure.com/user_impersonation
&state=12345
湾。获取令牌
Post https://login.microsoftonline.com/<>/oauth2/v2.0/token
client_id=<>
&scope=https://storage.azure.com/user_impersonation
&code=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq3n8b2JRLk4OxVXr...
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&grant_type=authorization_code
&client_secret=<>
Get https://myaccount.blob.core.windows.net/mycontainer/myblob
Headers :
Authorization: Bearer <>
x-ms-version: 2019-02-02
此外,您还可以使用 sas 令牌访问 Azure Blob。更多详情请参考https://docs.microsoft.com/en-us/rest/api/storageservices/create-service-sas。 例如
$account="blobstorage0516"
$key=""
$container="test"
$blob="test.json"
$context= New-AzStorageContext -StorageAccountName $account -StorageAccountKey $key
Write-host "The blob access level :"(Get-AzStorageContainerAcl -Name test -Context $context).PublicAccess -ForegroundColor red
$sas=New-AzStorageBlobSASToken -Container $container -Blob $blob -Permission r -Context $context
$url="https://${account}.blob.core.windows.net/${container}/${blob}${sas}"
Invoke-WebRequest -Uri $url -Method Get -OutFile e:\test.json
Write-host "download successfully"
【讨论】: