如何实现一个可以动态配置腾讯云安全组的接口?

3,037次阅读
没有评论

共计 600 个字符,预计需要花费 2 分钟才能阅读完成。

腾讯云相关文档:https://cloud.tencent.com.cn/document/product/1207/48254

本文以腾讯云轻量云服务器为例

使用场景

为了保证服务器安全,正常情况下我们都会把 22(ssh)、3306(mysql)、6379(redis)等常用端口在安全组内禁用。

但是有些时候,我们确实也需要在外网连接 SSH 操作一些东西或者连接 Mysql 操作数据库。所以每次在操作之前,都要去配置一下安全组开放这些端口,等使用完了再禁用。

整个过程都比较麻烦,所以为了偷懒也想了好些方法。

1. 指定 IP 放行

且不说大部分人都没有固定 IP,有了固定 IP 也是在固定的场所,这样也不是很方便。

2. 代理 IP

放行一个自己常用的代理 IP,每次通过连接这个代理 IP 来操作。

这种还行,但是估计代理 IP 就得让不少人放弃。

3. 动态接口

腾讯云官方提供了操作服务器安全组相关的 API,通过这些 API 接口,我们可以实现一个自己的接口,比如:

具体需要操作哪台服务器,配置哪些端口都可以在 API 内自己定义。

提示

以上例子均为不存在的接口,仅用于演示

简单实现

以下是基于 PHP 简单实现的一个接口,使用方法跟上面的例子是一样的。

通过 Composer 安装腾讯的 sdk:

composer require tencentcloud/lighthouse

创建一个 php 文件,将下面的代码复制进去,按照自己的需求进行修改,保存到你的某个站点下面:

setEndpoint("lighthouse.tencentcloudapi.com");

    // 实例化一个 client 选项,可选的,没有特殊需求可以跳过
    $clientProfile = new ClientProfile();
    $clientProfile->setHttpProfile($httpProfile);

    // 这个填服务器所在地区,比如:ap-shanghai
    $client = new LighthouseClient($cred, "ap-shanghai", $clientProfile);

    // 实例化一个请求对象, 每个接口都会对应一个 request 对象
    $req = new ModifyFirewallRulesRequest();

    $params = ["InstanceId" => "sever-name", // 这里填服务器名称
        "FirewallRules" => [
	        ["Action" => "ACCEPT",
		        "AppType" => "HTTP (80)",
		        "CidrBlock" => "0.0.0.0/0",
		        "FirewallRuleDescription" => "Web 服务 HTTP (80),如 Apache、Nginx",
		        "Port" => "80",
		        "Protocol" => "TCP"
	        ],
	        ["Action" => "ACCEPT",
		        "AppType" => "Ping",
		        "CidrBlock" => "0.0.0.0/0",
		        "FirewallRuleDescription" => "通过 Ping 测试网络连通性 (放通 ALL ICMP)",
		        "Port" => "ALL",
		        "Protocol" => "ICMP"
	        ],
            ["Action" => "ACCEPT",
                "AppType" => "Linux login (22)",
                "CidrBlock" => $enable_ssh ? "0.0.0.0/0" : $enable_ip,
                "FirewallRuleDescription" => "Linux SSH 登录",
                "Port" => "22",
                "Protocol" => "TCP"
            ],
            ["Action" => "ACCEPT",
                "AppType" => "HTTPS (443)",
                "CidrBlock" => "0.0.0.0/0",
                "FirewallRuleDescription" => "Web 服务 HTTPS (443),如 Apache、Nginx",
                "Port" => "443",
                "Protocol" => "TCP"
            ],
            ["Action" => "ACCEPT",
                "AppType" => "MySQL (3306)",
                "CidrBlock" => $enable_mysql ? "0.0.0.0/0" : $enable_ip,
                "FirewallRuleDescription" => "数据库",
                "Port" => "3306",
                "Protocol" => "TCP"
            ]
        ]
    ];

    $req->fromJsonString(json_encode($params));
    $resp = $client->ModifyFirewallRules($req);
    print_r($resp->toJsonString());

} catch (TencentCloudSDKException $e) {echo $e;}

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-11-22发表,共计600字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)