前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Envoy Gateway 安全策略介绍: HTTP Basic Authentication

Envoy Gateway 安全策略介绍: HTTP Basic Authentication

作者头像
赵化冰
发布于 2023-11-30 01:53:18
发布于 2023-11-30 01:53:18
29300
代码可运行
举报
运行总次数:0
代码可运行

什么是 Envoy Gateway 安全策略?

Envoy Gateway 中的安全策略 (SecurityPolicy) 是 Envoy Gateway 对 Kubernetes Gateway API 的一个扩展资源。SecurityPolicy 采用了 Gateway API 的 Policy Attachment 机制来对 Gateway API 进行扩展,为 Envoy Gateway 实现了 CORS,JWT,OIDC,Basic Auth 等强大的安全能力。

什么是 HTTP Basic Authentication ?

HTTP Basic Authentication 是一种用于 Web 应用程序的简单用户身份验证协议。在客户端请求访问受保护资源时,服务器会返回 HTTP 401 Unauthorized 响应,并在 WWW-Authenticate头 中指定 Basic 身份验证。客户端接着发送包含 Base64 编码的用户名和密码的 Authorization 头。服务器解码这些凭证,与存储的用户信息进行比较。若匹配成功,服务器允许对资源的访问。一个使用 Basic Authentication 的 HTTP 请求的例子如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET /resource/ HTTP/1.1
Host: example.com
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l

HTTP Basic Authentication 虽然简单,但是在很多场景下仍然被大量使用,也是网关中的一个常用的场景。但不知为何 Envoy 中之前一直并没有提供 HTTP Basic Authentication 的能力。Envoy Gateway 也因此无法提供 Basic Authentication 能力。为了解决该问题,我前段时间在 Envoy 中实现了 HTTP Basic Auth Filter,并基于该 Filter 在 Envoy Gateway 中提供了 HTTP Basic Authentication 的能力。

  • Envoy HTTP Basic Auth Filter:https://github.com/envoyproxy/envoy/pull/30079
  • Envoy Gateway HTTP Basic Authentication:https://github.com/envoyproxy/gateway/pull/2224

如何在 Envoy Gateway 中配置 HTTP Basic Authentication ?

首先参照 Envoy Gateway Quickstart 安装 Envoy Gateway 和例子程序。

Envoy Gateway 要求使用 .htpasswd 文件格式来存储用户名和密码。.htpasswd 文件可以通过 htpasswd 命令行工具生成。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ htpasswd -cbs .htpasswd foo bar
Adding password for user foo

上面的命令会在当前目录下生成一个名为 .htpasswd 的文件,内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
foo:{SHA}Ys23Ag/5IOWqZCw9QGaVDdHwH00=

其中 foo 是用户名,{SHA}Ys23Ag/5IOWqZCw9QGaVDdHwH00= 是密码的 SHA1 哈希值。可以看到,密码是经过 SHA1 哈希的,不会将密码原文存储在 .htpasswd 文件中。因此,.htpasswd 文件不存在密码泄露的风险。

我们还可以通过 htpasswd 命令行工具来添加继续添加更多的用户名和密码。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ htpasswd -bs .htpasswd foo1 bar1

这样,.htpasswd 文件中就会有两个用户名和密码了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
foo:{SHA}Ys23Ag/5IOWqZCw9QGaVDdHwH00=
foo1:{SHA}djZ11qHY0KOijeymK7aKvYuvhvM=

接下来,我们采用刚才生成的 .htpasswd 文件来创建一个 Kubernetes Secret,用于存储用户名和密码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl create secret generic basic-auth --from-file=.htpasswd
secret

查看该 Secrect 的内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: v1
data:
  .htpasswd: Zm9vOntTSEF9WXMyM0FnLzVJT1dxWkN3OVFHYVZEZEh3SDAwPQpmb28xOntTSEF9ZGpaMTFxSFkwS09pamV5bUs3YUt2WXV2aHZNPQo=
kind: Secret
metadata:
  creationTimestamp: "2023-11-28T12:24:25Z"
  name: basic-auth
  namespace: default
  resourceVersion: "2227303"
  uid: 0ee724b1-68a8-41c6-bf63-85b75f1e4857
type: Opaque

可以看到,.htpasswd 文件中的内容已经被 Base64 编码后存在了 Secret 的 .htpasswd 这个 key 中。这样,我们就可以在 Envoy Gateway 中使用该 Secret 来配置 HTTP Basic Authentication 了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat <<EOF | kubectl apply -f -
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: SecurityPolicy
metadata:
  name: basic-auth-example
spec:
  targetRef:
    group: gateway.networking.k8s.io
    kind: HTTPRoute
    name: backend
  basicAuth:
    users:
      name: "basic-auth"
EOF

上面的配置会将 HTTP Basic Authentication 应用到名为 backend 的 HTTPRoute 上。这样,当客户端请求访问该 HTTPRoute 时,就需要提供用户名和密码了。除了 HTTPRoute,Envoy Gateway 还支持将 SecurityPolicy 应用到 Gateway 上,只要将 targetRef 指向 Gateway 即可。

尝试不带用户名和密码访问一下该 HTTPRoute:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -v -H "Host: www.example.com" "http://${GATEWAY_HOST}/"

可以看到,由于没有认证信息,请求被拒绝了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
...
< HTTP/1.1 401 Unauthorized
< content-length: 58
< content-type: text/plain
< date: Tue, 28 Nov 2023 12:43:32 GMT
< server: envoy
<
* Connection #0 to host 127.0.0.1 left intact
User authentication failed. Missing username and password.

接下来,我们尝试使用正确的用户名和密码访问一下该 HTTPRoute:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -v -H "Host: www.example.com" -u 'foo:bar' "http://${GATEWAY_HOST}/"

可以看到,请求被 Envoy Gateway 认证通过,发送到了后端的服务上。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
...
< HTTP/1.1 200 OK
< content-type: application/json
< x-content-type-options: nosniff
< date: Wed, 29 Nov 2023 12:13:28 GMT
< content-length: 556
< x-envoy-upstream-service-time: 0
< server: envoy
...

总结

本文介绍了 Envoy Gateway 中的安全策略 (SecurityPolicy) 的基本概念,以及如何使用 HTTP Basic Authentication 来保护 HTTPRoute。HTTP Basic Authentication 虽然简单,但是在很多场景下仍然被大量使用,也是网关中的一个常用的场景。支持 HTTP Basic Authentication 也让 Envoy Gateway 可以更好地满足这些场景下的应用。后续文章还会继续介绍 Envoy Gateway 安全策略的其他能力,敬请期待。

参考资料

  • Envoy HTTP Basic Auth Filter:https://github.com/envoyproxy/envoy/pull/30079
  • Envoy Gateway HTTP Basic Authentication:https://github.com/envoyproxy/gateway/pull/2224
  • Envoy Gateway Quickstart:https://gateway.envoyproxy.io/v0.6.0/user/quickstart/
  • Envoy Gateway Security Policy:https://gateway.envoyproxy.io/v0.6.0/api/extension_types/#securitypolicy
  • ← Previous Post
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Git 服务器搭建
接下来我们将以 Centos 为例搭建 Git 服务器。 1、安装Git $ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel $ yum install git 接下来我们 使用root账户创建一个git用户组和用户,用来运行git服务: $ groupadd git $ adduser git -g git 2、创建证书登录 收集所有需要登录的用户的公钥,公钥位于id_rsa.pub(
joshua317
2018/04/16
2.1K0
【腾讯云的1001种玩法】Hello Hexo之静态博客搭建+自动部署
饶文津
2017/04/13
4.9K0
将个人博客迁移到云服务器上
之前通过github 和coding 来搭建的个人博客,但是搜索引擎一直不是很好,并且总感觉不稳定,访问很慢。最近刚刚买了一个云服务器,所以就打算将个人博客迁移到云服务器上。
程序员爱酸奶
2020/03/16
2K0
将个人博客迁移到云服务器上
小组级git服务器搭建
每个需要使用git服务器的工程师,自己需要生成一个ssh公钥 进入自己的~/.ssh目录,看有没有用 文件名 和 文件名.pub 来命名的一对文件,这个 文件名 通常是 id_dsa 或者 id_rsa。 .pub 文件是公钥,另一个文件是密钥。假如没有这些文件(或者干脆连 .ssh 目录都没有),你可以用 ssh-keygen 的程序来建立它们,该程序在 Linux/Mac 系统由 SSH 包提供, 在 Windows 上则包含在 MSysGit 包里:
EltonZheng
2021/01/22
7960
将Hexo部署到云服务器
看到群里好多人问如何将Hexo部署到云服务器。按我的思想,如果有服务器谁还用Hexo?但居然还真有人。趁着上个月白嫖的腾讯云的机器还没过期,赶紧重装个系统,来咕一篇Hexo如何部署到云服务器。
Dreamy.TZK
2020/05/25
10K0
初学Git及简单搭建git服务器和客户端
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。 Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
拓荒者
2019/07/25
2.5K1
Git服务器搭建
  Git是目前世界使用最广泛的分布式版本控制系统,它是由林纳斯·托瓦兹(Linus Torvalds)创作,最初的目的是为了更好地管理Linux内核开发而设计的。
那一叶随风
2018/08/22
2.6K0
Git服务器搭建
搭建自己的git 代码服务器
搭建自己的git 代码服务器 git server 安装配置 1、切换到root用户 stevenrao@server:~$ su - root 2、创建git组 root@server:~$ groupadd git root@server:~$ groupadd user 3、添加git账户 root@server:~$ useradd git -g git -m -s /bin/bash root@server:~$ usermod -G git,user git #把git同时加入git组和
小小科
2018/05/02
2.1K0
搭建Git服务器(二) 原
出现该提示,说明可以登录,因为git用户的shell禁止该用户登录虚拟机,所以在此输入密码后直接退出。
阿dai学长
2019/04/03
5030
CentOS搭建Git服务器及权限管理
声明:本教程,仅作为配置的记录,细节不展开,需要您有一点linux的命令基础,仅作为配置参考。 1. 系统环境 系统: Linux:CentOS 7.2 64位 由于CentOS已经内置了OpenSSH,如果您的系统没有,请自行安装。 查看ssh版本 $ ssh -V # 输出以下表示没问题,可以继续。 版本可能不一致,能用即可。 OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013 避免系统环境和其他的不一致,请核对您系统的版本,其他发行版请对应修改。
老马
2018/04/16
2.9K0
从零搭建Hexo博客并部署腾讯云服务器
腾讯云服务器已经买了好一阵子了,拖延到现在才搭博客,参考各个社区里挺多教程,最后选择使用Hexo来作为自己的博客框架,好处是不用自己造轮子,而且有很多漂亮的主题可以拿来用。今天上午把搭博客过程做个小结,希望对有想法要做自己的博客的同学们有一些帮助。
用户7978588
2020/12/19
2.4K0
Hexo 部署至云服务器(宝塔面板)
hexo 博客部署方法有好多种,github pages、gitee pages(pro)、vercel,cloudflare page、阿里云oss、腾讯存储桶等等这些不需要购买服务器的部署方式。一般大部分都用以上方式部署自己的hexo博客,但也有少部分部署在自己服务器的同志。
Qwe7
2022/03/30
6K0
git服务器搭建
收集所有需要登录的用户的公钥,公钥位于id_rsa.pub文件中,把我们的公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
一朵灼灼华
2022/08/05
1.6K0
将Hexo部署到腾讯云轻量应用服务器
进入腾讯云,点击右上角控制台,选择轻量应用服务器(如果没有的话,就直接使用上面的搜索功能) 找到自己的服务器,点击 更多→管理,然后选择重置密码,重置初始密码
十玖八柒
2022/08/01
8K1
将Hexo部署到腾讯云轻量应用服务器
在CentOS下搭建自己的Git服务器 转
首先需要装好CentOS系统,作为测试,你可以选择装在虚拟机上,这样比较方便。这步默认你会,就不讲了。 有了CentOS,那么如何搭建Git服务器呢? 1、首先需要安装Git,可以使用yum源在线安装:
尚浩宇
2018/08/17
9710
向 Git 服务器添加 SSH 公钥
在网上很少找到文章有提到如何将自己的 Git 远程仓库配置成可以通过 SSH 公钥方式认证的,而几乎清一色都是告诉你怎么通过 web 界面向 GitHub 添加 SSH 公钥。LZ 在网上查找了一番,终于找到了办法。
全栈程序员站长
2022/07/11
2K0
搭建服务器上的GIT并实现自动同步到站点目录(www)「建议收藏」
前言:当我们想要实现几个小伙伴合作开发同一个项目,或者建立一个资源分享平台的时候,GIT就是一个很好的选择。当然,既然是一个共有平台,那么把这个平台放到个人计算机上明显是不合适的,因此就要在服务器上搭建GIT了。另一个需求是,我们在本地开发,然后推送到服务器上,并且自动同步到web站点目录,这样就可以直接看到网页效果了,这就要实现自动同步。下面我带领大家实现这么一个功能。
全栈程序员站长
2022/07/11
7510
Hexo部署至服务器(Ubuntu 20.04)
本文将介绍如何从零开始,将Hexo项目部署到服务器(Ubuntu 20.04)上。
花猪
2022/02/22
2.9K1
Hexo部署至服务器(Ubuntu 20.04)
相关推荐
Git 服务器搭建
更多 >
LV.0
杭州安恒信息技术股份有限公司官方微信公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文