Azure PHP Web 应用使用系统分配的托管标识连接到 Azure 存储 Blob
Azure PHP web app using system assigned managed identity connecting to Azure Storage Blob
我需要使用系统分配的托管标识将 Azure Web 应用程序连接到存储帐户。我的应用程序正在使用 PHP。做了以下配置:https://docs.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 language
中没有 library
用于使用系统管理身份从 Web APP 访问 blob 数据
唯一可用的语言是 C# 和 Node.js
你可以在 github 中提出这个问题,也许你可以从那里得到一些帮助
我可能没有正确理解你的问题,但是当你使用系统管理的身份时,你的应用程序服务或 VM 应该注册为身份并且你不应该在你的代码中编写任何设置,至少这是我如何使用系统管理的身份。
我应用两个步骤:
- 我直接从应用服务获取 MSI 令牌
- 我使用此访问令牌调用我的 Azure 服务
变量 $_SERVER['IDENTITY_ENDPOINT'] 和 $_SERVER['IDENTITY_HEADER'] 在您使用的 Azure 资源上启用托管服务身份时可用。这是在您可以在网上找到的库和脚本中提取出来的“秘方”。
此操作的基础在 Microsoft Documentation on how to access Managed Identity credentials.
中进行了描述
这是我使用 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']);
结果输出为:
Hello World from Azure!
The secret for Foo is Bar
如果您对它感兴趣,可以使用与托管身份一起使用的作曲家包。有关详细信息,请参阅 https://github.com/wapacro/az-keyvault-php。
希望这个回答对您有进一步的帮助,如果没有,请告诉我,我很乐意提供帮助。祝你好运!
我需要使用系统分配的托管标识将 Azure Web 应用程序连接到存储帐户。我的应用程序正在使用 PHP。做了以下配置:https://docs.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 language
中没有 library
用于使用系统管理身份从 Web APP 访问 blob 数据
唯一可用的语言是 C# 和 Node.js
你可以在 github 中提出这个问题,也许你可以从那里得到一些帮助
我可能没有正确理解你的问题,但是当你使用系统管理的身份时,你的应用程序服务或 VM 应该注册为身份并且你不应该在你的代码中编写任何设置,至少这是我如何使用系统管理的身份。
我应用两个步骤:
- 我直接从应用服务获取 MSI 令牌
- 我使用此访问令牌调用我的 Azure 服务
变量 $_SERVER['IDENTITY_ENDPOINT'] 和 $_SERVER['IDENTITY_HEADER'] 在您使用的 Azure 资源上启用托管服务身份时可用。这是在您可以在网上找到的库和脚本中提取出来的“秘方”。
此操作的基础在 Microsoft Documentation on how to access Managed Identity credentials.
中进行了描述这是我使用 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']);
结果输出为:
Hello World from Azure!
The secret for Foo is Bar
如果您对它感兴趣,可以使用与托管身份一起使用的作曲家包。有关详细信息,请参阅 https://github.com/wapacro/az-keyvault-php。
希望这个回答对您有进一步的帮助,如果没有,请告诉我,我很乐意提供帮助。祝你好运!