存储Amazon AWS Id和密钥的最安全的位置在哪里?

时间:2011-08-12 13:54:11

标签: web-config amazon-web-services security secret-key

我正在使用ASP.NET开发应用程序。我想知道存储Amazon AWS Id和密钥的最安全的位置在哪里?

我想到了两种可能性:在实际的AmazonAPI.cs(类)本身作为私有成员。其次,作为web.config中的appSettings变量?

我必须通过API调用提供这些凭据才能使用AWS API for .NET。我不使用网络服务拨打电话。该调用是通过.cs类文件进行的,该文件是我为封装Amazon API调用而特别制作的。

你能取悦: 提供一个示例代码,演示如何完成它(一种好的方法就像找到的那样here) - 如果使用ASP.NET 4.0,可能有更好的方法,但我不确定。同样,我想在web.config中加密以下内容:

<appSettings>
 <add key="AWSAccessKey" value="" />
 <add key="AWSSecretKey" value="" />
</appSettings>

感谢。

顺便说一句:还有一个选项可以使用IAM用户临时证书 - 你对它有什么了解吗?

3 个答案:

答案 0 :(得分:6)

您不应在代码上存储AWS Access密钥和密钥。 AWS使用IAM角色,实例假定这些角色直接获得解决此问题的权限。 AWS在部署时为EC2实例提供IAM角色。

使用IAM角色将权限委托给在Amazon EC2上运行的应用程序 http://docs.aws.amazon.com/IAM/latest/UserGuide/roles-usingrole-ec2instance.html

编辑: AWS SDK的当前版本鼓励您:

A)使用EC2角色凭证(推荐)

将代码部署到EC2实例时,代码将自动在角色的上下文中运行。因此,您要为分配给EC2实例的IAM角色添加权限。

B)使用凭据文件

在生产中使用角色时,您可以在本地/在本地计算机上进行开发时使用此技术。这种方法也允许您使用不同的帐户。只需在需要时为配置添加更多配置文件部分。

  1. 在c:\ aws_service_credentials中创建一个凭证文件 凭证(无扩展名)
  2. 将以下内容添加到您的app.config中 <configuration> <appSettings> <add key="AWSProfileName" value="development"/> <add key="AWSProfilesLocation" value="C:\aws_service_credentials\credentials"/> </appSettings> </configuration>
  3. 在右侧文件夹中添加凭据文件(例如,C:\ aws_service_credentials \ credentials)
    [development] aws_access_key_id=AKIAIOSFODNN7EXAMPLE aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
  4. 请参阅http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html设置您的凭据。

    确保在您的进程可以访问的文件夹中创建配置文件(例如,文件夹和文件的Everyone权限)。如果您以管理员身份运行应用程序,这可能不是问题,但如果您将应用程序作为服务或后台应用程序运行。默认情况下,在C:\中创建的文件夹不会被所有人阅读,因此如果您缺少权限,请添加权限。

    C)直接向应用配置添加凭据(不推荐)

    不推荐使用此方法,因为如果您的应用配置可以共享并且密钥已泄露。

    <add key="AWSAccessKey" value="key"/>
    <add key="AWSSecretKey" value="secret"/>
    <add key="AWSRegion" value="eu-west-1" />
    

答案 1 :(得分:0)

如果将密钥存储在.cs类中,那么如果更改密钥,则必须重新编译然后重新部署。如果存储在web.config中,则可以轻松更改密钥。如果您在公共存储库(github或bitbucket)中托管,那么您不希望存储在web.config中,除非它被加密,因为人们会看到您的密钥

所以考虑因素是:

  1. 能够更改密钥
  2. 其他人更改密钥的可能性
  3. 没有正确或错误的答案,但我的偏好是web.config

答案 2 :(得分:0)

由于加密/解密web.config的一部分非常容易,我会选择这个解决方案:http://msdn.microsoft.com/en-us/library/dtkwfdky.aspx