Два профиля с одинаковой конфигурацией - PullRequest
1 голос
/ 24 июня 2019

У меня есть следующий профиль в ~/.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.


Есть ли способ добиться этого?

Ответы [ 3 ]

0 голосов
/ 02 июля 2019

Я проверил это с несколькими перестановками, и не похоже, что AWS CLI сможет справиться с этим вариантом использования.Кроме того, в документации AWS есть очень смутное упоминание о том, что каждый именованный профиль использует разные учетные данные.

Похоже, что сейчас ваша лучшая ставка обрабатывает это программно.

0 голосов
/ 05 июля 2019

Я не думаю, что возможно достичь этого.

Позвольте мне объяснить, почему я думаю, что это невозможно:

  • Синтаксис, который вы предложили, должен поддерживаться всеми официальными пакетами SDK AWS, поскольку все они анализируют файлы учетных данных среди других поставщиков учетных данных. Для обзора существующих поставщиков учетных данных см. [1]. Поставщик учетных данных, который анализирует файл ~/.aws/config, называется Ини-провайдер .

  • Давайте рассмотрим реализацию ini для node.js (поскольку я обычно использовал ее в прошлом):

    • Он анализирует информацию в структуре данных, которая называется SharedIniFileCredentials . [2] * * тысяча двадцать-один
    • Для этого используется метод parseFile . [3]
    • Разбор делегирован утилите "class" 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

0 голосов
/ 28 июня 2019

Это незначительно и, следовательно, не достижимо в том же файле профиля. Нет причин создавать два профиля с «точно» одинаковой конфигурацией. Вы бы предпочли использовать тот же профиль. Если у вас есть проблемы со средой, и вы хотите создать разные профили, скопируйте конфигурацию. Очевидно, что по крайней мере роли будут отличаться даже в этом случае.

...