이 페이지에서는 전역 외부 애플리케이션 부하 분산기에 자체 관리형 인증서를 사용하여 백엔드 인증 TLS(백엔드 인증이라고도 함)를 설정하는 방법을 안내합니다.
백엔드 인증 TLS를 구성하려면 다음을 실행해야 합니다.
- 루트 및 중간 인증서로 구성된 트러스트 구성 리소스를 만듭니다.
- 트러스트 구성을 참조하는 백엔드 인증 구성 리소스를 만듭니다.
- 백엔드 인증 구성 리소스를 부하 분산기의 백엔드 서비스에 연결합니다.
시작하기 전에
- 백엔드 인증 TLS 및 백엔드 mTLS 개요를 검토합니다.
- 트러스트 구성 관리를 검토합니다.
이 가이드의 안내에 따라 Google Cloud CLI를 사용하려면 이를 설치해야 합니다. API 및 gcloud CLI 참조에서 부하 분산과 관련된 명령어를 확인할 수 있습니다.
이전에 gcloud CLI를 실행한 적이 없으면 먼저
gcloud init
명령어를 실행하여 인증합니다.Compute Engine API, Certificate Manager API, 네트워크 보안, Network Services API를 사용 설정합니다. 자세한 내용은 API 사용 설정을 참고하세요.
다음과 같은 지원되는 백엔드 중 하나를 사용하여 전역 외부 애플리케이션 부하 분산기를 구성합니다.
- VM 인스턴스 그룹 백엔드
- 하이브리드 연결 NEG
- 영역별 NEG
권한
이 섹션에서는 백엔드 인증 TLS를 구성하는 데 필요한 권한을 보여줍니다.작업 | 권한 |
---|---|
트러스트 구성 만들기 | 대상 Google Cloud 프로젝트에 대한 certificatemanager.trustconfigs.create |
백엔드 인증 구성 리소스 만들기 |
certificatemanager.certs.use certificatemanager.trustconfigs.use networksecurity.backendauthenticationconfigs.create |
백엔드 인증 구성 리소스를 부하 분산기의 백엔드 서비스에 연결 |
compute.backendservice.update networksecurity.backendauthenticationconfigs.use |
설정 개요
다음 섹션에서는 다음 다이어그램에 표시된 아키텍처를 기반으로 백엔드 인증 TLS를 구성하는 단계를 설명합니다.
루트 및 중간 인증서 만들기
이 섹션에서는 OpenSSL 라이브러리를 사용하여 루트 인증서 (신뢰 앵커)와 중간 인증서를 만듭니다.
루트 인증서는 인증서 체인의 맨 위에 있습니다. 중간 인증서는 루트 인증서로 돌아가는 신뢰 체인의 일부입니다. 중간 인증서는 루트 인증서로 암호화 서명됩니다. 부하 분산기가 서버 인증서를 수신하면 서버 인증서에서 구성된 신뢰 앵커로 다시 신뢰 체인을 설정하여 인증서를 확인합니다.
다음 명령어를 사용하여 루트 인증서와 중간 인증서를 만듭니다.
OpenSSL 구성 파일을 만듭니다.
다음 예에서 구성 파일 (
example.cnf
)에는 인증서를 CA에 적합하다고 표시하는 X.509 확장자를 지정하는[ca_exts]
섹션이 포함되어 있습니다. 루트 및 중간 인증서의 요구사항에 관한 자세한 내용은 인증서 요구사항을 참고하세요.cat > example.cnf << EOF [req] distinguished_name = empty_distinguished_name [empty_distinguished_name] # Kept empty to allow setting via -subj command-line argument. [ca_exts] basicConstraints=critical,CA:TRUE keyUsage=keyCertSign extendedKeyUsage=serverAuth EOF
자체 서명 X.509 루트 인증서 (
root.cert
)를 만듭니다. 루트 인증서는 자체 비공개 키 (root.key
)로 자체 서명됩니다.openssl req -x509 \ -new -sha256 -newkey rsa:2048 -nodes \ -days 3650 -subj '/CN=root' \ -config example.cnf \ -extensions ca_exts \ -keyout root.key -out root.cert
중간 인증서의 인증서 서명 요청 (CSR)
int.req
을 만듭니다.openssl req -new \ -sha256 -newkey rsa:2048 -nodes \ -subj '/CN=int' \ -config example.cnf \ -extensions ca_exts \ -keyout int.key -out int.req
CSR에 서명하여 X.509 중간 인증서 (
int.cert
)를 만듭니다. CSR은 루트 인증서를 사용하여 서명됩니다.openssl x509 -req \ -CAkey root.key -CA root.cert \ -set_serial 1 \ -days 3650 \ -extfile example.cnf \ -extensions ca_exts \ -in int.req -out int.cert
인증서 형식 지정
트러스트 저장소에 새 인증서 또는 기존 인증서를 포함하려면 트러스트 구성 YAML 파일에서 참조할 수 있도록 인증서를 한 줄 형식으로 지정하고 환경 변수에 저장합니다.
export ROOT_CERT=$(cat root.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
export INTERMEDIATE_CERT=$(cat int.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
트러스트 구성 리소스 만들기
트러스트 구성은 인증서 관리자의 공개 키 인프라(PKI) 구성을 나타내는 리소스입니다.
트러스트 구성 리소스를 만들려면 다음 단계를 완료하세요.
콘솔
Google Cloud 콘솔에서 인증서 관리자 페이지로 이동합니다.
트러스트 구성 탭에서 트러스트 구성 추가를 클릭합니다.
구성의 이름을 입력합니다.
위치에서 전역을 선택합니다. 위치는 트러스트 구성 리소스가 저장되는 위치를 나타냅니다. 전역 외부 애플리케이션 부하 분산기의 경우 전역 신뢰 구성 리소스를 만들어야 합니다.
트러스트 저장소 섹션에서 신뢰 앵커 추가를 클릭하고 PEM으로 인코딩된 인증서 파일을 업로드하거나 인증서 내용을 복사합니다.
추가를 클릭합니다.
트러스트 저장소 섹션에서 중간 CA 추가를 클릭하고 PEM으로 인코딩된 인증서 파일을 업로드하거나 인증서 내용을 복사합니다. 이 단계를 통해 루트 인증서와 서버 인증서 간에 신뢰 수준을 한 단계 더 높일 수 있습니다.
추가를 클릭하여 중간 CA를 추가합니다.
허용 목록에 추가한 인증서를 추가하려면 추가를 클릭합니다.
만들기를 클릭합니다.
새 트러스트 구성 리소스가 구성 목록에 표시되는지 확인합니다.
gcloud
트러스트 구성 매개변수를 지정하는 트러스트 구성 YAML 파일 (
trust_config.yaml
)을 만듭니다. 이 트러스트 구성 리소스 예시에는 신뢰 앵커와 중간 인증서가 포함된 트러스트 저장소가 있습니다. 이 트러스트 구성 리소스 예에서는 이전 인증서 형식 지정 단계에서 만든 환경 변수에서 인증서 콘텐츠를 읽습니다.cat << EOF > trust_config.yaml trustStores: - trustAnchors: - pemCertificate: "${ROOT_CERT}" intermediateCas: - pemCertificate: "${INTERMEDIATE_CERT}" EOF
추가 신뢰 앵커 또는 중간 인증서를 사용하여 트러스트 저장소를 만들려면 적절한 섹션에
pemCertificate
행을 추가합니다.트러스트 구성 YAML 파일을 가져오려면
gcloud certificate-manager trust-configs import
명령어를 사용합니다.전역 외부 애플리케이션 부하 분산기의 경우 신뢰 구성 리소스가 저장되는 위치로
global
를 지정합니다.gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \ --source=trust_config.yaml \ --location=global
다음을 바꿉니다.
TRUST_CONFIG_NAME
: 트러스트 구성 리소스 이름
백엔드 인증 구성 리소스 만들기
백엔드 인증 구성 (BackendAuthenticationConfig
) 리소스를 만들려면 다음 단계를 완료하세요.
콘솔
- Google Cloud 콘솔에서 인증 구성 페이지로 이동합니다.
- 백엔드 인증 탭에서 만들기를 클릭합니다.
- 백엔드 인증 구성 리소스의 이름을 입력합니다.
- 선택사항: 공개 신뢰 루트를 선택합니다.
- 앞에서 만든 트러스트 구성 리소스를 선택합니다.
- 만들기를 클릭합니다.
백엔드 인증 구성 리소스가 표시되는지 확인합니다.
gcloud
백엔드 인증 구성 리소스의 다양한 속성을 선언적으로 지정하는 YAML 파일을 만듭니다.
cat << EOF > BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME.yaml name: projects/PROJECT_ID/locations/global/backendAuthenticationConfigs/BACKEND_AUTH_CONFIG_NAME trustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME wellKnownRoots: PUBLIC_ROOTS EOF
다음을 바꿉니다.
BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME
: 백엔드 인증 구성 리소스가 정의된 YAML 파일의 이름입니다.PROJECT_ID
: Google Cloud 프로젝트의 IDBACKEND_AUTH_CONFIG_NAME
: 백엔드 인증 구성 리소스의 이름TRUST_CONFIG_NAME
: 이전에 만든 트러스트 구성 리소스의 이름입니다.
백엔드 인증 구성 리소스를 가져오려면
gcloud beta network-security backend-authentication-configs import
명령어를 사용합니다.gcloud beta network-security backend-authentication-configs import BACKEND_AUTH_CONFIG_NAME \ --source=BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME.yaml \ --location=global
다음을 바꿉니다.
BACKEND_AUTH_CONFIG_NAME
: 백엔드 인증 구성 리소스의 이름입니다.BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME
: 백엔드 인증 구성 리소스가 정의된 YAML 파일의 이름입니다.
백엔드 인증 구성 리소스를 부하 분산기의 백엔드 서비스에 연결
백엔드 인증 구성 (BackendAuthenticationConfig
) 리소스를 부하 분산기의 백엔드 서비스에 연결하려면 다음 단계를 완료하세요.
콘솔
Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
백엔드 탭에서 백엔드 인증 TLS 및 백엔드 mTLS를 사용 설정해야 하는 백엔드 서비스를 선택합니다.
수정을 클릭합니다.
고급 구성 섹션을 펼칩니다.
백엔드 인증 섹션에서 사용 설정 체크박스를 선택합니다.
선택사항: SNI 호스트 이름과 허용된 SAN을 지정하여 백엔드 인증서를 확인합니다.
백엔드 인증 구성 리소스를 백엔드 서비스에 연결하려면 백엔드 인증 구성 목록에서 백엔드 인증 구성 리소스를 선택합니다.
계속을 클릭합니다.
백엔드 서비스 설정을 업데이트하려면 업데이트를 클릭합니다.
gcloud
프로젝트의 모든 백엔드 서비스 리소스를 나열하려면
gcloud compute backend-services list
명령어를 사용합니다.gcloud compute backend-services list
BackendAuthenticationConfig
리소스를 연결할 백엔드 서비스의 이름을 기록해 둡니다. 다음 단계에서는 이 이름을BACKEND_SERVICE_NAME
이라고 합니다.백엔드 서비스 구성을 파일로 내보내려면
gcloud beta compute backend-services export
명령어를 사용합니다.gcloud beta compute backend-services export BACKEND_SERVICE_NAME \ --destination=BACKEND_SERVICE_FILENAME.yaml \ --global
다음을 바꿉니다.
BACKEND_SERVICE_NAME
: 백엔드 서비스 이름입니다.BACKEND_SERVICE_FILENAME
: 백엔드 서비스 구성이 내보내지는 YAML 파일의 이름 및 경로입니다.
백엔드 서비스의
tlsSettings
속성을 백엔드 인증 구성 리소스로 업데이트합니다. 또한 백엔드 서비스에서 SNI 호스트 이름과 허용된 SAN을 구성하여 백엔드 인증서를 확인할 수 있습니다.cat << EOF >> BACKEND_SERVICE_FILENAME.yaml tlsSettings: authenticationConfig: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/global/backendAuthenticationConfigs/BACKEND_AUTH_CONFIG_NAME sni: examplepetstore.com subjectAltNames: - dnsName: examplepetstore.com - dnsName: api.examplepetstore.com EOF
위의 YAML 선언에서 SNI 및 SAN 값은 예시로만 제공됩니다. 설정과 관련된 실제 값으로 대체할 수 있습니다.
다음을 바꿉니다.
BACKEND_SERVICE_FILENAME
: 백엔드 서비스 구성이 내보내지는 YAML 파일의 이름입니다.PROJECT_ID
: Google Cloud 프로젝트의 IDBACKEND_AUTH_CONFIG_NAME
: 백엔드 인증 구성 리소스의 이름입니다.
파일에서 업데이트된 백엔드 서비스 구성을 가져오려면
gcloud beta compute backend-services import
명령어를 사용합니다.gcloud beta compute backend-services import BACKEND_SERVICE_NAME \ --source=BACKEND_SERVICE_FILENAME.yaml \ --global
다음을 바꿉니다.
BACKEND_SERVICE_NAME
: 백엔드 서비스 이름입니다.BACKEND_SERVICE_FILENAME
: 백엔드 서비스 구성 YAML 파일의 이름입니다.
백엔드 서버 인증서 만들기
이 섹션에서는 트러스트 구성의 일부인 중간 인증서로 서명된 서버(리프) 인증서를 만드는 추가 구성 옵션을 제공합니다. 이렇게 하면 서버 인증서에서 신뢰 앵커로 신뢰 체인을 설정할 수 있습니다.
중간 인증서가 포함된 신뢰 구성 리소스를 이미 만든 경우 다음 단계를 따르세요.
구성 파일을 만들어 서버 인증서의 CSR을 생성합니다.
다음 구성 파일 (
server.config
)에는 CSR에 포함할 X.509 확장자를 지정하는[extension_requirements]
섹션이 포함되어 있습니다. 서버 인증서 요구사항에 관한 자세한 내용은 인증서 요구사항을 참고하세요.cat > server.config << EOF [req] default_bits = 2048 req_extensions = extension_requirements distinguished_name = dn_requirements prompt = no [extension_requirements] basicConstraints = critical, CA:FALSE keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] DNS.1 = examplepetstore.com DNS.2 = api.examplepetstore.com [dn_requirements] countryName = US stateOrProvinceName = California localityName = San Francisco 0.organizationName = example organizationalUnitName = test commonName = examplepetstore.com emailAddress = test@examplepetstore.com EOF
서버 인증서의 CSR (
server.csr
)을 만듭니다.openssl req -new \ -sha256 -newkey rsa:2048 -nodes \ -config server.config \ -keyout server.key -out server.csr
CSR에 서명하여 X.509 서버 인증서 (
server.cert
)를 발급합니다. CSR은 중간 인증서로 서명됩니다.openssl x509 -req \ -CAkey int.key -CA int.cert \ -days 365 \ -extfile server.config \ -extensions extension_requirements \ -in server.csr -out server.cert
부하 분산기가 백엔드 서버에 연결되면 백엔드 서버는 인증서 (
server.cert
)를 제공하여 부하 분산기에 자신을 인증하고 백엔드 인증 프로세스를 완료합니다.
Apache 웹 서버의 추가 SSL 구성 옵션
이 선택사항 섹션에서는 이전에 만든 서버 인증서를 기반으로 Apache 서버에서 SSL 구성 옵션을 업데이트하는 프로세스를 안내합니다.-
서버 비공개 키 (
server.key
)와 서버 인증서 (server.cert
)를 Apache 웹 서버로 복사합니다.cat > server.key << EOF -----BEGIN PRIVATE KEY----- [...] -----END PRIVATE KEY----- EOF sudo cp ./server.key /etc/ssl/private/server.key
[...]
를 이전에 만든 PEM으로 인코딩된 서버 비공개 키로 바꿉니다.cat > server.cert << EOF -----BEGIN CERTIFICATE----- [...] -----END CERTIFICATE----- EOF sudo cp ./server.cert /etc/ssl/certs/server.cert
[...]
를 이전에 만든 PEM 인코딩 서버 인증서로 바꿉니다. -
Apache 웹 서버의 SSL 구성을 업데이트합니다.
지정된 SSL 인증서와 비공개 키를 사용하여 HTTPS 트래픽을 사용 설정하도록 Apache의 SSL 구성을 업데이트합니다.
sudo vi /etc/apache2/sites-available/default-ssl.conf ---- SSLCertificateFile /etc/ssl/certs/server.cert SSLCertificateKeyFile /etc/ssl/private/server.key ----
-
CA 인증서를 다시 해싱합니다.
sudo c_rehash /etc/ssl/certs/
-
Apache 웹 서버를 다시 시작하여 변경사항을 적용합니다.
sudo systemctl restart apache2.service