如何将 IP 地址添加到云 sql 访问列表提供对 Google 云 SQL 的访问?

how to add ip address to cloud sql acsess list provide access on Google Cloud SQL?

我试过了

gcloud sql instances patch YOUR_INSTANCE_NAME --authorized-networks my-ip

但是此命令会从访问控制列表中删除所有 IP 地址并仅添加我的 IP 地址。如何添加我的 IP 地址并同时保留以前的 IP 地址?

您可以通过控制台 Web 界面添加 IP 地址

console.developers.google.com

转到存储 -> 云 SQL-> 选择您的实例 -> 访问控制 -> 单击 "Add Item" 显示允许的网络

正如 James 所提到的,使用 Developers Console 可以轻松完成。使用命令行是可行的,尽管有点棘手。搜索 'Cloud SDK' 发现似乎无法简单地检索授权网络。

但是您可以使用 describe 命令,它将 return Cloud SQL 实例的所有设置。从这里开始,可以使用一些相当脆弱的命令系列来获得您要查找的内容。这里是:

首先,获取完整的 Cloud SQL 实例描述:

gcloud sql instances describe <instance-name>

其次,通过 grep 管道结果以检索显示在 - 之后的授权网络的 IP 地址。如果您愿意,可以在别处找到其他 IP 地址正则表达式。

| grep -E "\-\s[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"

第三,通过 cut 管道结果以在 - 上拆分每一行并保留后半部分。

| cut -d '-' -f 2

第四,管道结果再次通过 cut 以在空 space 上拆分每行以删除第一个空白 space

| cut -d ' ' -f 2

然后,通过 tr 管道结果以用逗号

替换新行
| tr '\n' ','

最后,将结果通过管道 head 删除尾随逗号

| head -c -1

你得到的命令应该是这样的:

gcloud sql instances describe <instance-name> | grep -E "\-\s[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" | cut -d '-' -f 2 | cut -d ' ' -f 2 | tr '\n' ',' | head -c -1

这是一个非常脆弱的解决方法。此外,它公开了证书密钥,并且上面的特定正则表达式不匹配 IPv6 地址或使用 CDR 表示法匹配子网。这个简单的操作绝对值得一个功能请求。我强烈建议在 Google App Engine public issue tracker.

上提交一份

完整流程(使用 Nicholas 回答):

    # get zone from global meta data
    zone_full=`curl http://metadata/computeMetadata/v1/instance/zone -H "Metadata-Flavor: Google"`
    zone=${zone_full##*/}

    # get sql-instance from metadata
    sql_instance=`curl http://metadata/computeMetadata/v1/instance/attributes/sql-instance -H "Metadata-Flavor: Google"`

    # get current instance external natIP
    instance_nat_ip=`gcloud --format="value(networkInterfaces[0].accessConfigs[0].natIP)" compute instances describe $HOSTNAME --zone=$zone`

    # get already authorized ips
    authorized_sql_ips=`gcloud sql instances describe $sql_instance | grep -E "\-\s[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" | cut -d '-' -f 2 | cut -d ' ' -f 2 | tr '\n' ',' | head -c -1`

    # add instance's natIP to authorized SQL networks
    gcloud sql instances patch $sql_instance --authorized-networks $authorized_sql_ips,$instance_nat_ip