4

我开始使用 Secrets Manager 并在 AWS 中创建了我的第一个密钥。在此过程中,它给了我一些示例代码。我把它放在一个小应用程序中并运行它。编码:

String region = "us-east-1";
string secret = "";

MemoryStream memoryStream = new MemoryStream();
IAmazonSecretsManager client = new AmazonSecretsManagerClient(
                           RegionEndpoint.GetBySystemName(region));

GetSecretValueRequest request = new GetSecretValueRequest();
request.SecretId = "MySecretNameExample";

GetSecretValueResponse response = null;
response = client.GetSecretValue(request);

问题是:

  1. 我能够成功检索到我创建的秘密,并且
  2. 我没有在任何地方使用任何有效的 AWS 凭证数据创建 Credentials 对象

此代码从哪里获取凭证信息?

4

2 回答 2

5

如果您参考这行代码的 API 文档:

IAmazonSecretsManager client = new AmazonSecretsManagerClient(
    RegionEndpoint.GetBySystemName(region));

AmazonSecretsManagerClient

您将找到以下说明:

使用从应用程序的默认配置加载的凭证构造 AmazonSecretsManagerClient,如果从 EC2 实例上的实例配置文件服务不成功。

这意味着您要么在 EC2 或 ECS 服务(或相关服务,如 Beanstalk 等)上运行,并且为实例分配了角色,要么您已在凭证文件中以标准方法配置了您的凭证。AWS 开发工具包正在帮助您找到凭证。

此文档链接将更详细地说明如何管理和选择 AWS 凭证。

使用 AWS 凭证

我已经看到很多开发人员在凭证的工作方式以及它们在 SDK 中的使用方式方面都搞错了。鉴于 AWS 凭证持有 AWS 王国的钥匙,因此管理和保护它们至关重要。

于 2018-08-28T23:16:09.860 回答
4

AWS 开发工具包使用一种解析策略,该策略会查看多个位置,直到找到可以使用的凭证。通常,DefaultProviderChain该类负责执行解析。更多信息在这里,但要点是按以下顺序执行查找(对于 Java,其他语言类似):

  • 环境变量
  • Java 系统属性
  • 凭证文件(例如在主目录中)
  • 实例配置文件凭证(仅在 AWS 中运行时可用)

当您在 AWS 基础设施中运行时,您可以将配置文件或角色分配给运行您的代码的资源。这样做会使凭据自动可用于您的代码。这个想法是,他们可以很容易地避免将凭据直接放入您的代码中。

于 2018-08-28T22:31:37.523 回答