Назад | Перейти на главную страницу

Назначение понятных имен авторизованным сетям с помощью команды gcloud

Я разрешаю экземплярам доступ к PostgreSQL с помощью команды gcloud:

gcloud sql instances patch blah-sql-dev --authorized-networks 10.1.1.2/32,10.1.1.3/32,.....

В разделе «Авторизованные сети» Cloud SQL я вижу только IP-адреса, а не понятное имя, которое фактически говорит мне, для чего нужен IP-адрес.

Есть ли способ добавить понятное имя при добавлении IP-адресов в белый список с помощью Gcloud?

Когда я выполняю указанную выше команду, я вижу следующее сообщение:

The following message will be used for the patch API method.
{"project": "my-project", "name": "blah-sql-dev", "settings": {"ipConfiguration": {"authorizedNetworks": [{"value": "10.1.1.2/32"}, {"value": "10.1.1.3/32"}, ......]}}}

Таким образом, похоже, должен быть какой-то способ передать понятное имя через "value" поле, но как это сделать с помощью команды gcloud?

Я хотел сделать то же самое, но не нашел способа сделать это с помощью команды gcloud. Вы можете сделать это с помощью api. Я закончил тем, что написал скрипт nodejs, потому что с json легче работать. Мой вариант использования - продолжать вносить в белый список IP-адрес hq, который меняется каждый день в наших нескольких проектах gcloud.

const got = require('got')

const token = process.env.ACCESS_TOKEN
const headers = { Authorization: `Bearer ${token}`}


if (!token) {
  console.error(`Missing env $ACCESS_TOKEN value is ${token}`)
  return (1)
}

const projects = [
  {id: 'pandascore-id', instance: 'panda-env'},
  // other projects
]

;(async() => {
  try {
    const url = `https://www.googleapis.com/sql/v1beta4/projects/${projects[0].id}/instances/${projects[0].instance}`

    let response1 = await got('https://ipinfo.io', { json: true})
    const hqIp = response1.body.ip

    let response2 = await got(url + '?fields=settings', {
      headers,
      json: true
    })
    const currentIps = response2.body.settings.ipConfiguration.authorizedNetworks
    //console.log(currentIps)

    if (!currentIps.some(ip => ip.value === hqIp)) {
      // hq ip change
      const newIps = [
        ...currentIps.filter(a => a.value !== 'HQ'),
        {kind: 'sql#aclEntry', value: hqIp, name: 'HQ'}
      ]

      let response3 = await got.patch(url, {
        headers,
        json: true,
        body: {
          settings: {ipConfiguration: {
            authorizedNetworks: newIps
          }}}
      })
      console.log(response3.body)
    } else {
      console.log('hq ip is already whitelisted')
    }
  } catch (err) {
    console.log(err)
  }
})()

Вы хотите назначить понятное имя своим авторизованным сетям для Cloud SQL?

В этом случае вы можете назначить необязательное имя для каждой авторизованной сети с помощью Cloud Console: перейдите в меню «Продукты и услуги»> Cloud SQL> [выберите свой экземпляр]> Подключения> Авторизованные сети.

Другим вариантом может быть использование API обновлений [1], поскольку для его родительского свойства authorizedNetworks существует свойство с именем «name». Тем не менее, вы должны иметь в виду, что это указывается в API обновления, а не в API исправлений.

Обратите внимание на предупреждение [1]: это не частичное обновление, поэтому вы должны включить значения для всех настроек, которые вы хотите сохранить. Для частичных обновлений используйте патч.

Ссылки:


[1] https://cloud.google.com/sql/docs/postgres/admin-api/v1beta4/instances/update#request-body