gpt4 book ai didi

.net - 如何使用.net Core设置AWS凭证

转载 作者:行者123 更新时间:2023-12-04 19:07:12 24 4
gpt4 key购买 nike

我必须调试有关.net Core和AWS的现有项目。
我们的项目在我们的AWS实例上运行良好,但无法在本地运行该项目。

首先,我们得到了AmazonServiceException:无法找到凭证,但是现在我们收到了消息:AmazonClientException:没有配置RegionEndpoint或ServiceURL。我认为这更好。

我们的配置:
在我们的应用程序中,我们有3个appsettings。{env.EnvironmentName} .json(开发,本地和生产)。我们知道默认情况下VS使用开发文件。
在开发appsettings文件中,没有AWS对象,但是在本地appsettings文件中,只有以下对象:

"AWS": {
"Region": "ap-southeast-2"
}

我们没有任何web.config或其他json配置文件。

我们尝试将凭证文件创建为:
[name of my IAM profile]
aws_access_key_id=accesskey
aws_secret_access_key=secretkey
region=ap-southeast-2

但是我们找不到如何使用它。

我们还尝试使用dotnet core run命令运行项目,并将一些环境变量指定为:
export AWS_Region=ap-southeast-2
export AWS_ACCESS_KEY_ID=id
export AWS_SECRET_ACCESS_KEY=secret
export AWS_SESSION_TOKEN=token
export
AWS_CREDENTIAL_FILE=/Users/user/Developer/exemple/nameproject/G$

但是同样的错误。

Program.cs文件:
var host = new WebHostBuilder()
.UseKestrel(options => options.AddServerHeader = false)
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.UseUrls("http://*:9000")
.CaptureStartupErrors(true)
.Build();

host.Run();

启动文件(第一个功能):
public Startup(IHostingEnvironment env) {
// Configuration override https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", false, true)
.AddEnvironmentVariables();

Configuration = builder.Build();

// Shared startup configurator
CommonStartup = new CommonStartup(env, Configuration);
}

这是我们的问题:
在何处或如何配置我们的项目凭证?

预先感谢您的答复。

最佳答案

在AWS中,您可以创建一个IAM角色并将其配置为仅有权访问其所需的资源(S3读/写,SES等)。然后,您可以将此角色附加到EC2实例。

如果您使用的是AWS开发工具包,请使用以下方法:

services.AddDefaultAWSOptions(Configuration.GetAWSOptions());
services.AddAWSService<IAmazonS3>();

它会自动为您处理权限。

对于本地开发,您可能要使用凭据文件。在 appsettings.Local.json中,您将具有类似于以下的设置:
"AWS": {
"Profile": "myprofilename",
"Region": "eu-west-1",
"ProfilesLocation": "C:\\Credentials.txt"
}

您可能希望将凭据文件存储在项目外部,以免意外将其 checkin 源代码管理。

Credentials.txt如下所示:
[myprofilename]
aws_access_key_id=MY_ACCESS_KEY
aws_secret_access_key=MY_ACCESS_SECRET

设置环境

您可能希望服务器上的代码对于每个环境都是相同的-这使部署和其他任务变得更加容易。您可以通过使用参数存储来存储每个AWS环境的所有配置来实现此目的。

我要解决的方法是在EC2实例上使用“ 标记”来指定 环境名称。然后,我使用标记从参数存储中获取正确的配置。

在您的情况下,标记可以是 environment=developmentenvironment=production
存储中的参数名称/键应与要覆盖的JSON appsettings文件中的属性名称匹配。

它们看起来类似于:
/development/ConnectionStrings/Database/development/MySettingGroup/MySetting/production/ConnectionStrings/Database/production/MySettingGroup/MySetting

I've added some code to github that checks for the tag and parameters etc - if it's running locally it defaults to an environment name of "LocalDevelopment" (that's the convention I use - so you would need to change that to "Local") and loads the correct appsettings file.

https://github.com/secretorange/aws-aspnetcore-environment-startup

The files you would need to use in your project are here:

https://github.com/secretorange/aws-aspnetcore-environment-startup/tree/master/AWSBoot/Boot

Using the BootHelper your Startup code would look similar to this:

public static IWebHost BuildWebHost()
{
// ===================================
// Get the boot config from the server
// ===================================
var bootConfig = Task.Run(() => BootHelper.GetConfig()).Result;

var webHost = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.ConfigureAppConfiguration((context, config) =>
{
// !!! IMPORTANT !!!
// Set the environment from boot config
context.HostingEnvironment.EnvironmentName = bootConfig.Environment;

config.AddJsonFile("appsettings.json", optional: true)
.AddJsonFile($"appsettings.{context.HostingEnvironment.EnvironmentName}.json", optional: true);

// !!! IMPORTANT !!!
// If there are any parameters from the server
// then we'll use them to override anything in the JSON files
config.AddInMemoryCollection(bootConfig.Parameters);
})
.UseIISIntegration()
.UseStartup<Startup>()
.Build();

return webHost;
}

AWS中的IAM角色将需要附加策略以授予对标签和参数等的访问权限。它们的外观类似于:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"tag:GetResources",
"tag:GetTagValues",
"tag:GetTagKeys"
],
"Resource": "*"
}
]
}


{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "ssm:GetParametersByPath",
"Resource": [
"arn:aws:ssm:YOUR_ARN_HERE:parameter/development",
"arn:aws:ssm:YOUR_ARN_HERE:parameter/development/*"
]
}
]
}

设置起来似乎有些麻烦-但是一旦运行起来,就意味着您可以轻松地将所有 secret 控制在源代码控制之外,并且只需创建新的标记和参数即可创建新的环境(例如,登台) 。无需更改代码。

如果愿意,可以在 appsettings.Production.json中保留一些配置-这只是意味着如果要创建新的环境,则需要创建一个新的JSON文件并部署新的代码等。如果所有环境信息都比较干净在AWS(即参数存储)中。

关于.net - 如何使用.net Core设置AWS凭证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47917125/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com