Я разрешаю экземплярам доступ к 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