AWS Secrets Manager 从哪里获得 AWS 凭证?

Where does AWS Secrets Manager get AWS Credentials?

我开始使用 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 凭证数据创建凭证对象

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

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

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

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

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

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

AmazonSecretsManagerClient

您将找到以下描述:

Constructs AmazonSecretsManagerClient with the credentials loaded from the application's default configuration, and if unsuccessful from the Instance Profile service on an EC2 instance.

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

本文档link 将更详细地解释如何管理和选择 AWS 凭据。

Working with AWS Credentials

我看到很多开发人员在有关凭据的工作方式以及它们在 SDK 中的使用方式的小细节上犯了错误。鉴于 AWS 凭证持有 AWS 王国的钥匙,管理和保护它们至关重要。