Хаос-инженерия с LitmusChaos на AWS — внедрение кросс-аккаунта

В нашей прошлой статье мы узнали о LitmusChaos, о том, как начать с простого эксперимента, о роли IAM для учетной записи службы и многом другом. В этой статье мы рассмотрим, как можно запускать хаос-эксперименты с помощью LitmusChaos на AWS, если у вас есть два разных аккаунта AWS. Давайте начнем.

Развертывание в производство происходит в быстром темпе в тщательно выстроенном потоке ценности. В основном, мы (инженеры по производительности) работаем в непроизводственной среде. Хотя мы проводим эксперименты в производстве, нижние среды, такие как dev, QA, и среды производительности могут быть вашей игровой площадкой для экспериментов с хаосом. Часто большинство организаций имеют более одной учетной записи, чтобы изолировать инженерные подразделения, среды и многое другое, чтобы не наступать друг другу на пятки.

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

Рассмотрим простое приложение, размещенное на экземпляре EC2 в аккаунте AWS marketing-team. LitmusChaos на AWS EKS работает на учетной записи AWS performance-team. В этом случае нам необходимо включить кросс-доступ к учетной записи AWS.

Необходимые условия

Ниже перечислены необходимые условия для реализации этой настройки:

  1. Две учетные записи AWS с привилегиями IAM
  2. LitmusChaos на учетной записи AWS A
  3. Образец приложения на AWS-аккаунте B
  4. eksctl
  5. kubectl

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

Кроме того, убедитесь, что у вас есть действительные привилегии для работы с IAM, политиками, доверительными отношениями и т.д.

Давайте назовем наши учетные записи AWS для лучшего понимания. Вы — инженер хаоса, предоставляющий услугу Chaos-as-a-Service. Вы запускаете LitmusChaos на своей учетной записи AWS под названием Chaos-Account.

Клиент обратился к вам с просьбой провести эксперименты с хаосом в его приложении. Назовем их учетную запись AWS Customer-Account.

На хаос-аккаунте

На Chaos-аккаунте убедитесь, что LitmusChaos успешно запущен и может проводить эксперименты либо с помощью Self-Agent, либо с помощью внешнего агента.

Создайте новую IAM-роль, используя приведенные ниже политику и доверительные отношения.

Перед созданием IAM-роли убедитесь, что у вас есть действительный URL-адрес провайдера OIDC.

Для проверки OIDC URL введите следующую команду.

aws iam list-open-id-connect-providers

Приведенная выше команда должна вернуть запись OIDC, например, oidc.eks.us-east-2.amazonaws.com/id/F25CB34E2ACAA3CE669BA4E0XXXXXXXX».

Если нет, создайте OIDC с помощью приведенной ниже команды. В данном случае имя нашего кластера будет chaos-cluster.

eksctl utils associate-iam-oidc-provider --cluster chaos-account --approve

Создайте политику Chaos-Account-Policy, используя приведенный ниже JSON. Пожалуйста, следуйте концепции Zero Trust при создании политики и доверительных отношений. Я просто игрив, так как это мой демо-счет.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "ec2:*",
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "sts:*",
            "Resource": [
                "*"
            ]
        }
    ]
}

Создайте новую IAM роль под названием Chaos-Account-Role и прикрепите к ней вышеуказанную политику и добавьте нижеуказанные доверительные отношения. Убедитесь, что вы заменили OIDC ID, ID аккаунта, регион и т.д.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "arn:aws:iam::<account_id>:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/F25CB34E2ACAA3CE669BA4EXXXXXXX"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringEquals": {
                    "oidc.eks.us-east-1.amazonaws.com/id/F25CB34E2ACAA3CE669BA4EXXXXXXX:aud": "sts.amazonaws.com"
                }
            }
        }
    ]
}

На Customer-Account.

Войдите в свой Customer-Account или попросите его создать новую политику под названием Customer-Account-Policy, используя приведенный ниже JSON. И снова, пожалуйста, следуйте политике Zero Trust.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ec2:*",
                "sts:*"
            ],
            "Resource": "*"
        }
    ]
}

Прежде чем создавать новую роль, давайте создадим Identity provider для этой учетной записи. Перейдите в IAM, в разделе Управление доступом нажмите Провайдеры идентификации.

Затем нажмите кнопку Добавить провайдера.

Выберите OpenID Connect

В текстовом поле Provider URL введите URL провайдера идентификации Chaos-Account, а затем нажмите кнопку Get thumbprint.

В текстовом поле Audience введите sts.amazonaws.com.

Нажмите на кнопку Добавить провайдера.

Создайте новую роль, выбрав Web identity, как показано ниже, и выберите поставщика идентификации и аудиторию [т.е. Chaos-Account], а затем нажмите кнопку Next

На следующей странице выберите Customer-Account-Policy, затем создайте роль Customer-Account-Role.

Скопируйте ARN Customer-Account-Role в буфер обмена, так как он нужен нам для аннотации в учетной записи сервиса LitmusChaos.

Аннотация

Используйте приведенную ниже команду для аннотирования учетной записи сервиса LitmusChaos в пространстве имен по умолчанию litmus.

kubectl annotate serviceaccount -n litmus litmus-admin eks.amazonaws.com/role-arn=arn:aws:iam::<customer-account-id>:role/Customer-Account-Role --overwrite

Чтобы подтвердить аннотацию, используйте приведенную ниже команду:

kubectl describe sa -n litmus litmus-admin

Эксперимент с хаосом

Теперь пришло время создать хаос-эксперимент для остановки экземпляра EC2 в Customer-Account.

Скопируйте ID экземпляра и регион, который нам нужно подать в YAML эксперимента.

Создайте эксперимент ec2-terminate-by-id и настройте ID экземпляра и регион. Убедитесь, что вы удалили секреты из YAML и запланируйте его.

Если все в порядке, он должен остановить и запустить экземпляр EC2 в вашей учетной записи клиента.

Заключение

Как вы узнали, внедрение кросс-аккаунтов является простым и понятным. Она выглядит сложной, но как только вы поймете концепцию OIDC, как работают роли, политики и доверительные отношения, ее можно быстро реализовать. Приведенные выше шаги можно автоматизировать, используя AWS CLI и eksctl.

Оцените статью
Procodings.ru
Добавить комментарий