提问人:tiger t 提问时间:11/17/2023 更新时间:11/17/2023 访问量:65
如何使用管理标识从 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
问:
我已创建托管标识。我的应用程序使用 Flask。 现在,我的 Pod 已部署在 AKS 群集中。我的 Pod 需要使用 pip 包 azure-storage-file-share 连接到 Azure 存储。 如何管理标识以从 Pod 访问 Azure 存储?
我想我必须先将托管标识绑定到 pod。 在应用程序级别必须执行哪些操作?
在本地,我能够使用访问密钥连接到 Azure 存储,但不能从 aks 群集中的 pod 连接到 Azure 存储。
答:
0赞
Arko
11/17/2023
#1
若要使用托管标识连接到 Azure 存储,需要确保群集配置为使用托管标识并链接到存储帐户。
az aks create --resource-group <resource-group-name> --name <aks-cluster-name> --enable-managed-identity
创建/验证 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>
现在,对于 flask 应用部分,通常所有最新版本的用于 Python 的 Azure SDK 都支持托管标识。在 Flask 应用程序中,使用库中的 自动通过托管标识进行身份验证。
只需替换为 Azure 存储帐户的名称,如下所示
例:DefaultAzureCredential
azure.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 存储\
评论
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 级别分配的不同表单标识。这是行不通的。它需要启用工作负载标识
评论