使用 C# 从 AWS 检索机密而不在代码库中存储访问凭证

Retrieving secrets from AWS with C# without storing access credentials in code base

我想将敏感数据存储在 AWS 秘密管理器中的 .Net Core C# 应用程序中。我已经在门户中创建了我的秘密,但是当我尝试使用以下代码访问它时:

var config = new AmazonSecretsManagerConfig
{
    ProxyHost = "MyProxyHost",
    ProxyPort = 8080,
    ProxyCredentials = CredentialCache.DefaultCredentials,
    Timeout = TimeSpan.FromMinutes(5),
    MaxErrorRetry = 1,
    RegionEndpoint = RegionEndpoint.MyRegion,
};

var client = new AmazonSecretsManagerClient(config);

然后我在尝试使用秘密管理器客户端时收到此消息:

Unable to get IAM security credentials from EC2 Instance Metadata Service

这不足为奇,因为我没有提供任何表明我应该能够访问机密管理器的信息。我可以使用以下代码获得访问权限:

var config = new AmazonSecretsManagerConfig
{
    ProxyHost = "MyProxyHost",
    ProxyPort = 8080,
    ProxyCredentials = CredentialCache.DefaultCredentials,
    Timeout = TimeSpan.FromMinutes(5),
    MaxErrorRetry = 1,
    RegionEndpoint = RegionEndpoint.MyRegion,
};

var client = new AmazonSecretsManagerClient("MyAWSAccessKeyId", "MyAWSSecretAccessKey", config);

虽然这意味着我必须将我的敏感数据存储在我的应用程序中,但这是我首先要避免的。在 Azure 中,使用 KeyVault 可以避免使用正确的 NuGet 包和托管标识。我想知道在 AWS 中托管的应用程序和本地开发是否有针对 AWS 的类似解决方案?

您可以使用 IAM 角色

创建一个具有 necessary permissions and attach the role to your EC2 instance. AmazonSecretsManagerClient 的 IAM 角色将在从 EC2 实例执行代码时承担此 IAM 角色。

对于本地开发:您可以配置 aws credentials with IAM role 以便当您的代码从本地计算机执行时将承担此角色。