VM防火墙规则更新

时间:2018-12-25 05:35:25

标签: node.js google-cloud-platform google-cloud-functions google-compute-engine google-api-nodejs-client

是否有使用NodeJS更新防火墙规则的API,我们将不胜感激。

要求:我有一个大约1700个CDN可信IP列表,可以访问端口80上GCP中的特定VM。

据我了解,每个防火墙规则最多可以有256个源IP。我可以创建和更新其中的8个,并使用相同的名称

进行标记

问题:我们可以使用NodeJS API做到吗?

This API不返回防火墙规则。

等效于cli命令如下

gcloud compute firewall-rules describe alltraffic
gcloud compute firewall-rules update alltraffic --source-ranges="14.201.176.140/32","14.201.176.144/32"
gcloud compute firewall-rules create ramtest1 --allow="tcp:80" --description="ramtest1" --source-ranges="205.251.192.0/19","52.95.174.0/24" --target-tags="tcp-111"

https://cloud.google.com/sdk/gcloud/reference/compute/firewall-rules/

在nodejs api中看不到更新命令 https://cloud.google.com/nodejs/docs/reference/compute/0.10.x/Firewall#create https://cloud.google.com/nodejs/docs/reference/compute/0.10.x/Compute#createFirewall

exports.run_process = async (req, res) => {
  const Compute = require('@google-cloud/compute');
  const compute = new Compute();
  const network = compute.network('default');
  const firewalls = (await network.getFirewalls())[0];
  for(const firewall of firewalls) {
    // console.log('firewall == '+JSON.stringify(firewall));
    console.log('firewall = '+firewall.metadata.name);
    if(firewall.metadata.name === 'alltraffic') {
      console.log(' xxxxxxxxxxxxxxxxxxxx changing all traffic xxxxxxxxxxxxxx ');
    }
  }
  return res.status(200).send('ok'); 
};

上面的代码列出了防火墙规则,NFI为什么将其称为防火墙,而在控制台中称为防火墙规则,却是如此令人困惑

1 个答案:

答案 0 :(得分:0)

您应该使用setMetadata函数来更新防火墙规则。例如,请使用以下nodejs片段,该片段读取并更新防火墙规则的描述:

async function doit() {
  const Compute = require('@google-cloud/compute');
  const compute = new Compute();
  const f = compute.firewall('default-allow-10000');

  f.get().then(data => {
    const firewall = data[0];
    console.log('initial description: ' + firewall.metadata.description);
    const metadata = {
      description: 'new description for this rule'
    };
    return firewall.setMetadata(metadata);
  }).then(data => {
    const firewall = data[0];
    console.log('description set');
    return compute.firewall('default-allow-10000').get();
  }).then(data => {
    const firewall = data[0];
    console.log('current description: ' + firewall.metadata.description);
  });
}

doit();

在我的示例中,输出为:

initial description: old description
description set
current description: new description for this rule

要查看元数据对象上存在的内容,应查看REST API中的the definition of the Firewall resource