PHP 访问私有 Azure 存储容器

PHP Access to Private Azure Storage Container

我的 PHP 应用程序托管在 Azure VM 中,需要访问存储在私有 Azure 存储容器中的图像。

有人实施过成功的方法吗?我有 3 个想法(如下)。

选项 1 - 使用 Azure 托管身份

  1. 为应用程序提供托管身份
  2. 授予容器的 RBAC 读取权限
  3. 在 PHP 中向 VM 实例元数据端点发出 curl 请求以获取访问令牌
  4. 在所有图像请求中使用此令牌(我将如何在我的应用程序中保留令牌?)

选项 2 - 使用 Azure BLOB 存储 SDK PHP

  1. 使用 Azure Blob 存储 SDK 检索图像
  2. 这需要将存储密钥从我的保管库返回到应用程序

选项 3 - 使用 Azure 共享访问签名

  1. 在 PHP 中为每个图像生成一个新的 SAS
  2. 需要存储帐户密钥

谢谢!

根据您的需求和描述,我认为使用Azure Managed Identity访问Azure存储比其他方式更好。因为,根据你的描述,如果我们使用第二种或第三种方式,我们需要从Azure key vault中获取存储密钥。它还需要我们使用 MSI 来访问它。另外,对于第三种方式,我们需要考虑sas token的生命周期。所以我建议你使用 MSI 访问 Azure 存储。

关于如何使用MSI访问Azure存储,请参考document

  1. Configure managed identities fro VM vai Azure Portal

  2. Grant the VM access to an Azure Storage container

  3. 获取令牌

Method: GET
URL: http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://storage.azure.com/
Headers: Metadata : true

  1. 测试。比如我把剩下的api调用成get blob
Method: GET
URL: https://myaccount.blob.core.windows.net/mycontainer/myblob
Headers: 
         x-ms-version: 2019-02-02
         Authorization : Bearer <access_token>