如何使用管理标识从 aks 群集中的 Pod 连接到 Azure 存储How to use manage Identity to connect to Azure storage from a pod in aks cluster

How to use manage Identity to connect to azure storage from a pod in aks cluster

提问人:tiger t 提问时间:11/17/2023 更新时间:11/17/2023 访问量:65

问:

我已创建托管标识。我的应用程序使用 Flask。 现在,我的 Pod 已部署在 AKS 群集中。我的 Pod 需要使用 pip 包 azure-storage-file-share 连接到 Azure 存储。 如何管理标识以从 Pod 访问 Azure 存储?

我想我必须先将托管标识绑定到 pod。 在应用程序级别必须执行哪些操作?

在本地,我能够使用访问密钥连接到 Azure 存储,但不能从 aks 群集中的 pod 连接到 Azure 存储。

Kubernetes Azure-Managed-Identity

评论

0赞 Thomas 11/21/2023
您需要在集群上配置工作负载标识:learn.microsoft.com/en-us/azure/aks/...

答:

0赞 Arko 11/17/2023 #1

若要使用托管标识连接到 Azure 存储,需要确保群集配置为使用托管标识并链接到存储帐户。

az aks create --resource-group <resource-group-name> --name <aks-cluster-name> --enable-managed-identity

enter image description here

创建/验证 Azure 存储帐户,使其配置为允许从与 AKS 群集关联的托管标识进行访问。

az role assignment create --assignee <managed-identity-object-id> --role "Storage Blob Data Contributor" --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-account-name>

enter image description here enter image description here

现在,对于 flask 应用部分,通常所有最新版本的用于 Python 的 Azure SDK 都支持托管标识。在 Flask 应用程序中,使用库中的 自动通过托管标识进行身份验证。 只需替换为 Azure 存储帐户的名称,如下所示 例:DefaultAzureCredentialazure.identity<your-storage-account-name>

from flask import Flask, render_template

from azure.storage.fileshare import ShareServiceClient

from azure.identity import DefaultAzureCredential

  

app = Flask(__name__)

  

def get_storage_client():

credential = DefaultAzureCredential()

account_url = "https://asenstoracc1711.file.core.windows.net"

return ShareServiceClient(account_url=account_url, credential=credential)

Flask 应用程序应该能够使用托管标识访问 Azure 存储。

参考文件:

托管标识

使用适用于 python 的 Azure 库访问 Azure 存储\

AKS 托管 Pod 标识和对 Azure 存储的访问

评论

0赞 tiger t 11/18/2023
所以我确实去了 azure-identity,并尝试在本地运行。DefaultAzureCredential() 不应该选择我的环境变量吗?环境变量的内容应该是什么,我认为access_key就足够了。你能分享这个细节吗?
0赞 tiger t 11/19/2023
你能帮我理解这一点吗?
0赞 Arko 11/21/2023
@tigert DefaultAzureCredential() 将尝试在本地检查 Azure CLI 登录名(如果已使用本地用户登录),则默认情况下,它将选择该用户或服务主体登录名。
0赞 Arko 11/21/2023
如果已在 AKS 中部署了 Flask 应用,启用了托管标识,并在存储帐户上为其分配了角色,> DefaultAzureCredential() 将搜索现有身份验证,因为无法在 AKS 中手动运行 az login,它会自动选取托管标识凭据,并搜索群集上是否启用了任何托管标识,并相应地进行身份验证。请确保在 AKS 上启用了托管标识,并在 Flask 应用的环境变量中使用相同的托管标识客户端 ID,并在 Pod 中运行它。
0赞 Thomas 11/23/2023
AKS 托管标识是在 Pod 级别分配的不同表单标识。这是行不通的。它需要启用工作负载标识