Доступ к CodeArtifact изнутри экземпляра EC2

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

Доступ к CodeArtifact изнутри экземпляра EC2

Я экспериментирую с AWS Services для создания своего проекта, бэкенд на Java с использованием Docker для контейнеров и Maven для зависимостей, и Angular 16 для фронтенда. В данный момент у меня есть VPC с 6 подсетями, две из которых публичные. У меня есть экземпляр RDS с публичным доступом, а также экземпляр EC2 на бесплатном тарифе, который подключен к этому экземпляру RDS, но я еще не тестировал это соединение, так что не уверен, работает ли оно. Я пытаюсь построить свой проект внутри EC2, выполняя команду Docker Compose Up с несколькими сервисами Java Maven, два из которых имеют зависимость от моего репозитория CodeArtifact, но он не может получить доступ к этой зависимости, даже несмотря на то, что файл settings.xml настроен правильно. Команда для получения токена CodeArtifact завершается таймаутом, когда я пытаюсь запустить её внутри EC2, хотя на моем локальном компьютере она работает нормально. Мои группы безопасности, которые использует этот EC2, имеют разрешение на исходящий трафик для всех протоколов на “0.0.0.0/0” и “::/0”, а политики CodeArtifact разрешают все для моего корневого пользователя и моего пользователям разработчика, которого я сейчас использую. Я что-то делаю неправильно? Я видел здесь, что это возможно, но, возможно, уже нет? Публичные подсети имеют одинаковую конфигурацию ACL, я пытался добавить еще одно правило для разрешения исходящего и входящего трафика, но это не сработало!
Правила входящего и выходящего трафика

Я также добавляю правила входящего и выходящего трафика здесь, чтобы убедиться, что не забыл какую-то конфигурацию
Правила входящего и выходящего трафика

Я пытался создать роль IAM, но это тоже не сработало! Я создал новый экземпляр и пробовал как с ролью IAM, так и без, даже после того как прикрепил роль IAM, у меня все равно возникает таймаут! Мне удалось сделать скриншот с обоими состояниями до и после того, как я прикрепил роль IAM

вставьте описание изображения здесь

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

Чтобы получить доступ к Amazon CodeArtifact из экземпляра EC2, необходимо убедиться, что правильно настроены как сетевые параметры, так и права доступа. Давайте рассмотрим шаги, которые вам необходимо выполнить, чтобы устранить проблему с таймаутом при попытке получить токен доступа.

1. Проверка настроек безопасности VPC

Сетевые ACL и маршруты

Убедитесь, что сетевые ACL на вашем VPC позволяют входящий и исходящий трафик на соответствующих портах. Вам нужно будет убедиться, что правила ACL разрешают доступ к CodeArtifact. Стандартный выходной порт для HTTPS (443) должен быть открыт.

  • Правила входящего трафика:

    • Если у вас есть правила, принимающие трафик, убедитесь, что разрешены все необходимые протоколы.
  • Правила исходящего трафика:
    • Должны быть настроены разрешения для всех исходящих соединений.

Группы безопасности

Убедитесь, что у экземпляра EC2 правильно настроены группы безопасности:

  • Исходящие правила должны разрешать трафик на 0.0.0.0/0 по протоколу TCP на порту 443.

2. IAM Роли и Политики

Вы уже упомянули, что пробовали использовать IAM роль. Убедитесь, что роль, прикрепленная к вашему экземпляру EC2, имеет необходимые разрешения для доступа к CodeArtifact:

  1. Создайте IAM роль с соответствующей политикой:

    {
       "Version": "2012-10-17",
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "codeartifact:GetAuthorizationToken",
                   "codeartifact:ReadFromRepository",
                   "codeartifact:GetRepositoryEndpoint"
               ],
               "Resource": "*"
           }
       ]
    }
  2. Прикрепите роль к вашему экземпляру EC2.

3. Настройки Maven

Проверьте файл settings.xml для Maven. Убедитесь, что настройки репозитория соответствуют вашему CodeArtifact.

Пример настройки:

<servers>
  <server>
    <id>your-codeartifact-repo-id</id>
    <username>aws</username>
    <password>${env.CODEARTIFACT_AUTH_TOKEN}</password>
  </server>
</servers>

<profiles>
  <profile>
    <id>codeartifact</id>
    <repositories>
      <repository>
        <id>your-codeartifact-repo-id</id>
        <url>https://your-domain-123456.d.codeartifact.region.amazonaws.com/maven/your-repo-group/</url>
      </repository>
    </repositories>
  </profile>
</profiles>

<activeProfiles>
  <activeProfile>codeartifact</activeProfile>
</activeProfiles>

4. Получение токена CodeArtifact

Попробуйте получить токен доступа к CodeArtifact с использованием AWS CLI. Убедитесь, что AWS CLI установлен и правильная версия настроена:

aws codeartifact get-authorization-token --domain your-domain --domain-owner your-account-id

Убедитесь, что переменная окружения CODEARTIFACT_AUTH_TOKEN установлена перед запуском mvn:

export CODEARTIFACT_AUTH_TOKEN=$(aws codeartifact get-authorization-token --domain your-domain --domain-owner your-account-id --query authorizationToken --output text)

5. Тестирование соединения

Попробуйте выполнить команду curl для проверки соединения с CodeArtifact:

curl -v https://your-domain-123456.d.codeartifact.region.amazonaws.com/maven/your-repo-group/

Если вы видите таймаут, это может указывать на сетевую проблему.

Заключение

Если после выполнения всех вышеуказанных шагов проблема не решена, рекомендуется проверить логи EC2 и настройки сети. Иногда проблемы могут возникать из-за временных сбоев на уровне AWS. Не забудьте также рассмотреть возможность обращения в службу поддержки AWS для получения дополнительной помощи.

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

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