我正在使用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用户临时证书 - 你对它有什么了解吗?
答案 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)使用凭据文件
在生产中使用角色时,您可以在本地/在本地计算机上进行开发时使用此技术。这种方法也允许您使用不同的帐户。只需在需要时为配置添加更多配置文件部分。
<configuration>
<appSettings>
<add key="AWSProfileName" value="development"/>
<add key="AWSProfilesLocation" value="C:\aws_service_credentials\credentials"/>
</appSettings>
</configuration>
[development]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
请参阅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中,除非它被加密,因为人们会看到您的密钥
所以考虑因素是:
没有正确或错误的答案,但我的偏好是web.config
保
答案 2 :(得分:0)
由于加密/解密web.config的一部分非常容易,我会选择这个解决方案:http://msdn.microsoft.com/en-us/library/dtkwfdky.aspx