【问题标题】:mutual TLS based on specific IP基于特定 IP 的双向 TLS
【发布时间】:2019-09-05 12:04:05
【问题描述】:

我正在尝试为双向 TLS 配置 nginx-ingress,但仅​​针对特定的远程地址。我尝试使用 sn-p 但没有成功:

nginx.ingress.kubernetes.io/configuration-snippet: |
  if ($remote_addr = 104.214.x.x) {
    auth-tls-verify-client: on;
    auth-tls-secret: namespace/nginx-ca-secret;
    auth-tls-verify-depth: 1;
    auth-tls-pass-certificate-to-upstream: false;
  }

auth-tls 注释在作为注释应用时起作用,但在 sn-p 内部则不起作用。

知道如何配置它或使其工作的解决方法吗?

【问题讨论】:

  • 有人知道如何完成这项工作吗?
  • 为什么只需要针对特定​​远程 IP 的 mTLS?由于您仅对 一些 客户端进行身份验证,因此您不会获得任何额外的安全性。此外,源 IP 地址也可能被欺骗。在您的情况下,普通旧的非相互 TLS 会完全一样。
  • 我们希望 mTLS 用于我们应用程序的一个服务与外部系统之间的特定通信。其他任何人都无需在所有服务上使用 mTLS 即可进行通信。

标签: kubernetes kubernetes-ingress nginx-ingress


【解决方案1】:

mTLS 的工作基本上是通过要求客户端提供证书来限制对服务的访问。如果你公开一个服务,然后只要求具有特定 IP 地址的客户端提供证书,那么整个世界仍然可以在没有证书的情况下访问你的服务,这完全违背了 mTLS 的意义。

如果您想了解更多信息,here is a good article 解释了 TLS 和 mTLS 存在的原因以及它们之间的区别。

有两种方法可以做出合理的设置:

  1. 只需使用常规 TLS 而不是 mTLS
  2. 使集群中的服务需要 mTLS 才能访问它,而不管 IP 地址如何

如果选择选项 2,则需要将服务本身配置为使用 mTLS,然后配置 ingress 以将客户端证书传递给服务。这是 nginx 入口的示例配置,它将与需要 mTLS 的服务一起使用:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: mtls-sample
  annotations:
    nginx.ingress.kubernetes.io/backend-protocol: "https"
    nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream: "true"
spec:
  rules:
    - http:
        paths:
          - path: /hello
            backend:
              serviceName: mtls-svc
              servicePort: 443

【讨论】:

    猜你喜欢
    • 2020-01-27
    • 2014-04-05
    • 2017-06-27
    • 1970-01-01
    • 2021-04-13
    • 2017-02-07
    • 2020-09-24
    • 2020-11-11
    • 2013-12-10
    相关资源
    最近更新 更多