【发布时间】:2018-10-31 07:16:05
【问题描述】:
我有一个托管在 azure 上的 asp.net 核心网站。
我想在 Amazon S3 中上传文件。
如何在 Azure Web App 中配置 AWS 凭证。
【问题讨论】:
标签: amazon-web-services azure asp.net-core
我有一个托管在 azure 上的 asp.net 核心网站。
我想在 Amazon S3 中上传文件。
如何在 Azure Web App 中配置 AWS 凭证。
【问题讨论】:
标签: amazon-web-services azure asp.net-core
Azure Key Vault 是存储您在 Azure 中托管的 Web 应用程序将使用的任何敏感/秘密信息(如凭据)的最佳选择。
这是一个示例,其中包含代码以及设置步骤,您可以按照这些步骤从 .NET 核心 Web 应用程序中执行此操作。 (Sample documentation)
此示例还演示了为您的 Web 应用使用托管服务标识以访问密钥保管库的另一个最佳实践。这将自动处理围绕关键轮换和其他问题的治理。万一您的 Web 应用由于某种原因已经拥有 Azure AD 注册标识,您也可以使用它来访问密钥保管库。
代码可在此处获得:
https://github.com/Azure-Samples/key-vault-dotnet-core-quickstart.git
不给你一个链接只是一种答案,这里只是高级步骤。有关详细信息,当然请查看 github 存储库和文档。
您可以使用 Azure 门户或使用类似的命令创建 Key Vault
az keyvault create --name "<YourKeyVaultName>" --resource-group "<YourResourceGroupName>" --location "East US"
您在此保管库中为将用于访问 AWS S3 的用户名和密钥创建密钥。再次使用门户或 Azure CLI 命令。
az keyvault secret set --vault-name "<YourKeyVaultName>" --name "AWS-ACCESS-KEY-ID" --value "MySecretValue1"
az keyvault secret set --vault-name "<YourKeyVaultName>" --name "AWS-SECRET-KEY" --value "MySecretValue2"
为您的网络应用启用托管标识
az webapp identity assign --name "keyvaultdotnetcorequickstart" --resource-group "<YourResourceGroupName>"
为您的 Web 应用分配从 Key Vault 读取机密的权限
az keyvault set-policy --name '<YourKeyVaultName>' --object-id <PrincipalId> --secret-permissions get list
浏览 repo 中的 Key Vault 相关代码。下面给出 Program.cs 的重要部分
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((ctx, builder) =>
{
var keyVaultEndpoint = GetKeyVaultEndpoint();
if (!string.IsNullOrEmpty(keyVaultEndpoint))
{
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
builder.AddAzureKeyVault(
keyVaultEndpoint, keyVaultClient, new DefaultKeyVaultSecretManager());
}
}
).UseStartup<Startup>()
.Build();
private static string GetKeyVaultEndpoint() => "https://<YourKeyVaultName>.vault.azure.net";
【讨论】:
%USERPROFILE%\.aws\credentials 文件或环境变量,否则我无法从我的应用程序中检索凭据。
最佳做法是让您的客户端应用程序直接上传到 S3,而不是流经您自己的 Web 基础架构。这将利用 S3 的以太大规模并行特性并卸载您的 Web 基础架构。卸载您的基础设施将允许使用更少的实例或更小的实例来提供相同数量的流量。因此,您的基础架构成本更低。
如果您的应用程序是 Web 应用程序,您甚至可以让客户的浏览器直接上传到 S3。阅读此AWS Documentation
了解如何安全地实现此功能希望这会有所帮助!
【讨论】: