【问题标题】:VM firewall rules update虚拟机防火墙规则更新
【发布时间】:2019-05-23 23:34:09
【问题描述】:

是否有使用 NodeJS 更新防火墙规则的 API,非常感谢一个示例。

要求:我有一个 1700 左右的 CDN 受信任 IP 列表,允许访问 GCP 中端口 80 上的特定 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为什么叫防火墙,在控制台叫防火墙规则,好混乱

【问题讨论】:

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


    【解决方案1】:

    您应该使用setMetadata 函数来更新防火墙规则。例如,以这个 nodejs sn-p 为例,它读取并更新防火墙规则的描述:

    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();
    

    在我的示例中,这给出了以下输出:

    初始描述:旧描述 描述集 当前描述:此规则的新描述

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

    【讨论】:

      猜你喜欢
      • 2019-09-06
      • 1970-01-01
      • 2016-11-26
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多