簡體   English   中英

Azure PHP web 應用程序使用系統分配的托管身份連接到 Azure 存儲 Blob

[英]Azure PHP web app using system assigned managed identity connecting to Azure Storage Blob

我需要使用系統分配的托管標識將 azure web 應用程序連接到存儲帳戶。 我的APP正在使用PHP。配置是否如下: https://learn.microsoft.com/en-us/azure/app-service/scenario-secure-app-access-storage?tabs=azure-portal%2Cprogramming-language -csharp 沒問題

那里的示例使用 C# 我找不到 PHP 的示例。任何人都知道如何使用系統分配的托管標識將 azure web 應用程序與 PHP 連接到存儲帳戶 blob?

謝謝,

沒有PHP languagelibrary可以使用系統管理標識從 Web APP 訪問 blob stotage

唯一可用的語言是 C# 和 Node.js

你可以在github中提出這個問題,也許你可以從那里得到一些幫助

我在正確理解你的問題時可能是錯誤的,但是當你使用系統管理的身份時,你的應用程序服務或 VM 應該注冊為身份並且你不應該在你的代碼中編寫任何設置,至少這是我使用系統管理的方式身份。

我應用兩個步驟:

  1. 我直接從應用服務中檢索 MSI 令牌
  2. 我使用此訪問令牌調用我的 Azure 服務

在您正在使用的 Azure 資源上啟用托管服務身份時,變量 $_SERVER['IDENTITY_ENDPOINT'] 和 $_SERVER['IDENTITY_HEADER'] 可用。 這是在您可以在網上找到的庫和腳本中提取出來的“秘方”。

有關如何訪問托管身份憑據的 Microsoft 文檔中描述了此操作的基礎。

下面是一個示例,我使用 PHP curl 擴展來讓您了解需要完成的工作:

<?php

echo nl2br('Hello World from Azure!' . PHP_EOL);

$vaultResource = sprintf(
    'resource=%s&api-version=%s',
    urlencode('https://vault.azure.net'),
    '2019-08-01'
);
$headers = [
    'Accept: application/json'
];
$curlOptions = [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_USERAGENT => 'AzurePHPDev/1.0.0',
];

$tokenUrl = sprintf(
    '%s/?%s',
    rtrim($_SERVER['IDENTITY_ENDPOINT'], '/'),
    $vaultResource,
);
$headers[] = 'X-IDENTITY-HEADER:' . $_SERVER['IDENTITY_HEADER'];
$token = '';
$tokenHandler = curl_init($tokenUrl);

curl_setopt_array($tokenHandler, $curlOptions + [CURLOPT_HTTPHEADER => $headers]);
if (false === ($token = curl_exec($tokenHandler))) {
    echo nl2br(sprintf('Can not connect: %s', curl_error($tokenHandler)) . PHP_EOL);
    exit;
}
curl_close($tokenHandler);
$parsedToken = json_decode($token, true);

$key = 'Foo';
$secretUrl = sprintf(
    'https://identityphpdemokv.vault.azure.net/secrets/%s?api-version=7.2',
    $key
);
$headers[] = sprintf('Authorization: Bearer %s', $parsedToken['access_token']);
$secret = '';
$secretHandler = curl_init($secretUrl);
curl_setopt_array($secretHandler, $curlOptions + [CURLOPT_HTTPHEADER => $headers]);
if (false === ($secret = curl_exec($secretHandler))) {
    echo nl2br(sprintf('Can not connect: %s', curl_error($secretHandler)) . PHP_EOL);
}
curl_close($secretHandler);
$parsedSecret = json_decode($secret, true);

echo sprintf('The secret for %s is %s', $key, $parsedSecret['value']);

結果 output 是:

Hello World from Azure!
The secret for Foo is Bar

如果您對此感興趣,可以使用 composer package 來處理托管身份。 有關詳細信息,請參閱https://github.com/wapacro/az-keyvault-php

希望這個答案能進一步幫助您,如果沒有讓我知道,我很樂意提供幫助。 祝你好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM