我正在通过 gcloud 命令授权实例访问 PostgreSQL:
gcloud sql instances patch blah-sql-dev --authorized-networks 10.1.1.2/32,10.1.1.3/32,.....
我在 Cloud SQL 的授权网络下看到的只是 IP 地址,而不是真正告诉我该 IP 地址用途的友好名称。
使用 Gcloud 将 IP 地址列入白名单时,有没有办法包含一个友好名称?
当我执行上述命令时,我看到以下消息:
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 命令完成呢?
答案1
我想做同样的事情,但我没有找到使用 gcloud 命令的方法。你可以使用api。我最终编写了一个 nodejs 脚本,因为它更容易处理 json。我的用例是继续将 hq ip 列入白名单,该 ip 在我们的多个 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)
}
})()
答案2
您是否要为 Cloud SQL 的授权网络分配一个友好名称?
如果是这种情况,您可以使用 Cloud Console 为每个授权网络分配一个可选名称:转到您的产品和服务菜单 > Cloud SQL > [选择您的实例] > 连接 > 授权网络。
使用 Update API [1] 可能是另一种选择,因为其父 authorizedNetworks 属性有一个名为“name”的属性。不过,您必须记住,这是在 Update API 中指定的,而不是在 Patch API 中指定的。
请查看 [1] 中所述的注意事项:这不是部分更新,因此您必须包含要保留的所有设置的值。对于部分更新,请使用 patch。
链接:
[1]https://cloud.google.com/sql/docs/postgres/admin-api/v1beta4/instances/update#request-body