API BaaS용 TLS 구성

Private Cloud용 Edge v. 4.16.09

TLS (전송 계층 보안, 이전 버전은 SSL)는 API 환경 전반에서 안전하고 암호화된 메시지를 보장하기 위한 표준 보안 기술입니다. API BaaS 포털 및 API BaaS 스택 노드에서 TLS를 구성할 수 있습니다.

다음 이미지는 단일 BaaS 포털 노드와 3개의 API BaaS 스택 노드가 있는 API BaaS의 일반적인 배포 다이어그램을 보여줍니다.

개발자는 브라우저를 사용하여 포털에 요청합니다. 기본적으로 요청은 포털 노드의 포트 9000에서 HTTP 프로토콜을 사용합니다.

이 배포에는 포털과 스택 노드 사이에 부하 분산기가 포함됩니다. 이 구성에서 포털이 부하 분산기에 HTTP 요청을 보내면 부하 분산기가 요청을 스택 노드 중 하나로 전달합니다. 프로덕션 시스템에 권장되는 배포 환경입니다.

TLS 구성 옵션

API BaaS에 TLS를 구성할 때는 다음과 같은 여러 옵션이 있습니다.

  • 포털과 스택 노드의 부하 분산기에서 TLS를 구성합니다.

    이 구성에서 개발자는 HTTPS 프로토콜을 사용하여 포털에 액세스하고, 브라우저에서 실행되는 포털은 HTTPS를 사용하여 부하 분산기를 통해 스택 노드에 요청을 보냅니다. 부하 분산기는 HTTP를 사용하여 스택 노드에 액세스합니다.
  • 포털, 부하 분산기, 스택 노드에서 TLS 구성

    보안을 강화하려면 TLS를 사용하여 스택 노드에 액세스하도록 부하 분산기를 구성합니다.
  • 포털 및 단일 스택 노드에서 TLS 구성

    테스트 또는 개발 환경과 같은 소규모 환경에서는 스택 노드가 하나만 있을 수 있으므로 부하 분산기를 포함할 필요가 없습니다. 이 구성에서는 포털과 스택 노드 모두에서 TLS를 구성합니다.
  • 포털의 부하 분산기에서 TLS 구성

    위에 표시되지 않은 옵션 중 하나는 포털 노드 앞에 부하 분산기를 사용하는 것입니다. 이 구성에서 부하 분산기에 TLS를 구성할 수 있으며 부하 분산기와 포털 간의 연결에 대해 선택적으로 TLS를 구성할 수 있습니다.

TLS 포트가 열려 있는지 확인하세요.

아래 절차에서는 기본 포털 포트 9000 및 스택 노드 8080에서 TLS를 구성합니다. 하지만 원하는 경우 이 포트를 변경할 수 있습니다.

사용하는 포트에 관계없이 노드에서 포트가 열려 있는지 확인해야 합니다. 예를 들어 다음 명령어를 사용하여 포트 8443을 열 수 있습니다.

$ iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8443 -j ACCEPT --verbose

API BaaS 스택에서 TLS 구성

기본적으로 API BaaS 스택에는 TLS가 사용 중지되어 있습니다. 그런 다음 스택 노드의 IP 주소 또는 DNS 이름과 포트 8080을 사용하여 HTTP를 통해 BaaS API에 액세스합니다. 예를 들면 다음과 같습니다.

http://stack_IP:8080

또는 다음과 같은 형식으로 BaaS API에 액세스할 수 있도록 TLS 액세스를 구성할 수 있습니다.

https://stack_IP:8080

이 예에서는 포트 8080을 사용하도록 TLS 액세스를 구성합니다. 하지만 포트 8080은 필요하지 않습니다. 다른 포트를 사용하도록 스택을 구성할 수 있습니다. 유일한 요구사항은 방화벽에서 지정된 포트를 통한 트래픽을 허용해야 한다는 점입니다.

스택은 단일 포트에서 하나의 요청 유형 (HTTP 또는 HTTPS)만 지원할 수 있습니다. 따라서 포트 8080에서 HTTPS 액세스를 구성하면 HTTP를 사용하여 포트 8080에 액세스할 수 없습니다. HTTPS와 함께 포트 8443을 사용하도록 스택을 구성하면 스택이 더 이상 포트 8080을 수신 대기하지 않습니다.

다음 절차에 따라 스택에 대한 TLS 액세스를 구성합니다.

  1. TLS 인증서와 비공개 키가 포함된 키 저장소 JKS 파일을 생성합니다. 자세한 내용은 온프레미스 Edge용 TLS/SSL 구성을 참고하세요.
    참고: 키 저장소의 비밀번호와 키의 비밀번호가 동일한지 확인합니다.
  2. 키 저장소 JKS 파일을 스택 노드의 디렉터리(예: /opt/apigee/customer/application)에 복사합니다. 디렉터리에 'Apigee' 사용자가 액세스할 수 있어야 합니다.
  3. JKS 파일의 소유권을 'apigee' 사용자로 변경합니다.
    > chown apigee:apigee /opt/apigee/customer/application/keystore.jks

    여기서 keystore.jks는 키 저장소 파일의 이름입니다.
  4. /opt/apigee/customer/application/usergrid.properties 파일을 수정하여 JKS 파일의 경로, 키 저장소 및 키의 비밀번호를 비롯한 다음 속성을 설정합니다. 이 파일이 없는 경우 다음과 같이 만듭니다.
    tomcat-server_scheme=https
    tomcat-server_secure=true
    tomcat-server_ssl.enabled=true
    tomcat-server_keystore.type=JKS
    tomcat-server_keystore.file=/opt/apigee/customer/application/keystore.jks
    tomcat-server_keystore.password=password
    tomcat-server_keyalias=keystore_alias
    tomcat-server_clientauth.enabled=false
    tomcat-server_ssl.protocols=TLSv1,TLSv1.1,TLSv1.2
    # 기본적으로 TLS 액세스는 포트 8080을 사용합니다.
    # 이 속성을 사용하여 다른 포트를 지정합니다.
    # tomcat-server_port=8080


    경고: 비밀번호 값은 일반 텍스트여야 합니다. 따라서 usergrid.properties를 무단 액세스로부터 보호해야 합니다.

    tomcat-server_keyalias 속성을 사용하여 키 저장소 별칭을 지정합니다. 키를 만들 때 키 별칭을 설정합니다. 예를 들어 keytool 명령어에 -alias 옵션을 사용하여 설정할 수 있습니다.

    tomcat-server_ssl.protocols를 사용하여 스택에서 지원하는 TLS 프로토콜을 설정합니다. Java 8에서 지원하는 프로토콜 목록은 http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#jssename을 참고하세요.
  5. 스택 노드를 구성합니다.
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid configure
  6. 변경사항을 Tomcat에 배포합니다.
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid deploy
  7. BaaS 스택을 다시 시작합니다.
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid restart
  8. HTTPS를 사용하여 스택 노드에서 다음 cURL 명령어를 실행하여 TLS가 작동하는지 확인합니다.
    > curl -k https://localhost:8080/status -v

    TLS가 올바르게 구성된 경우 상태 정보가 포함된 응답이 표시됩니다.

    8080 이외의 포트를 통해 TLS 액세스를 구성한 경우 올바른 포트를 사용하도록 위의 명령어를 수정하세요.
  9. 모든 스택 노드에서 반복합니다.
  10. 스택 노드 앞에 부하 분산기가 있는 경우 HTTPS를 통해 스택 노드에 요청을 전달하도록 부하 분산기를 구성합니다. 자세한 내용은 사용 중인 부하 분산기의 문서를 참고하세요.

    포털이 스택에 직접 요청하는 경우 다음 섹션에 설명된 대로 HTTPS를 통해 스택에 액세스하도록 포털을 구성합니다.
  11. '스택 또는 포털에서 TLS용 API BaaS 스택 노드 구성'의 아래 절차에 따라 사용자 응답을 생성할 때 스택 노드에 올바른 TLS URL이 있는지 확인합니다.

Stack over TLS에 액세스하도록 포털 구성

브라우저에서 실행되는 BaaS 포털은 BaaS 스택에 API를 호출하여 작동합니다. TLS를 사용하도록 BaaS 스택을 구성하는 경우 HTTPS를 통해 이러한 호출을 실행하도록 포털도 구성해야 합니다.

API BaaS 설치는 일반적으로 다음 중 하나로 구성됩니다.

  • 포털 노드와 스택 노드 간에 부하 분산기 사용

    HTTPS를 통해 스택 노드에 요청을 보내도록 부하 분산기를 구성합니다. 자세한 내용은 부하 분산기 문서를 참조하세요.

    이 구성에서 포털은 부하 분산기를 구성하는 방법에 따라 HTTP 또는 HTTPS를 통해 부하 분산기에 액세스할 수 있습니다. 부하 분산기에서 TLS를 사용하는 경우 아래 절차에 따라 포털을 구성하여 HTTPS의 부하 분산기에 요청을 전송합니다.
  • 포털이 스택에 직접 요청하도록 설정

    아래 설명된 대로 HTTPS를 통해 스택에 액세스하도록 포털을 구성합니다.

다음 절차에 따라 HTTPS를 통해 API를 호출하도록 API BaaS 포털을 구성합니다.

  1. 위에 설명된 대로 BaaS 스택에서 TLS 액세스를 구성하거나 부하 분산기 문서에 설명된 대로 스택 노드의 부하 분산기에서 TLS 액세스를 구성합니다.
  2. /opt/apigee/customer/application/portal.properties를 수정하여 다음 속성을 설정합니다. 이 파일이 없는 경우 다음과 같이 만듭니다.
    baas.portal.config.overrideUrl=https://stackIP:port

    이 속성의 값으로 단일 노드 설치의 경우 API 스택 노드의 IP 주소 또는 DNS 이름과 포트, API BaaS 스택 노드 앞에 부하 분산기가 있는 경우 부하 분산기의 IP 주소 또는 DNS 이름과 포트를 지정합니다.
  3. 포털 노드를 구성합니다.
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  4. 다음 명령어를 사용하여 포털을 다시 시작합니다.
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart
  5. 위의 스택에 대한 TLS 액세스를 구성할 때 자체 서명 인증서를 사용한 경우 브라우저가 포털에서 스택으로의 요청을 허용하지 않을 수 있습니다. 브라우저에 스택에 대한 HTTPS 액세스가 허용되지 않는다는 오류가 표시되면 브라우저에서 다음 URL을 요청하고 액세스를 허용하도록 보안 예외를 추가합니다.
    https://stackIP:port/status

    API 스택 노드 또는 로드 밸런서의 IP 주소 또는 DNS 이름과 포트를 지정합니다.

API BaaS 포털에서 TLS 구성

기본적으로 사용자는 포털 서버의 포트 9000을 통해 암호화되지 않은 HTTP 요청을 실행하여 포털에 액세스합니다. 포털을 구성하여 HTTPS를 사용하여 포털과 포털 간에 전송되는 데이터를 암호화할 수 있습니다.

기본적으로 포털 노드의 IP 주소 또는 DNS 이름과 포트 9000을 사용하여 HTTP를 통해 포털에 액세스합니다. 예를 들면 다음과 같습니다.

http://portal_IP:9000

또는 다음과 같은 형식으로 포털에 액세스할 수 있도록 포털에 대한 TLS 액세스를 구성할 수 있습니다.

https://portal_IP:9443

이 예에서는 포트 9443을 사용하도록 TLS 액세스를 구성합니다. 하지만 포트 9443은 필수가 아닙니다. 다른 포트를 사용하도록 포털을 구성할 수 있습니다.

포털은 단일 포트에서 한 가지 유형의 요청 (HTTP 또는 HTTPS)만 지원할 수 있습니다. 따라서 포트 9000에서 HTTPS 액세스를 구성하면 HTTP를 사용하여 포트 9000에 액세스할 수 없습니다. HTTPS와 함께 포트 9443을 사용하도록 포털을 구성하면 포털이 더 이상 포트 9000에서 수신 대기하지 않습니다.

포털에 TLS를 구성하려면 다음 단계를 따르세요.

  1. PEM 형식으로 키 파일 및 인증서 파일을 만듭니다.
    참고: 키 또는 인증서에 비밀번호/암호가 없어야 합니다.
  2. PEM 파일을 포털 노드의 디렉터리(예: /opt/apigee/customer/application)에 복사합니다. 디렉터리에 'Apigee' 사용자가 액세스할 수 있어야 합니다.
  3. PEM 파일의 소유권을 'apigee' 사용자로 변경합니다.
    > chown apigee:apigee /opt/apigee/customer/application/*.PEM
  4. /opt/apigee/customer/application/portal.properties 파일을 수정하여 다음 속성을 설정합니다. 이 파일이 없으면 만드세요.
    baas.portal.ssl=on
    baas.portal.ssl.certificate=/opt/apigee/customer/application/defaultcert.pem
    baas.portal.ssl.key=/opt/apigee/customer/application/defaultkey.pem
    baas.portal.ssl.protocols=TLSv1 TLSv1.1 TLSv1.2
    # 기본적으로 TLS 액세스는 포트 9000을 사용합니다.
    # 이 속성을 사용하여 다른 포트를 지정합니다.
    # baas.portal.listen=9000


    baas.portal.ssl.protocols를 사용하여 포털에서 지원하는 TLS 프로토콜을 설정하세요. 지원되는 프로토콜 목록은 Nginx에서 정의한 SSL 프로토콜 이름 목록(http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_protocols)을 참고하세요.
  5. 포털 노드를 구성합니다.
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configuration
  6. 구성을 배포합니다.
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal deploy
  7. 포털을 다시 시작합니다.
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart
  8. 스택 노드에 포털의 올바른 TLS URL이 있는지 확인하려면 '스택 또는 포털에서 TLS에 대한 API BaaS 스택 노드 구성' 아래의 절차를 따르세요.

스택 또는 포털에서 TLS용 API BaaS 노드 구성

스택 또는 포털 노드 앞에 부하 분산기를 포함하거나 포털 또는 스택 노드에서 직접 TLS를 사용 설정하는 경우 스택 및 포털에 액세스할 수 있도록 올바른 URL로 노드를 구성해야 합니다. 예를 들어 스택 노드에는 다음과 같은 경우에 이 정보가 필요합니다.

  • BaaS API 요청의 응답에 URL 포함
  • 비밀번호를 재설정하거나 기타 알림을 보낼 때 이메일 템플릿에 링크를 추가합니다.
  • 사용자를 특정 포털 페이지로 리디렉션

스택 노드 앞에 부하 분산기를 사용하거나 스택 노드에서 TLS를 구성하는 경우 /opt/apigee/customer/application/usergrid.properties에서 다음 속성을 설정하세요.

usergrid-deployment_swagger.basepath=http://localhost:8080
usergrid-deployment_usergrid.organization.activation.url=http://localhost:8080/management/organizations/%s/activate
usergrid-deployment_usergrid.admin.activation.url=http://localhost:8080/management/users/%s/activate
usergrid-deployment_usergrid.admin.resetpw.url=http://localhost:8080/management/users/%s/resetpw
usergrid-deployment_usergrid.admin.confirmation.url=http://localhost:8080/management/users/%s/confirm
usergrid-deployment_usergrid.user.activation.url=http://localhost:8080/%s/%s/users/%s/activate
usergrid-deployment_usergrid.user.confirmation.url=http://localhost:8080/%s/%s/users/%s/confirm
usergrid-deployment_usergrid.user.resetpw.url=http://localhost:8080/%s/%s/users/%s/resetpw

http://localhost:8080을 부하 분산기의 URL로 바꿉니다. 부하 분산기가 TLS를 사용하도록 구성된 경우 HTTPS 프로토콜을 사용합니다. HTTP의 포트 80 또는 HTTPS의 포트 443 이외의 비표준 포트를 사용하는 경우에만 포트를 포함하면 됩니다.

스택 노드 앞에 로드 밸런서를 사용하는 경우 /opt/apigee/customer/application/portal.properties 에서 다음 속성도 설정해야 합니다.

baas.portal.config.overrideUrl=http://localhost:8080

http://localhost:8080을 스택의 로드 밸런서의 URL로 바꿉니다.

포털 노드 앞에 부하 분산기를 사용하거나 스택 노드에서 TLS를 구성하는 경우 usergrid.properties에서 다음 속성을 설정합니다.

usergrid-deployment_usergrid.view.management.organizations.organization.activate=http://localhost:9000
usergrid-deployment_usergrid.view.management.organizations.organization.confirm=http://localhost:9000
usergrid-deployment_usergrid.view.management.users.user.activate=http://localhost:9000
usergrid-deployment_usergrid.view.management.users.user.confirm=http://localhost:9000

http://localhost:9000을 부하 분산기의 URL로 바꿉니다. 부하 분산기가 TLS를 사용하도록 구성된 경우 HTTPS 프로토콜을 사용하세요. 비표준 포트를 사용하는 경우에만 포트를 포함하면 됩니다. 즉, HTTP의 경우 포트 80, HTTPS의 경우 포트 443이 아닙니다.

usergrid.properties를 수정한 후:

  1. 스택 노드를 구성합니다.
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid configuration
  2. 변경사항을 Tomcat에 배포합니다.
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid deploy
  3. BaaS 스택을 다시 시작합니다.
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid restart
  4. portal.properties를 수정한 경우 포털 노드를 구성합니다.
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  5. 변경사항을 배포합니다.
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal deploy
  6. BaaS 포털을 다시 시작합니다.
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart