Identity-AwareProxy의 인증 프록시 서버

소개



변호사 닷컴 주식회사에서는 코로나 화를 계기로 2020년부터 재택근무를 할 기회가 늘어났습니다. 그 때, 일부 서비스에서는 액세스 원의 IP 주소를 오피스에 제한하고 있기 때문에 액세스 할 수 없게 되는 것이 나왔습니다.

가능하면 IP 제한을 제거할 수 있으면 좋았지만, 일부는 IP 제한이 필수적인 것도 있고,
VPN 도입도 검토했습니다만, 계정의 관리, 부하 등등의 고려가 번거롭다고 생각해, 보다 간단하게 도입하는 구조가 없는가 생각했습니다.

당사에서는 AWS뿐만 아니라 GCP도 사용하고 있기 때문에, 간단하게 사용할 수 있는 Identity-AwareProxy로 인증을 실시해, GCE상의 proxy 서버(nginx)를 통과시킴으로써 IP를 고정화했습니다.

작업 흐름


  • GCP GCE에 프록시 서버 구축
  • GCE에 외부 IP 부여 및 방화벽 설정
  • Identity-Aware TCP 전송 설정
  • PC에서 gcloud 명령 실행 (TCPport 전송)
  • 브라우저 설정

  • 1. GCP GCE에 프록시 서버 구축



    https 대응의 proxy로서 이용하는 경우는 모듈이 필요하므로
    source에서 설치합니다.
    ※git나 컴파일러, PCRE는 인스톨이 끝난 전제입니다
    $ wget http://nginx.org/download/nginx-1.16.1.tar.gz
    $ tar zxvf nginx-1.16.1.tar.gz
    $ git clone https://github.com/chobits/ngx_http_proxy_connect_module.git -b v0.0.1
    

    Nginx에 패치 적용 및 Nginx 설치
    prefix=/path/to/nginx는 설치 경로이므로 적절하게 변경하십시오.
    ※make로 에러가 되는 경우는 PCRE나 gcc등의 개발계의 것이 인스톨 되어 있지 않을 가능성이 있으므로 넣습니다
    $ cd nginx-1.16.1
    $ patch -p1 < ../ngx_http_proxy_connect_module/patch/proxy_connect_rewrite_101504.patch
    $ ./configure --prefix=/path/to/nginx --add-module=../ngx_http_proxy_connect_module
    $ make && make install
    

    Nginx 설정
    conf를 프록시에 대한 설정으로 변경합니다.
    $ cd /path/to/nginx
    $ vim conf/nginx.conf
    

    nginx.conf
    worker_processes  1;
    
    events {
        worker_connections  1024;
    }
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        sendfile        on;
    
        keepalive_timeout  65;
    
         server {
             listen                         3128;
    
             # dns resolver used by forward proxying
             resolver                       8.8.8.8;
    
             # forward proxy for CONNECT request
             proxy_connect;
             proxy_connect_allow            443 563;
             proxy_connect_connect_timeout  10s;
             proxy_connect_read_timeout     10s;
             proxy_connect_send_timeout     10s;
    
             # forward proxy for non-CONNECT request
             location / {
                 proxy_pass $scheme://$http_host$request_uri;
                 proxy_set_header Host $host;
             }
         }
    }
    

    nginx 시작 및 중지
    다시 시작하고 다시 로드하여 설정을 반영합니다.
    #起動
    /path/to/nginx/sbin/nginx
    
    #停止
    /path/to/nginx/sbin/nginx -s stop
    
    #再読み込み
    /path/to/nginx/sbin/nginx -s reload
    

    2. GCE에 외부 IP 부여 및 방화벽 설정



    GCE의 IP를 고정합니다.
    외부 IP 주소 → 정적 주소 예약을 선택하여 IP를 가져옵니다.
    이 IP를 인스턴스로 설정합니다.
    ※세세한 설정은 할애합니다
    IAP에서만 허용하는 방화벽 설정도 수행합니다. 다음 IP에서 모든 권한을 부여합니다.
    35.235.240.0/20
    35.191.0.0/16
    130.211.0.0/22
    

    IAP에서 사용하는 IP 범위
    htps : // c ぉ d. 오, ぇ. 이 m / 아 r 치 테 c 얽힌 / 부이 ぢ ん ー ん r 네 t 이런 c ゔ ぃ ty ふぉ rp ゔ ぁ vms? hl = 그럼

    3. Identity-Aware의 TCP 전송 설정



    GCP 콘솔에 로그인하여 Identity-Aware 관리 화면을 엽니다.
    그림과 같이 TCP의 리소스를 선택, 이용하는 인스턴스에 체크를 할 수 있습니다.

    정보 패널이 표시되지 않으면 정보 패널 표시를 클릭합니다.
    오른쪽 하단의 멤버 추가를 클릭하여 다음을 구성합니다.
    새 멤버: 액세스를 허용할 사용자 또는 그룹을 지정합니다.
    역할 선택에서 Cloud IAP > IAP로 보호된 터널 사용자를 선택합니다.



    4. PC에서 gcloud 명령 실행 (TCPport 전송)



    액세스하는 PC에서 gcloud 명령을 사용하여 인증하고 localhost port 전송을 수행합니다.
    ※gcloud 명령을 액세스하는 PC에 설치된 것
    nginx-proxy는 인스턴스 이름이고 3128은 프록시 서버 측 포트입니다. localhost:3128은 PC의 localport입니다.
    다음 예제는 local 3128port를 서버 측 3128로 전송합니다.
    $ gcloud compute start-iap-tunnel nginx-proxy 3128   --local-host-port=localhost:3128
    

    위의 실행 후에 다음과 같이 표시되면 TCP 포트 전송이 활성화됩니다.
    Testing if tunnel connection works.
    Listening on port [3128].
    

    5. 브라우저 설정



    브라우저에서 proxy를 사용하는 설정을 합니다.
    다음은 Firefox 설정 예입니다.


    브라우저를 통한 소스 IP가 GCE의 외부 IP인지 확인합니다.
    htps : // 라코. 그리고 ls / 및 ls / 2 /

    참고



    TCP 전송에 IAP 사용(GCP 공식)
    h tps : // c ぉ d. 오, ぇ. 이 m/아 p/도 cs/우신 g-tcp ぉr와 rぢg? hl = 그럼

    nginx에서 프록시
    https://blog.motikan2010.com/entry/2020/03/18/HTTPS%E9%80%9A%E4%BF%A1%E3%82%92Nginx%E3%81%A7%E3%83%95% E3%82%A9%E3%83%AF%E3%83%BC%E3%83%89%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7

    좋은 웹페이지 즐겨찾기