如何将 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 地址
转到存储 -> 云 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
我试过了
gcloud sql instances patch YOUR_INSTANCE_NAME --authorized-networks my-ip
但是此命令会从访问控制列表中删除所有 IP 地址并仅添加我的 IP 地址。如何添加我的 IP 地址并同时保留以前的 IP 地址?
您可以通过控制台 Web 界面添加 IP 地址
转到存储 -> 云 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