Skip to content

NimTechnology

Trình bày các công nghệ CLOUD một cách dễ hiểu.

  • Kubernetes & Container
    • Docker
    • Kubernetes
      • Ingress
    • Helm Chart
    • Isito-EnvoyFilter
    • Apache Kafka
      • Kafka
      • Kafka Connect
      • Lenses
    • Vault
    • Longhorn – Storage
    • VictoriaMetrics
  • CI/CD
    • ArgoCD
    • ArgoWorkflows
    • Spinnaker
    • Jenkins
    • Harbor
    • TeamCity
    • Git
      • Bitbucket
  • Coding
    • Terraform
      • GCP – Google Cloud
      • AWS – Amazon Web Service
    • Golang
    • Laravel
    • Python
    • Jquery & JavaScript
    • Selenium
  • Log & Monitor
    • Prometheus
    • Grafana
    • ELK
      • Kibana
      • Logstash
  • BareMetal
  • Toggle search form

[oauth2-proxy] Your applications is protected by Oauthen2(Google, GitHub,…)

Posted on July 18, 2022December 3, 2022 By nim No Comments on [oauth2-proxy] Your applications is protected by Oauthen2(Google, GitHub,…)

Contents

  • 1) Overview
  • 2) Demo Oauthen2 Proxy
    • 2.1) Build image
    • 2.2) Provisioning Oauthen2 through Docker compose.
    • 2.3) The specific emails are permitted to access the website via Oauthen2 Proxy
  • 3) Integrate between Oauthen2 Proxy + ingress-nginx

1) Overview

Mình có rất nhiều services hay webs được public internet. Nhưng không phải ứng dụng nào cũng có Two Factor Authentication, or 2FA

Ví dụ như bạn thấy bạn có thể login lazada, shoppe, tiki, vân vân. bằng tài khoản google, github,….

Nếu web đó của bạn không hỗ trợ login bằng Oauthen2 thì bạn làm sao nhỉ?

Bạn sẽ thấy là người dùng từ ngoài internet trước khi đến được web thì bước qua xác của Oauthen2 Proxy
Bạn cần phải có 1 bưới sác thực với google.

Sau đây là dường link mà mình lượn nhắt được:
https://github.com/oauth2-proxy/oauth2-proxy
https://qiita.com/hoto17296/items/7f78416965e4ae289de0
https://developer.okta.com/blog/2022/07/14/add-auth-to-any-app-with-oauth2-proxy (Bài này thì có example với nginx)
https://github.com/oktadev/okta-oauth2-proxy-example

Hiện mình đang sửa KongAPI để Public các web của mình.
Mình sẽ thêm vào oauthen2-proxy và structure như sau:

Đầu tiên thì accessing sẽ đi vào Kong Gateway -> đi vào Oauthen2 để xác thực google -> Đi vào website.

Bạn sẽ thấy mô hình trên của mình sẽ cần phải đi qua hai proxy nên latency chắc chắn sẽ cao hơn bình thường 1 ít. Nên cách trên sẽ không phù hợp cho streamming remote desktop như là guamole.
Và mô hình trên thì mình không thể chạy với web app sử dụng https.

==> nếu bạn có cách j hay chỉ cho Nim nhé!

2) Demo Oauthen2 Proxy

2.1) Build image

Mình dựng docker-compose cho các thành phần của Oauthen2-Proxy

cat proxy/Dockerfile
>>>>>>>>
FROM alpine

ARG VERSION=v7.3.0

RUN wget -q https://github.com/oauth2-proxy/oauth2-proxy/releases/download/${VERSION}/oauth2-proxy-${VERSION}.linux-amd64.tar.gz
RUN tar xzf oauth2-proxy-${VERSION}.linux-amd64.tar.gz
RUN mv oauth2-proxy-${VERSION}.linux-amd64/oauth2-proxy /bin/
RUN rm -rf oauth2-proxy-${VERSION}*

CMD ["/bin/oauth2-proxy"]

Mặc dù là họ đã có săn image rồi nhưng mình vẫn build cho ngầu.

2.2) Provisioning Oauthen2 through Docker compose.

cat docker-compose.yml
version: '3'

services:

  proxy:
    build: proxy
    ports:
      - 8084:4180
    environment:
      OAUTH2_PROXY_HTTP_ADDRESS: 0.0.0.0:4180
      OAUTH2_PROXY_PROVIDER: google
      OAUTH2_PROXY_CLIENT_ID: 506853153623-xxxxxxxxxxxxxxxx.apps.googleusercontent.com
      OAUTH2_PROXY_CLIENT_SECRET: GOCSPX-ycjSROdHM8_xxxxxxxxxxxxxxxxx
      OAUTH2_PROXY_EMAIL_DOMAINS: gmail.com
      OAUTH2_PROXY_UPSTREAMS: http://192.168.101.34:8084/
      OAUTH2_PROXY_COOKIE_SECRET: Tg06aGvkpWU2S_sryFWGYg==
      OAUTH2_PROXY_SESSION_STORE_TYPE: redis
      OAUTH2_PROXY_REDIS_CONNECTION_URL: redis://redis/
      OAUTH2_PROXY_COOKIE_SECURE: 'false'
      OAUTH2_PROXY_REDIRECT_URL: https://private-note.nimtechnology.com/oauth2/callback

  redis:
    image: redis
    volumes:
      - redis:/data

volumes:
  redis:

Đây là phần lưu ý của mình

OAUTH2_PROXY_PROVIDER: google
OAUTH2_PROXY_CLIENT_ID: 506853153623-xxxxxxxxxxxxxxxx.apps.googleusercontent.com
OAUTH2_PROXY_CLIENT_SECRET: GOCSPX-ycjSROdHM8_xxxxxxxxxxxxxxxxx

Để config oauthen với google thì bạn thể sem tạm ở đây:
https://nimtechnology.com/2021/11/28/kiali-config-authentication-on-kiali/#11_Config_google

OAUTH2_PROXY_UPSTREAMS: http://192.168.101.34:8084/

Đâu là ip/port của web-app của mình





Chỗ này kiểu filter domain.
với config bên trên thì chỉ có user mail có dạng là: nimtechnology@gmail.com hay nim@gmail.com
===> thì sẽ login vào được!

Trên Công thì mình config uptream xuống oauthen2-proxy.

Bạn thấy mình export cái oauthen2-proxy

Nếu Login trở lại, bạn sẽ thấy oauthen2-proxy đòi bạn đăng nhập

2.3) The specific emails are permitted to access the website via Oauthen2 Proxy

Bạn có thể tham khảo
https://github.com/oauth2-proxy/oauth2-proxy/issues/73

Giờ là file config

cat oauth2-proxy
mr.nim94@gmail.com

cat docker-compose.yml
version: '3'

services:

  proxy:
    build: proxy
    ports:
      - 8084:4180
    environment:
      OAUTH2_PROXY_HTTP_ADDRESS: 0.0.0.0:4180
      OAUTH2_PROXY_PROVIDER: google
      OAUTH2_PROXY_CLIENT_ID: 506853153623-rpqa4s1g19o99ljpb5c1gamf0i815djk.apps.googleusercontent.com
      OAUTH2_PROXY_CLIENT_SECRET: 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
      #OAUTH2_PROXY_EMAIL_DOMAINS: gmail.com
      OAUTH2_PROXY_UPSTREAMS: http://192.168.101.34:8084/
      OAUTH2_PROXY_COOKIE_SECRET: Tg06aGvkpWU2S_sryFWGYg==
      OAUTH2_PROXY_SESSION_STORE_TYPE: redis
      OAUTH2_PROXY_REDIS_CONNECTION_URL: redis://redis/
      OAUTH2_PROXY_COOKIE_SECURE: 'false'
      OAUTH2_PROXY_REDIRECT_URL: https://private-note.nimtechnology.com/oauth2/callback
      OAUTH2_PROXY_AUTHENTICATED_EMAILS_FILE: /home/auth_users
    volumes:
      -  ./oauth2-proxy:/home/auth_users  

  redis:
    image: redis
    volumes:
      - redis:/data

volumes:
  redis:

3) Integrate between Oauthen2 Proxy + ingress-nginx

Bài này khá là hay bạn có thể tham khảo.
https://oak-tree.tech/blog/k8s-nginx-oauth2-gitlab

Kubernetes & Container

Post navigation

Previous Post: [Spinnaker] clouddriver.kubernetes.op.job.KubectlJobExecutor$KubectlException: Deploy failed
Next Post: [TeamCity] Getting started with TeamCity

More Related Articles

[DevOpsSec] What tools does DevopsSec need to secure system/infrastructure Kubernetes & Container
[Harbor] Cấu hình Proxy Cache <- Docker Hub trên Harbor. Harbor
[Istio-Multi Cluster] Tutorial is very detailed to install Primary-Remote on different networks Isito-EnvoyFilter
[Longhorn] Store label with longhorn in order to create many storage classes and have many storage styles “SSD, HDD, fast, slow” Kubernetes & Container
[OPA Gatekeeper] Sử dụng openpolicyagent để ngăn chặn việc apply yaml tuỳ tiện và sai lên kubernetes! Kubernetes & Container
[ArgoCD/KSOPS] Encrypting Resource on kustomize and Argocd. ArgoCD

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Tham Gia Group DevOps nhé!
Để Nim có nhiều động lực ra nhiều bài viết.
Để nhận được những thông báo mới nhất.

Recent Posts

  • [Smartctl] Instruction check the health disk of Raspberry. January 16, 2023
  • [kubectl/Argocd] How to create a kubectl config file for serviceaccount or from the cluster secret of Argocd January 12, 2023
  • [Helm/Github] Create a public Helm chart repository with GitHub Pages January 8, 2023
  • [AWS] How to increase the disk size of a Windows EC2 machine? January 4, 2023
  • [Redis] ElastiCache-Redis Cross-Region Replication|Global DataStore January 3, 2023

Archives

  • January 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • July 2022
  • June 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021

Categories

  • BareMetal
  • CI/CD
    • ArgoCD
    • ArgoWorkflows
    • Git
      • Bitbucket
    • Harbor
    • Jenkins
    • Spinnaker
    • TeamCity
  • Coding
    • Golang
    • Jquery & JavaScript
    • Laravel
    • Python
    • Selenium
    • Terraform
      • AWS – Amazon Web Service
      • GCP – Google Cloud
  • Kubernetes & Container
    • Apache Kafka
      • Kafka
      • Kafka Connect
      • Lenses
    • Docker
    • Helm Chart
    • Isito-EnvoyFilter
    • Kubernetes
      • Ingress
    • Longhorn – Storage
    • Vault
    • VictoriaMetrics
  • Log & Monitor
    • ELK
      • Kibana
      • Logstash
    • Grafana
    • Prometheus
  • Uncategorized
  • Admin

Copyright © 2023 NimTechnology.