Как я могу найти правильное входящее правило для моего действия Github для развертывания на моем сервере AWS EC2?

#github #amazon-ec2 #deployment #tcp #github-actions

#github #amazon-ec2 #развертывание #tcp #github-действия

Вопрос:

Я только что создал действие в своем проекте и настроил все там, но, к сожалению, я получаю сообщение, подобное этому, в разделе «развернуть файл»> ssh: подключиться к хосту ec2-MYIP.us-east-2.compute.amazonaws.com порт 22: время ожидания операции истекло

Ошибка из-за безопасности EC2

Хорошо, что я знаю, что происходит. Я должен разрешить в качестве входящего правила следующее:

Тип: SSH / Протокол: TCP / Диапазон сообщений: 22 / Источник: ::/0;

Входящие правила EC2, чтобы заставить его работать

Как вы можете видеть здесь, оно отлично работает без ограничения исходного IP-адреса > Когда я не указываю какой-либо источник для TCP-порта 22

Но, очевидно, я не хочу этого делать по соображениям безопасности, поэтому мне нужно найти источник, который мне нужно туда поместить. Я уже перепробовал множество IP-адресов Github, но все они были безуспешными.

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

Действие, которое я использую >https://github.com/wlixcc/SFTP-Deploy-Action

Комментарии:

1. Осмелюсь спросить, должен ли IP-адрес не быть вашим локальным компьютером или откуда бы вы ни выполняли команду?

2. Хороший вопрос @GregoryNikitas, но я уже пробовал это, и это не сработало. У вас есть какие-либо другие идеи?

Ответ №1:

IP-адреса участников, размещенных на GitHub, задокументированы здесь: https://docs.github.com/en/free-pro-team@latest/actions/reference/specifications-for-github-hosted-runners#ip-addresses

Windows и Ubuntu runners размещены в Azure и имеют те же диапазоны IP-адресов, что и центры обработки данных Azure.
[…]
Корпорация Майкрософт еженедельно обновляет диапазоны IP-адресов Azure в файле JSON, который вы можете загрузить с веб-сайта Azure IP Ranges and Service Tags — Общедоступное облако. Вы можете использовать этот диапазон IP-адресов, если вам требуется список разрешений для предотвращения несанкционированного доступа к вашим внутренним ресурсам.

Ответ №2:

Улучшенный ответ по сравнению с riQQ: динамически извлекайте IP-адрес участника действия Github во время рабочего процесса с помощью действия public-ip и обновляйте правила входа в группу безопасности вашего сервера EC2 до и после выполнения шагов SSH.

Ваш экземпляр EC2 никогда не будет доступен для общедоступных IP-адресов на вашем SSH-порту.

Примечание: Вам также нужно будет установить учетные данные AWS на вашем runner с разрешениями для обновления соответствующей группы безопасности EC2.

Ваш рабочий процесс должен выглядеть примерно так:

   deploy:
    name: deploy
    runs-on: ubuntu-latest
    env:
      AWS_INSTANCE_SG_ID: <your-ec2-security-group-id>
    steps:
      - name: configure aws credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: <your-ci-aws-access-key>
          aws-secret-access-key: <your-ci-aws-secret-key>
          aws-region: <your-ec2-aws-region>
      - name: get runner ip address
        id: ip
        uses: haythem/public-ip@v1.2
      - name: whitelist runner ip address
        run: |
          aws ec2 authorize-security-group-ingress 
            --group-id $AWS_INSTANCE_SG_ID 
            --protocol tcp 
            --port 22 
            --cidr ${{ steps.ip.outputs.ipv4 }}/32
      - name: ssh into your ec2 and do whatever
        run: |
          ...do whatever you need to do...
      - name: revoke runner ip address
        run: |
          aws ec2 revoke-security-group-ingress 
            --group-id $AWS_INSTANCE_SG_ID 
            --protocol tcp 
            --port 22 
            --cidr ${{ steps.ip.outputs.ipv4 }}/32
  

Комментарии:

1. Это правильный ответ. Сработало как по волшебству. Нет необходимости открывать большой диапазон IP-адресов в вашем ACL. Спасибо за это.