开发者社区 > 云原生 > Serverless > 正文

函数计算,请问在custom container中想要限制某路由只能内网访问应该如何做呀?golan

函数计算,请问在custom container中想要限制某路由只能内网访问应该如何做呀?golang http服务

展开
收起
云原生那些事 2023-07-25 16:25:49 71 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    设置内网绑定IP
    在启动HTTP服务时,指定绑定到容器内的内网IP地址。

    例如:

    go
    Copy
    http.ListenAndServe("172.17.0.1:8000", nil)
    这样只有内网地址才能访问该端口。

    设置ACL(访问控制列表)
    在安全组规则中, only allows traffic from VPC的CIDR范围。

    例如阿里云函数计算VPC的CIDR为:172.16.0.0/12

    然后只允许From这个CIDR的访问。

    设置Nginx反向代理
    让Nginx监听80端口,然后转发到你的HTTP服务。

    然后在Nginx配置中只允许内网访问。

    以上三种方法都可以实现在函数计算自定义容器中限制只允许内网访问特定HTTP服务的效果。

    选择的方式,取决于:

    你的服务结构
    是否需要layer 7过滤
    你更倾向于在代码还是基础设施层面实现限制

    2023-07-28 23:01:07
    赞同 展开评论 打赏
  • 如果您想在函数计算的自定义容器中限制某个路由只能内网访问,可以通过以下步骤实现:

    1. 获取请求来源 IP:首先,您需要获取到请求的源IP地址。在 Golang 的 HTTP 服务中,您可以使用 request.RemoteAddr 获取到请求的源IP地址。

    2. 校验 IP 地址:接下来,您可以对请求的源IP地址进行校验,以确定是否是内网 IP 地址。在 Golang 中,您可以使用 net.ParseIP() 函数解析 IP 地址,然后使用 IsPrivate() 方法判断是否为内网 IP 地址。

      import (
         "net"
         "net/http"
      )
      
      func handler(w http.ResponseWriter, r *http.Request) {
         remoteIP := r.RemoteAddr
         ip := net.ParseIP(remoteIP)
      
         if ip.IsPrivate() {
            // 内网 IP 地址,允许访问
            // 处理业务逻辑
         } else {
            // 非内网 IP 地址,禁止访问
            http.Error(w, "Forbidden", http.StatusForbidden)
            return
         }
      }
      
      func main() {
         http.HandleFunc("/", handler)
         http.ListenAndServe(":8080", nil)
      }
      

      上述示例代码中,将请求的源IP地址解析为IP对象,并使用IsPrivate()方法判断是否为内网IP地址。若为内网IP,则允许访问;若为非内网IP,则返回"403 Forbidden"错误。

    请注意,这种方式只能限制来自内网的直接访问。如果内网中存在代理或负载均衡设备,则需要根据具体情况进行相应的配置和处理。

    2023-07-27 22:59:39
    赞同 展开评论 打赏
  • 只能限制整个函数的 设置http触发器禁止公网访问

    此答案来自钉钉群“阿里函数计算官网客户"

    2023-07-26 09:36:04
    赞同 展开评论 打赏

快速交付实现商业价值。

相关产品

  • 函数计算
  • 相关电子书

    更多
    Hologres Serverless之路:揭秘弹性计算组 立即下载
    Serverless开发平台: 让研发效能再提升 立即下载
    Serverless 引领云上研发新范式 立即下载