4

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

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

为了使用适用于 .NET 的 AWS API,我必须在 API 调用中提供这些凭证。我不使用网络服务拨打电话。调用是通过我专门为封装 Amazon API 调用而制作的 .cs 类文件进行的。

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

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

谢谢。

顺便说一句:还有一个使用 IAM 用户临时凭证的选项——你知道吗?

4

3 回答 3

7

您不应将 AWS 访问密钥和秘密存储在您的代码中。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 中创建一个名为 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

请参阅http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html以设置您的凭据。

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

C)直接将凭据添加到您的应用配置(不推荐)

不建议使用这种方法,因为如果您的应用配置可以共享并且您的密钥被泄露。

<add key="AWSAccessKey" value="key"/>
<add key="AWSSecretKey" value="secret"/>
<add key="AWSRegion" value="eu-west-1" />
于 2015-08-05T21:59:13.957 回答
0

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

所以考虑是:

  1. 能够更改您的密钥
  2. 其他人更改您的密钥的可能性

没有正确或错误的答案,但我的偏好是 web.config

保罗

于 2011-08-12T13:57:36.803 回答
0

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

于 2011-08-12T14:04:59.307 回答