gce 인스턴스에서 서비스 중인 특정 서비스의 ssl을 설정하고 cloud armor 를 통해 ip 기반 접근제어 하는 방법을 알아봅니다.
아래의 작업을 하게 됩니다.
gcloud compute instances create moon-test\
--project=prj-sandbox-devops-9999\
--zone=asia-northeast3-c\
--machine-type=e2-small\
--network-interface=subnet=moon-mgmt-subnet-tekton-test\
--tags=moonssh,http-server,https-server\
--metadata=enable-oslogin=true,startup-script='#! /bin/bash
apt update
apt -y install apache2
instance_id=$(cat /etc/google_instance_id)
cat <<EOF > /var/www/html/index.html
<html><body><p>moon test webserver. instance_id : $instance_id</p></body></html>EOF'
생성 확인
curl {external_ip}:80
도메인 프로바이더에서 A레코드 등록을 해줍니다.
도메인 등록 확인
GCP 콘솔 > HTTP(S) 부하분산 생성
프로토콜 HTTPS 선택 후 IP, 인증서, SSL 정책을 생성해봅니다.
lb 에 필요한 리소스들을 아래와 같이 생성합니다.
인증서 생성 후 상태를 확인합니다. provisioning 단계에서 active까지 10~15분정도 걸립니다.
대상은 FE 만드는 부분에서 정할 수 있기때문에 비워두고 만듭니다.
콘솔 UI
named port에 서비스에 사용되는 port를 넣고 기억해줍니다.
웹 서비스 포트의 헬스체크를 위해 포트 정보를 입력하고 나머지는 기본값으로 둡니다.
기본으로 all deny를 설정하고 응답으로 403을 설정합니다.
다음 규칙에서는 정해진 ip에서만 허용하기 위해 ip, 허용, 우선순위를 넣고 생성합니다.
모든 경로에 대해 lb가 작동하도록 라우팅 경로를 지정해줍니다.
lb에서 라우팅과 헬스체크를 위한 방화벽 룰을 추가합니다.
모든 세팅을 마치면 아래와 같은 설정이 됩니다.
인증서 생성 이후 propagate되기 까지 시간이 좀 걸릴 수 있기 때문에 사이트 접속이 안될 수 있다.
ERR_SSL_VERSION_OR_CIPHER_MISMATCH 등의 에러가 계속 나오더라도 기다려보면 성공적으로 적용된걸 알 수 있다.