两个配置文件共享相同的配置

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

我在~/.aws/config具有以下配置文件:

[profile foo]
role_arn = arn:aws:iam::##########:role/SomeRole
source_profile = other_profile
region = us-west-2

出于不相关的原因,我想创建一个新的配置文件(名称不同),但与foo共享相同的配置。

由于我不喜欢复制内容,因此我想知道是否有两种配置文件可以使用相同的配置?

我尝试了以下方法:

[profile bar]
[profile foo]
role_arn = arn:aws:iam::##########:role/SomeRole
source_profile = other_profile
region = us-west-2

而且它没有用。 CLI认为bar是空的配置文件。

我也尝试过:

[profile foo bar]
role_arn = arn:aws:iam::##########:role/SomeRole
source_profile = other_profile
region = us-west-2

而且也没有用。 CLI无法找到bar配置文件。


有没有办法做到这一点?

amazon-web-services aws-sdk aws-cli
3个回答
0
投票

它无关紧要,因此无法在同一配置文件中实现。 没有理由要使用“完全相同”的配置创建两个配置文件。 您宁愿使用相同的配置文件。 如果您遇到环境问题,并且想要创建其他配置文件,请复制配置。 显然,即使在这种情况下,至少角色也会有所不同。


0
投票

我认为不可能实现这一目标。

让我解释一下为什么我认为不可能:

  • 所有官方AWS开发工具包都必须支持您建议的语法,因为它们都解析了其他凭证提供程序中的aws凭证文件。 有关现有凭据提供程序的概述,请参见[1]。 解析~/.aws/config文件的凭据提供程序称为ini provider

  • 让我们看一下node.js的ini提供程序实现(因为它是我过去通常使用的实现):

    • 它将信息解析为一个名为SharedIniFileCredentials的数据结构。 [2]
    • 它使用parseFile方法执行此操作。 [3]
    • 解析被委派给实用程序“类” AWS.util.ini ,它类似于以下[4]:
parse: function string(ini) {
      var currentSection, map = {};
      util.arrayEach(ini.split(/\r?\n/), function(line) {
        line = line.split(/(^|\s)[;#]/)[0]; // remove comments
        var section = line.match(/^\s*\[([^\[\]]+)\]\s*$/);
        if (section) {
          currentSection = section[1];
        } else if (currentSection) {
          var item = line.match(/^\s*(.+?)\s*=\s*(.+?)\s*$/);
          if (item) {
            map[currentSection] = map[currentSection] || {};
            map[currentSection][item[1]] = item[2];
          }
        }
      });

      return map;
}

如您所见,解析器逐行扫描文件的内容,并在其中的/^\\s*\\[([^\\[\\]]+)\\]\\s*$/线出现。 没有其他逻辑可将多条线映射到两个(或更多)不同的部分。 如果要使多个部分具有相同的内容,则必须为每个配置文件名称重复配置。

我希望我的分析令人信服,通过语法手段,此功能实际上是不可能的。 如果您问我,也无法将其作为功能请求提出,因为AWS必须调整所有现有的SDK,这将需要大量的精力。

参考文献

[1] https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials_provider.html
[2] https://github.com/aws/aws-sdk-js/blob/d78f62f9d86066e67d3cb7302fe2656210732f07/lib/credentials/shared_ini_file_credentials.js
[3] https://github.com/aws/aws-sdk-js/blob/cb1604ca89a077ffdb86127884292d3b18c8b4df/lib/shared-ini/ini-loader.js#L5
[4] https://github.com/aws/aws-sdk-js/blob/cb1604ca89a077ffdb86127884292d3b18c8b4df/lib/util.js#L192


-1
投票

我检查了多个排列,似乎AWS CLI无法处理该用例。 此外,AWS 文档中对此的含糊不清的提及是每个命名的配置文件使用不同的凭证。

您目前最好的选择似乎是通过程序处理此问题。

© www.soinside.com 2019 - 2024. All rights reserved.