AWS Secrets Manager SDK 如何获取 AWS 凭证?

问题描述 投票:0回答:1

我来自这篇文章,它解释了 AWS SM SDK 如何通过实现此类方法从您的 WEB API 调用获取凭证:

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

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

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

但是有几个问题没有得到解答,这对我来说非常重要:

答案说,当涉及到 AmazonSecretManagerClient 类时,文档说:

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

  • 这是否意味着 AWS 将代表您剥离 EC2 实例,以便检索某种形式的凭证,并且费用是“您的费用”?由于您没有正确处理凭据访问,这会是他们必须运行的额外费用吗? 当他们说
  • application configurations
  • 时,在
    .NET 8
    的情况下,他们是否意味着存储在
    app settings.json
    文件中的凭证?
    
    
  • 我在文档中读到(我真的认为我无法理解),“应该”(也许)在您的系统和/或代码上的某处设置环境变量,对我来说这听起来像是纯文本凭据因此不行。

这似乎只涉及本地开发,如何转化为
    生产
  • 环境?您应该如何为生产设置这一切,以便在尝试访问机密时正确处理所有内容并且不会失败(不是谈论 http 错误或服务器访问错误,而是真正涉及凭证访问,并且不必在某处以纯文本形式提供凭证)?
  • 我问这一切是因为我对向我的代码添加此类第三方服务还很陌生,这次我希望我的 WEB API 在 GitHub Pages 上运行,因此我必须将我的存储库公开,这不会信息可以在源代码中的任何位置找到。

我也很难理解如何能够访问如此微妙的数据,而不必提供必须在代码中以某种方式“编写”在源代码中才能找到的凭据,以便应用程序能够进行通信与服务。

c# .net-8.0 aws-secrets-manager
1个回答
0
投票
https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/creds-assign.html

这是否意味着 AWS 将代表您剥离 EC2 实例...?

不。如果您的 .NET 代码在 EC2 实例上运行,并且在前面的 7 个步骤中没有其他凭证可用于解析凭证(请参阅上面的链接),则 AWS 开发工具包将获取您实例的配置文件凭证。

    https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-security-credentials.html
当他们说应用程序配置时,在 .NET 8 的情况下,他们是指存储在应用程序 settings.json 文件中的凭据吗?

您可以在 appsettings.json 中设置 AWS 配置文件,然后使用 AWS CLI 进行身份验证,以便您的代码自动使用环境变量中设置的凭证:

    https://www.boyersnet.com/blog/2021/04/08/configuring-.net-core-application-to-use-an-aws-named-profile/
  • https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html
  • 从安全角度来看,将 AWS 凭证动态设置为本地环境中的环境变量是很好的。

这似乎只是本地开发,如何转化为生产环境?

通常,您会在生产中采用“包含电池”的方法:让在 AWS 中运行的代码获取与实例的 IAM 角色关联的默认实例凭证(无论是 EC2 实例角色还是 AWS Lambda 执行角色) ),并让它尝试以这种方式访问 AWS 资源。您必须确保您的实例为该角色设置了正确的策略。

我问这一切是因为我对向我的代码添加此类第三方服务还很陌生,这次我希望我的 WEB API 在 GitHub Pages 上运行,因此我必须将我的存储库公开,这不会信息可以在源代码中的任何位置找到。

GitHub Pages 将无法托管您的 Web 应用程序 - 它仅托管要在您的 Web 浏览器中显示的文件。如果您想运行服务器端 REST API,则需要能够在云中运行 .NET 代码的工具。一些入门资源:

    https://github.com/aws/aws-dotnet-deploy
  • https://www.linkedin.com/pulse/deploy-net-application-aws-ecs-using-github-actions-cicd-jeelaga-cxtic
© www.soinside.com 2019 - 2024. All rights reserved.