Azure 存储帐户连接错误“此请求无权执行此操作,ErrorCode:AuthorizationFailure”

问题描述 投票:0回答:1

我正在构建一个 Web 应用程序来从 Blob 存储帐户读取文件并计算特定指标。此应用程序将部署为 Azure Web 应用程序资源,仅限通过公司 VPN 连接的用户。 Web 应用程序和存储帐户配置为在专用端点上运行,确保它们无法从公共 Web 访问。

该应用程序正在通过 Azure 管道作为代码进行部署,并且我们已经创建了服务连接。

已为 Web 应用程序资源分配存储帐户资源中的 Storage Blob Data ContributorStorage Queue Data Contributor 角色。

要从存储帐户读取数据,我使用配置了所有允许的服务、资源类型和权限的连接字符串,以及仅适用于允许的协议的 HTTPS。从存储中获取必要数据的脚本如下:

def fetch_access_data(connection_string, admin_container_name, access_blob_name):
    blob_service_client = BlobServiceClient.from_connection_string(connection_string)
    blob_client = blob_service_client.get_blob_client(container=admin_container_name, blob=access_blob_name)
    stream = io.BytesIO(blob_client.download_blob().readall())
    df_access = pd.read_excel(stream)
    return df_access

此脚本旨在检索每个用户有权访问的文件,并作为第一次尝试连接存储帐户并从存储帐户读取数据。

错误是:

HttpResponseError:该请求无权执行该操作。 RequestId:RequestId 失败内容:

AuthorizationFailure
此请求无权执行此操作。 RequestId:RequestId 时间:2024-11-12T07:44:22.7022630Z

在 Microsoft Azure 存储资源管理器中使用相同的连接字符串可以完全访问存储帐户,包括毫无问题地下载和上传文件。

  1. 我们尝试通过添加端点 IP 来更改连接字符串。
  2. 使存储帐户只能由特定 IP 地址和虚拟网络访问。

同样的错误不断发生。

azure authentication azure-web-app-service streamlit azure-storage-account
1个回答
0
投票

我能够使用 SAS 令牌在本地和 Azure Web 应用程序中从 Azure Blob 存储读取文件。

我已将 Storage Blob Data Contributor 角色分配给 Azure Web App,并将 Owner 角色分配给服务原则,如下所示。

enter image description here

app.py:

from azure.storage.blob import BlobServiceClient
import io
import streamlit as st

def fetch_access_data(account_url, sas_token, admin_container_name, access_blob_name):
    blob_service_client = BlobServiceClient(account_url=account_url, credential=sas_token)
    blob_client = blob_service_client.get_blob_client(container=admin_container_name, blob=access_blob_name)
    stream = io.BytesIO(blob_client.download_blob().readall())
    text_data = stream.getvalue().decode('utf-8')  
    return text_data

account_url = "https://<storageName>.blob.core.windows.net/"
sas_token = "<SAS_Token>"
admin_container_name = "kamcontainer"
access_blob_name = "samplekam.txt"
st.title("Azure Blob Storage Text File Viewer")

try:
    text_content = fetch_access_data(account_url, sas_token, admin_container_name, access_blob_name)
    st.subheader("Contents of the file:")
    st.text(text_content)
    
except Exception as e:
    st.error(f"An error occurred: {e}")

确保在 Azure 存储中的

IP address
设置下添加您的
Network
,如下所示。

enter image description here

在 Azure Web App 中,您可以在

public network access
下添加您的 IP 地址,连接
VNet
NAT gateway
,如下所示。

enter image description here

在 Azure Web 应用程序的

Backups
中配置您的存储帐户,如下所示。

enter image description here

Azure Web 应用程序输出:

我成功从 Azure Web App 中的 Azure Blob 存储读取文件,如下所示。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.