簡體   English   中英

如何在python中針對Azure存儲blob對用戶進行身份驗證?

[英]How do I authenticate a user against an Azure storage blob in python?

我正在尋找一種方法來針對Azure blob容器對用戶進行身份驗證。 示例代碼(是的,新手警報)工作得很好,使用存儲帳戶的訪問密鑰,但令人不舒服的感覺就像將任何竊取憑據的人完全控制整個存儲帳戶一樣。

auth示例(來自https://azure.microsoft.com/en-us/resources/samples/storage-python-getting-started/ )如下所示:

block_blob_service = BlockBlobService(account_name='<acc>', account_key='<key>')

我在Active Directory中設置了一個服務用戶,其存儲帳戶中的一個角色限制了它對blob容器的使用; 除了將新項目寫入一個特定的容器之外,它不打算做什么。

我想在python腳本中使用該用戶的憑據,這樣如果它泄漏,則無法訪問其他存儲資源。 有沒有辦法根據資源/ id組合或類似方式生成訪問密鑰? 我一直在瀏覽Azure Python API文檔,但沒有取得任何進展。

編輯:我已經取得了一些進展。 我已經創建了一個具有適當IAM限制的服務主體。 當我調用它時,這似乎成功登錄:

credentials = ServicePrincipalCredentials( client_id=<>, secret=<>, tenant=<>)
print(credentials)

這給了我一個對象:

<msrestazure.azure_active_directory.ServicePrincipalCredentials object at 0x7f34f52668d0>

如果我給它不正確的憑據,則會出錯。 好吧,我有一個憑證對象。 怎么辦? 我找不到將其提供給BlockBlobService的方法。

您可以參考本文從應用程序中使用Azure Active Directory進行身份驗證以訪問blob。

1. 向Azure AD租戶注冊您的應用程序

2. 將您的注冊應用程序權限授予Azure存儲

3.Python代碼:

import adal
from azure.storage.blob import (
    BlockBlobService,
    ContainerPermissions,
)
from azure.storage.common import (
    TokenCredential
)

RESOURCE = "https://storage.azure.com/"
clientId = "***"
clientSecret = "***="
tenantId = "***"
authority_url = "https://login.microsoftonline.com/" + tenantId

print(authority_url)
context = adal.AuthenticationContext(authority_url)

token = context.acquire_token_with_client_credentials(
    RESOURCE,
    clientId,
    clientSecret)
print(token)

tokenCre = TokenCredential(token["accessToken"])

blobService = BlockBlobService(account_name="***", token_credential=tokenCre)

blobService.list_blobs(container_name="***")
for i in blobService.list_blobs(container_name="***"):
    print(i.properties.name)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM