通过 gcloud 命令为授权网络提供友好名称

通过 gcloud 命令为授权网络提供友好名称

我正在通过 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

相关内容