#github #amazon-ec2 #deployment #tcp #github-actions
#github #amazon-ec2 #развертывание #tcp #github-действия
Вопрос:
Я только что создал действие в своем проекте и настроил все там, но, к сожалению, я получаю сообщение, подобное этому, в разделе «развернуть файл»> ssh: подключиться к хосту ec2-MYIP.us-east-2.compute.amazonaws.com порт 22: время ожидания операции истекло
Хорошо, что я знаю, что происходит. Я должен разрешить в качестве входящего правила следующее:
Тип: SSH / Протокол: TCP / Диапазон сообщений: 22 / Источник: ::/0;
Как вы можете видеть здесь, оно отлично работает без ограничения исходного IP-адреса >
Но, очевидно, я не хочу этого делать по соображениям безопасности, поэтому мне нужно найти источник, который мне нужно туда поместить. Я уже перепробовал множество 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. Спасибо за это.