【问题标题】:Accessing Azure Storage Blob from an AKS cluster从 AKS 群集访问 Azure 存储 Blob
【发布时间】:2019-10-14 09:47:50
【问题描述】:

一点背景:我必须将一个项目从我目前使用 ECS 的 AWS 迁移到 Azure,我将在其中使用 AKS,因为他们的 ACS(ECS 等效项)已被弃用。

这是一个常规的 Django 应用程序,其配置变量是从托管在私有 S3 存储桶上的 server-config.json 获取的,EC2 实例具有 S3FullAccess 的正确角色,

我一直在研究重现相同的行为,但使用 Azure Blob Storage 代替,但没有取得任何成功:-(。

我尝试使用Service Principal 概念并将其添加到AKS ClusterStorage Blob Data Owner 角色,但这似乎不起作用。总的来说,这是一次非常令人沮丧的经历——也许我只是很难掌握使用权限/范围的正确方法。 AKS Cluster 创建自己的资源组这一事实令人费解 - 但我也尝试将策略附加到它,但无济于事。然后,我转向了 Microsoft 指定的解决方案。

我设法通过他们指示的解决方案 aad-pod-identity 将我的 AKS pod 与正确的 User Managed Identity 绑定,但我觉得我错过了一些东西。我将Storage Blob Data Owner/Contributor 分配给身份,但是,当我进入pod 并尝试访问Blob(使用python sdk)时,我收到resource not found 消息。

我正在努力实现的目标有可能吗?或者我是否必须更改为使用 Azure Keyvault/something 的解决方案?

【问题讨论】:

    标签: azure azure-storage azure-blob-storage azure-aks


    【解决方案1】:

    首先,您可以使用AKS Engine,它现在或多或少是适用于 Kubernetes 的 ACS。

    至于对 blob 存储的访问,您不必使用托管服务标识,您只需使用帐户名\密钥即可(安全性稍差,但容易出错,并且存在更多示例)。您收到resource not found 错误的事实很可能意味着您的身份验证部分很好,您只是无权访问资源,根据this 存储blob 贡献者的说法,如果您在适当的范围内分配它应该没问题。为此,只需在订阅级别授予您的身份贡献者访问权限,这样就可以保证 100% 正常工作。

    我找到了一个将 python 与 MSI 结合使用的示例 (here)。您应该从那开始(并授予您的身份贡献者访问权限)并验证您可以列出资源组。什么时候让阅读 blob 工作应该是微不足道的。

    【讨论】:

    • 感谢您的回答!我试图避免使用存储帐户密钥,因为这意味着在我的代码中硬编码凭据 - 我绝对不会在生产级别执行此操作(不过对于开发/登台环境应该没问题)。我一直在摆弄权限的范围和附加它的位置(服务主体/托管身份),但到目前为止似乎没有任何效果。根据 MIC pod 中记录的事件,管理身份绑定至少成功发生。
    • 这就是我所缺少的! :) 我太努力地通过权限/角色重现我在 AWS 中所做的事情——而且它在这里的工作方式似乎不同。通过Secret(或通过ConfigMap - 相当于我的server-config.json)添加密钥解决了我的问题。再次感谢!
    • 嗯,使用 MSI 会更符合您的操作,但秘密也可以 :) 请记住秘密实际上并不是秘密,任何拥有适当权限的人都可以列出其内容
    猜你喜欢
    • 2020-06-03
    • 2023-01-27
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多