托管在 EC2 实例上时在账户之间切换

Switch between Accounts when hosted on EC2 Instance

我们目前使用 2 个 AWS 账户。对于大多数内容,我们希望使用我们的 Web 应用程序托管在 EC2 实例中的 AWS 帐户,这样就可以正常工作:

services.AddDefaultAWSOptions(this.Configuration.GetAWSOptions());
services.AddAWSService<IAmazonSQS>();
services.AddAWSService<IAmazonSimpleSystemsManagement>();

但是,我想访问另一个 AWS 账户中的 EC2 实例。我已将其配置为使用凭据在本地工作并遵循本指南(其中提到使用多项服务):https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-config-netcore.html

services.AddDefaultAWSOptions(this.Configuration.GetAWSOptions());
services.AddAWSService<IAmazonSQS>();
services.AddAWSService<IAmazonSimpleSystemsManagement>();

if (this.WebHostEnvironment.IsDevelopment())
{
   // This works fine locally, but I don't want to use credential file in production
    var other = this.Configuration.GetAWSOptions("other");
    services.AddAWSService<IAmazonEC2>(other);
}
else
{
    // How do I register other here without putting a credential file on my ec2 instance?
    services.AddAWSService<IAmazonEC2>();
}

我不确定如何注册 IAmazonEC2 以使用我的 other 帐户。我不想在我的实例上放置一个凭据文件,这是我在本地工作的方式,但它在生产服务器上对我来说似乎不合适。

我已经配置了一个 IAM 角色,可以访问我的 other 帐户并将其授予我的 EC2 实例。但是,如何将该 IAM 角色转换为一个配置文件,以便在上面 IAmazonEC2 注册的地方使用?

感谢任何帮助。谢谢

实际上有两种方法...

选项 1:使用 IAM 角色

假设Amazon EC2 实例在Account-A 中运行,它现在想查询有关Account-B 的信息。你可以:

  • 在账户 B 中创建 IAM 角色,并使用信任账户 A 中 EC2 实例使用的 IAM 角色的信任策略
  • 您在 Account-A 中的 EC2 实例上的代码 运行 可以调用 AssumeRole()(使用来自 Account-A 的普通凭据)。这将 return 一组临时凭据。
  • 使用这些临时凭据对帐户 BAPI 调用

选项 2:使用帐户 B 的凭据

或者,为您的程序提供一组来自帐户 B 的 IAM 用户凭据。这些可以存储在 AWS Systems Manager Parameter Store - AWS Systems Manager or AWS Secrets Manager 中,并使用分配给帐户 A 中的 EC2 实例的普通凭据进行检索。