Определите и обновите определенный IP-адрес во всех межсетевых экранах проектов GCP - PullRequest
1 голос
/ 05 ноября 2019

Есть ли способ (использующий, например, серию команд gcloud api на облачной оболочке), для поиска во всех доступных проектах GCP, к которым у меня есть доступ, в VPC, а также во всех сетях и правилах брандмауэра, для них конкретный IP, и обновить только , что IP-адрес, не влияя на остальные?

Контекст:
В течение многих лет я включил в GCP статический IP-адрес в нескольких проектах, несколько правил брандмауэра (сотни), и мы собираемся изменить провайдера (так что изменится статический IP-адрес). Я не хочу выслеживать вручную или рисковать, пропуская некоторые из них (подверженные ошибкам), я бы хотел массово обновить этот IP-адрес, чтобы все делалось в один прием.

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

Возможно ли это?

Спасибо!

ОБНОВЛЕНИЕ:
Я написал этот простой скрипт, который определяет IP-адреса, по крайней мере, которые я хочу изменить, надеюсь, кому-то пригодится!

for i in `gcloud projects list| grep -v PROJECT_ID|awk {'print $1'}`
do 
echo $i && gcloud compute firewall-rules list --project $i --format="table(name, network, direction, priority, sourceRanges.list():label=SRC_RANGES, destinationRanges.list():label=DEST_RANGES, allowed[].map().firewall_rule().list():label=ALLOW,denied[].map().firewall_rule().list():label=DENY,sourceTags.list():label=SRC_TAGS,sourceServiceAccounts.list():label=SRC_SVC_ACCT,targetTags.list():label=TARGET_TAGS,targetServiceAccounts.list():label=TARGET_SVC_ACCT)"
done

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

Ответы [ 2 ]

3 голосов
/ 05 ноября 2019

Это один из подходов, позволяющий найти все правила брандмауэра с заданным IP-адресом диапазона источников во многих проектах:

  1. Включить API Compute Engine во всех соответствующих проектах

  2. Список проектов

gcloud projects list
Для каждого проекта
gcloud compute firewall-rules list 
  --project <PROJECT_ID>
  --filter="DISABLED=False AND DIRECTION=INGRESS"
Для каждого правила брандмауэра
gcloud compute firewall-rules describe <NAME> 
  --format="value(sourceRanges)"
Если выходные данные на шаге 4 соответствуют вашему IP-адресу, сохраните имя правила, а затем обновите диапазон источника, используя
gcloud compute firewall-rules update <NAME> 
  --source-ranges=<NEW_IP>

Некоторые предупреждения:

  • Это общий обзор всех этапов, но вы, вероятно, захотите автоматизировать этот процесс.
  • В сложной среде может потребоваться много вызовов API. Убедитесь, что вы не исчерпали свои проектные квоты на случай, если другие службы полагаются на эти вызовы API для выполнения своих функций.
1 голос
/ 05 ноября 2019

Это можно сделать с помощью комбинации программирования оболочки и интерфейса командной строки SDK.

Однако было бы гораздо проще написать программу на Python с использованием Google Cloud SDK. Это зависит только от того, для какой среды вы лучше разрабатываете (оболочка или программирование на Python). CLI не имеет простой команды для этого.

Примечание: это можно сделать на любом языке, Python - просто пример, на котором легко писать простые программы.

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

gcloud compute firewall-rules list --project PROJECT_ID

Затем для каждого вывода правила брандмауэра из предыдущей команды отобразятся правила:

gcloud compute firewall-rules describe NAME --project PROJECT_ID

Используя вашу любимую программу текстового поиска (grep), найдите текущий IP-адрес.

Завершите, обновив правила для нового IP-адреса:

gcloud compute firewall-rules update NAME <replace with command options>

Приведенные выше команды являются основными, используяCLI. Вам нужно будет структурировать это в программу или скрипт оболочки.

Учитывая, что это одноразовая задача, я бы просто использовал приведенные выше команды для вывода списка всех правил брандмауэра, а затем сгенерировал выходные данные, чтобы найти правилачто должно быть обновлено. Обновите вручную правила в консоли Google Cloud из этого списка.

...