【问题标题】:Only allow authorized users to access blob urls in an azure storage container仅允许授权用户访问 azure 存储容器中的 blob url
【发布时间】:2019-12-31 10:08:37
【问题描述】:

如果我将 blob 的访问级别配置为私有,则即使那些 AD 帐户已添加到存储帐户的用户也无法访问 blob url。

我怎样才能让 blob url 只能由特定的用户组访问? 根据另一个stackoverflow链接,似乎我必须提供访问密钥等效信息才能访问私有blob。在这种情况下,拥有访问密钥的任何人都可以访问 Blob,就好像访问级别是公共的一样。

【问题讨论】:

    标签: azure-blob-storage


    【解决方案1】:

    根据您的需要,我建议您可以使用共享访问签名或 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应用

    1. 配置 Azure 应用程序

      一个。配置权限

    2. 为用户配置 RABC 角色

    az role assignment create \
        --role "Storage Blob Data Contributor" \
        --assignee <email> \
        --scope "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>
    
    1. 获取令牌 一个。获取代码
      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=<>
      
    2. 调用 Azure blob rest api
    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"
    

    【讨论】:

    • Azure 存储帐户已通过 AD 身份验证。如果我将 blob 上传到容器,即使是经过 AD 身份验证的用户也无法访问 blob url(如果它是私有的)。我希望经过身份验证的用户能够通过电子邮件访问网址。
    • @Learner 如果要使用 AD 身份验证访问 blob,则需要为用户分配一个 Azure RABC 角色(如存储 Blob 数据贡献者)。更多详情请参考docs.microsoft.com/en-us/rest/api/storageservices/…
    • 我的 AD 角色(存储 Blob 数据参与者)已分配给存储帐户。但是,我无法访问位于存储帐户容器中的私有 blob。还需要什么配置?谢谢。
    • @Learner 你能告诉我你的错误和你的步骤吗?
    • @Learner 可以参考stackoverflow.com/questions/59406391/…了解如何使用 Azure AD auth 访问 Azure blob storge
    猜你喜欢
    • 2021-06-16
    • 2021-11-28
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 2021-05-02
    • 2018-08-03
    • 1970-01-01
    相关资源
    最近更新 更多