使用 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 以便当您的代码从本地计算机执行时将承担此角色。
我想将敏感数据存储在 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 以便当您的代码从本地计算机执行时将承担此角色。