2014-03-12 69 views
0

我试图运行查询来检查所有Amazon EC2实例。使用亚马逊AWS sdk - 您无权执行此操作

我使用的演示应用程序模板,它运行良好,我的凭据,但我不太明白它如何使用aws密钥和密钥。

在我的app.config(控制台演示应用程序):

<!-- Amazon AWS API keys. --> 
<add key="AWSAccessKey" value="ASDASDASDASD"/> 
<add key="AWSSecretKey" value="asdasdf/qwerqwerqwerqwerqwer"/> 
<add key="AWSRegion" value="us-east-1" /> 

它运行良好,并列出我的情况:

// Print the number of Amazon EC2 instances. 
IAmazonEC2 ec2 = AWSClientFactory.CreateAmazonEC2Client(); 
DescribeInstancesRequest ec2Request = new DescribeInstancesRequest(); 
DescribeInstancesResponse ec2Response = ec2.DescribeInstances(ec2Request); 

var numInstances = ec2Response.Reservations.Count; 

注意如何它不是真正访问的App.config值这是我混乱的根源。


在实打实的应用

现在,我MVC3应用。我想同样的事情,但我得到这个错误:

You are not authorized to perform this operation. 

在我web.config

<appSettings> 
    <!-- Amazon AWS API keys. --> 
    <add key="AWSAccessKey" value="asdfasdfasdfasdf"/> 
    <add key="AWSSecretKey" value="adsfasdfadf/asdfasdfasdfasdf"/> 
    <add key="AWSRegion" value="us-east-1" /> 

缺少什么我在这里?

+0

如果您创建AWS客户端时未显式提供凭据(即使用无参数构造函数),则SDK将在各个位置查找凭据,其中包括App.config或Web.config的appSettings部分。目前还不清楚为什么他们没有从你的Web.config中获取这种情况。你提供的东西似乎是正确的。 –

+0

我是这样一个混帐 - 我不知道如何/为什么,但由'ConfigurationManager'调用的实际字符串值不正确。我花了3个小时才注意到使用调试器。一些摩卡的时间! – sergserg

回答

0

不是100%确定你的问题是什么,但是你有没有机会在EC2实例上运行工作代码,以及你在本地运行的非工作代码?

如果您的EC2实例使用IAM角色设置,并且该IAM角色具有所需的权限,则根本不需要提供凭据 - 它们是从实例“继承”的(btw:this也是向sdk提供证书的推荐方式,所以它们不会在配置文件中浮动)。

http://docs.aws.amazon.com/AWSSdkDocsNET/latest/DeveloperGuide/net-dg-roles.html72

如果那不是发生了什么事,也许你可能会更清楚一点 - 你怎么在你的第一个例子中知道,它不是访问您的凭据?

+0

我正在使用New Project模板,并且弹出一个窗口,询问我是否使用aws密钥和密钥。我如何确定我是否正在'在EC2实例上运行工作代码';请注意,我在本地机器上运行演示项目并且工作正常。 – sergserg

+0

所以我想问题是,当使用New Project模板生成演示应用程序时,它做了什么特别的事情?不会在我的MVC3项目中添加密钥到web.config足够了吗? – sergserg

+0

我的不好。网址未加载。 –