【发布时间】:2020-07-23 06:32:29
【问题描述】:
我正在使用 Visual Studio 创建一个 ASP.NET 项目,该项目将 DynamoDB 与 Amazon .NET SDK 结合使用。我已经安装了 Amazon Visual Studio 工具包并使用 .NET 加密商店中的密钥/密钥创建了一个 default 配置文件。
当我在 Visual Studio 内的开发机器上本地运行 ASP.NET 程序时,一切正常。 当我将同一个项目部署到虚拟机(在本地 LAN 上运行)并且 IIS 尝试执行代码时,它会抛出异常:
Amazon.Runtime.AmazonServiceException: Unable to get IAM security credentials from EC2 Instance Metadata Service.
at Amazon.Runtime.DefaultInstanceProfileAWSCredentials.FetchCredentials()
at Amazon.Runtime.DefaultInstanceProfileAWSCredentials.GetCredentials()
at Amazon.Runtime.Internal.Util.SdkCache.CacheKey.Create(AmazonServiceClient client, Object cacheType)
at Amazon.Runtime.Internal.Util.SdkCache.GetCache[TKey,TValue](AmazonServiceClient client, Object cacheIdentifier, IEqualityComparer`1 keyComparer)
at Amazon.DynamoDBv2.DocumentModel.Table.LoadTableInfo()
at Amazon.DynamoDBv2.DataModel.DynamoDBContext.GetUnconfiguredTable(String tableName)
at Amazon.DynamoDBv2.DataModel.DynamoDBContext.GetTargetTable(ItemStorageConfig storageConfig, DynamoDBFlatConfig flatConfig, DynamoDBConsumer consumer)
at Amazon.DynamoDBv2.DataModel.DynamoDBContext.ConvertQueryHelper[T](DynamoDBFlatConfig currentConfig, ItemStorageConfig storageConfig, QueryFilter filter, List`1 indexNames)
at Authentication.Controllers.AuthController.VerifyLicense(Object details)
这显然是凭据问题,但我无法弄清楚为什么它在 VM 和本地 VS IDE 中的行为不同。根据DynamoDB docs,如果您使用默认配置文件,它应该在您构建/部署它时自动将凭据嵌入到程序中。它似乎没有这样做。
我在项目中与 DynamoDB 初始化相关的唯一代码是:
AmazonDynamoDBConfig clientConfig = new AmazonDynamoDBConfig();
clientConfig.RegionEndpoint = RegionEndpoint.USEast1;
AmazonDynamoDBClient client = new AmazonDynamoDBClient(clientConfig); // using the "default" profile in Visual Studio which contains the AWS credentials
是否有一个特殊指令要添加到项目或代码中以嵌入 Secret/Key 凭据(这将是不安全的),或者我是否遗漏了其他内容? 在 VS 的 AWS Explorer 中创建配置文件时,我是否应该使用 Shared Credentials File 而不是 .NET Encrypted Store? (文档对差异非常吝啬)
【问题讨论】:
-
虚拟机是指在 EC2 实例上和本地您自己的机器上?
-
非 EC2 在 LAN 上运行
标签: asp.net amazon-web-services amazon-dynamodb virtual-machine