Существует ли способ совместно использовать теги вместе с ресурсом, разделяемым через RAM, между аккаунтами?

Вопрос или проблема

TL;DR: Когда я из учетной записи A делюсь ресурсом AWS (например, подсеть VPC) с учетной записью B с помощью Resource Access Manager (RAM), учетная запись B может видеть ресурс, но у него нет тегов, хотя у ресурса есть теги, когда учетная запись A смотрит на него.


У меня есть проблема при работе с совместным использованием ресурсов и тегами между несколькими учетными записями (одна и та же организация).

У меня есть выделенная учетная запись сети AWS, которая создает VPC, подсети, группы безопасности, интернет и NAT шлюзы и т.д., чтобы другие учетные записи AWS могли развертывать/настраивать свои экземпляры EC2.

Ресурсы делятся с использованием Resource Access Manager (RAM) AWS.

Учетная запись сети разместила теги на ресурсах, таких как различные подсети.

Пример:

$ AWS_PROFILE=account_A \
    aws ec2 describe-subnets --subnet-ids subnet-0c251fd621263e58f \
    | jq '.Subnets[].Tags'
[
  {
    "Key": "Acme:Client",
    "Value": "ACME"
  },
  {
    "Key": "Acme:Project",
    "Value": "TagRamBugDemo"
  }
]

$ AWS_PROFILE=account_B \
    aws ec2 describe-subnets --subnet-ids subnet-0c251fd621263e58f \
    | jq '.Subnets[].Tags'
null

Согласно документации AWS по тегам, это “нормально”:

Когда вы добавляете теги к публичным или общим ресурсам, теги, которые вы назначаете, доступны только вашей учетной записи AWS; ни одна другая учетная запись AWS не будет иметь доступа к этим тегам. Для управления доступом к общим ресурсам на основе тегов каждая учетная запись AWS должна назначать свой собственный набор тегов для управления доступом к ресурсу.

Поскольку мне нужно читать теги из учетной записи B (например, теги показывают, что можно сделать с подсетями): есть ли способ обойти это ограничение, чтобы моя учетная запись B могла читать теги (копия подойти)?

Примечание:

  • Все учетные записи находятся в одной организации AWS.
  • Я использую Terraform v1.9.4 и провайдер hashicorp/aws v5.62.

Идеи:

  • Складывать теги из учетной записи A с помощью Terraform и хранить их в каком-нибудь ресурсе AWS (только для чтения S3?) и считывать их из учетной записи B через Terraform (как в этом ответе SO).
  • Складывать теги из учетной записи A с помощью вывода Terraform, записывать их в файл .tf, чтобы учетная запись B могла их прочитать и применить, когда выполняет свой terraform plan.
  • Складывать теги из учетной записи A с помощью API AWS (через awscli или другим способом) и применять их к общим ресурсам, используя учетные данные учетной записи B.

При совместном использовании ресурсов с помощью RAM теги на ресурсе не будут переданы вместе с общим ресурсом. Если вы используете имя из тегов имени на ресурсах, чтобы как-то ссылаться на него, то вам нужно снова добавить пару ключ-значение тега имени к общему ресурсу в учетных записях, где ресурс общается, или вы можете ссылаться на него с помощью ID или ARN.

Ответ или решение

Краткое содержание: Вопрос касается совместного использования ресурсов AWS (например, подсетей VPC) с помощью AWS Resource Access Manager (RAM). Происходит ситуация, когда ресурс, разделяемый между двумя аккаунтами, не передает теги от аккаунта, который его создал. Ответ на данную проблему включает в себя несколько потенциальных решений, позволяющих осуществить совместное использование тегов между аккаунтами.


При организации многоаккаунтного окружения в AWS, где один аккаунт (например, "сетевая" учетная запись) создает и управляет сетевой инфраструктурой для других учетных записей, возникает критическая проблема с доступом к тегам ресурсов. Как указано в официальной документации AWS, теги, прикрепленные к ресурсам, совместно используемым через AWS RAM, не доступны другим аккаунтам. В результате, при генерировании ресурсов, необходимо искать альтернативные решения для получения тегов.

Проблема и ее суть

Когда аккаунт "A" создает ресурс, например, подсеть VPC, и делится ею через RAM с аккаунтом "B", теги, присвоенные подсети, недоступны аккаунту "B". Это может вызвать затруднения при управлении сетевыми ресурсами, особенно если теги служат для обозначения статусов или предназначения ресурсов.

Возможные решения этой проблемы

Для того чтобы аккаунт "B" имел доступ к тегам, можно рассмотреть следующее:

  1. Использование S3 для хранения тегов:
    Аккаунт "A" может периодически извлекать теги для всех своих ресурсов и сохранять их в формате JSON в S3. Аккаунт "B" может затем использовать этот файл для чтения тегов. Пример возможной реализации:

    • С помощью CLI AWS или Terraform аккаунт "A" экспортирует теги в объект S3.
    • Аккаунт "B" извлекает этот объект и считывает нужные теги для использования.
  2. Создание Terraform output:
    Аккаунт "A" может настроить Terraform, чтобы выводить теги ресурсов как выходные данные. Затем эти данные могут быть записаны в файл, который будет доступен для аккаунта "B", чтобы использовать их во время выполнения команд Terraform:

    • Создание .tf файла с тегами, который будет считываться из аккаунта "B".
  3. Использование AWS API для извлечения тегов:
    Аккаунт "A" может создать автоматизированную процедуру, которая будет использовать API AWS (например, через AWS CLI) для извлечения тегов и затем применить эти теги к соответствующим ресурсам в аккаунте "B", используя учетные данные аккаунта "B".

Рекомендации по управлению тегами

  • Регулярное обновление и согласование тегов между аккаунтами поможет избежать несоответствий и максимизировать эффективность управления ресурсами.
  • Рассмотрение использования Lambda-функций для автоматизации процесса извлечения и обновления тегов также может быть полезным.

Заключение

Хотя AWS не поддерживает совместное использование тегов при использовании RAM, данные подходы могут помочь эффективно управлять тегами между разными аккаунтами в одной организации. Республикация и регистрация тегов через S3 или Terraform обеспечит доступность информации о ресурсах, что важно для правильного управления многими аккаунтами в облачной инфраструктуре.

Оцените материал
Добавить комментарий

Капча загружается...