问题描述
我已经编写了一些代码来从AWS Secrets Manager检索我的机密,以用于其他组件的进一步处理。在开发环境中,我使用AWS CLI配置了凭证。编译代码后,我就可以从VS以及生成的exe上运行它。
这是连接到机密管理器并检索机密的代码
public static string Get(string secretName)
{
var config = new AmazonSecretsManagerConfig { RegionEndpoint = RegionEndpoint.USWest2 };
IAmazonSecretsManager client = new AmazonSecretsManagerClient(config);
var request = new GetSecretValueRequest
{
SecretId = secretName
};
GetSecretValueResponse response = null;
try
{
response = Task.Run(async () => await client.GetSecretValueAsync(request)).Result;
}
catch (ResourceNotFoundException)
{
Console.WriteLine("The requested secret " + secretName + " was not found");
}
catch (InvalidRequestException e)
{
Console.WriteLine("The request was invalid due to: " + e.Message);
}
catch (InvalidParameterException e)
{
Console.WriteLine("The request had invalid params: " + e.Message);
}
return response?.SecretString;
}
此代码从AWS CLI中提取凭证,但是当我尝试在另一台PC上运行此代码时,它会出现预期的IAM安全错误,因为它无法确定连接到密钥管理器的凭证。>
在生产环境中部署这种配置的最佳方法是什么?我是否需要在每个部署中安装和配置AWS CLI?
解决方法
如果您要在AWS中部署代码,则可以使用IAM角色,其策略允许从Secret Manager获取机密,并将此角色附加到EC2或ECS等中
,如果您在具有现有身份验证基础结构的公司环境中,则可能需要查看与AWS结合使用的identity federation解决方案。