보안 비밀 키 암호화 사용 설정

이 문서에서는 Cassandra 데이터베이스에 저장된 개발자 앱 고객 보안 비밀 (클라이언트 사용자 인증 정보)의 암호화를 사용 설정하는 방법을 설명합니다.

개요

기존에는 비공개 클라우드용 Apigee Edge에서 키-값 맵(KVM) 데이터 및 OAuth 액세스 토큰에 대한 선택적 암호화를 제공했습니다.

다음 표에서는 Private Cloud용 Apigee의 저장 데이터 암호화 옵션을 설명합니다.

항목 암호화가 기본적으로 사용 설정됨 암호화(선택사항) 관련 문서
KVM 아니요 암호화된 KVM 정보를 참고하세요.
OAuth 액세스 토큰 아니요 보안 강화를 위한 토큰 해싱을 참고하세요.
개발자 앱 소비자 보안 비밀 아니요 사용 설정하려면 이 문서의 구성 단계를 따르세요.

클라이언트 사용자 인증 정보의 암호화를 사용 설정하려면 모든 메시지 프로세서 및 관리 서버 노드에서 다음 작업을 수행해야 합니다.

  • 키 암호화 키(KEK)를 저장할 키 저장소를 만듭니다. Apigee는 이 암호화된 키를 사용하여 데이터를 암호화하는 데 필요한 비밀 키를 암호화합니다.
  • 모든 관리 서버 및 메시지 프로세서 노드에서 구성 속성을 수정합니다.
  • 키 생성을 트리거할 개발자 앱을 만듭니다.
  • 노드를 다시 시작합니다.

이러한 작업은 이 문서에 설명되어 있습니다.

키 암호화 기능에 관해 알아야 할 사항

이 문서의 단계에서는 KEK 기능을 사용 설정하는 방법을 설명합니다. 이 기능을 사용하면 Apigee가 Cassandra 데이터베이스에 비활성 상태로 저장된 개발자 앱 소비자 보안 비밀을 암호화하는 데 사용되는 보안 비밀 키를 암호화할 수 있습니다.

기본적으로 데이터베이스의 기존 값은 변경되지 않고 일반 텍스트로 유지되며 이전과 같이 계속 작동합니다.

암호화되지 않은 항목에 쓰기 작업을 실행하면 작업이 저장될 때 암호화됩니다. 예를 들어 암호화되지 않은 토큰을 취소한 후 나중에 승인하면 새로 승인된 토큰이 암호화됩니다.

키 안전하게 보호하기

KEK가 저장된 키 저장소의 사본을 안전한 위치에 저장해야 합니다. 자체 보안 메커니즘을 사용하여 키 저장소 사본을 저장하는 것이 좋습니다. 이 문서의 안내에 설명된 대로 키 저장소는 로컬 구성 파일이 참조할 수 있는 각 메시지 프로세서 및 관리 서버 노드에 배치해야 합니다. 하지만 안전하게 보관하고 백업용으로 키 저장소의 사본을 다른 곳에 저장하는 것도 중요합니다.

키 암호화 사용 설정

소비자 보안 비밀 키 암호화하려면 다음 단계를 따르세요.

기본 요건

이 문서의 단계를 수행하려면 다음 요구사항을 충족해야 합니다.

  • 프라이빗 클라우드용 Apigee Edge 4.50.00.10 이상을 설치하거나 업그레이드해야 합니다.
  • 프라이빗 클라우드용 Apigee Edge 관리자여야 합니다.

1단계: 키 저장소 생성

키 암호화 키 (KEK)를 보관할 키 저장소를 만들려면 다음 단계를 따르세요.

  1. 다음 명령어를 실행하여 KEK를 암호화하는 데 사용할 키를 저장할 키 저장소를 생성합니다. 명령어를 다음과 같이 정확하게 입력합니다. 원하는 키 저장소 이름을 지정할 수 있습니다.
    keytool -genseckey -alias KEYSTORE_NAME -keyalg AES -keysize 256 \
    -keystore kekstore.p12 -storetype PKCS12

    메시지가 표시되면 비밀번호를 입력합니다. 이 비밀번호는 나중에 관리 서버와 메시지 프로세서를 구성할 때 사용합니다.

    이 명령어는 별칭이 KEYSTORE_NAME인 키가 포함된 kekstore.p12 키 저장소 파일을 생성합니다.

  2. (선택사항) 다음 명령어를 사용하여 파일이 올바르게 생성되었는지 확인합니다. 파일이 올바르면 명령어는 별칭이 KEYSTORE_NAME인 키를 반환합니다.
    keytool -list -keystore kekstore.p12

FIPS 지원 운영체제의 BCFKS 키 저장소 사용

FIPS 지원 운영체제에서 Edge for Private Cloud를 사용하는 경우 BCFKS 유형의 키 저장소를 생성해야 합니다. 이러한 키 저장소는 FIPS가 아닌 머신에서 생성한 후 FIPS를 준수하는 머신으로 전송할 수 있습니다. 키 저장소를 생성하려면 다음 명령어를 사용합니다.

keytool -genseckey -alias <KEYSTORE_NAME> -keyalg AES -keysize 256 \
-storetype BCFKS -keystore keystore.bcfks \
-providerpath /opt/apigee/edge-gateway/lib/thirdparty/bc-fips-1.0.2.4.jar \
-providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider \
-keypass keystorepass -storepass keystorepass

이 키 저장소를 생성하는 컴퓨터에서 Java 설정을 추가로 수행해야 할 수도 있습니다. 머신의 Java 보안 파일 (일반적으로 /usr/lib/jvm/jre/lib/security/java.security에 있음)을 수정해야 할 수 있습니다. 이 파일에서 다음 속성을 찾아 수정합니다.

# Don't rely on /dev/random for generating random numbers
securerandom.source=file:/dev/urandom
securerandom.strongAlgorithms=PKCS11:SunPKCS11-NSS-FIPS

2단계: 관리 서버 구성

다음으로 관리 서버를 구성합니다. 여러 노드에 관리 서버가 설치된 경우 각 노드에서 이 단계를 반복해야 합니다.

  1. 1단계에서 생성한 키 저장소 파일을 관리 서버 노드의 디렉터리(예: /opt/apigee/customer/application)에 복사합니다. 예를 들면 다음과 같습니다.
    cp certs/kekstore.p12 /opt/apigee/customer/application
  2. apigee 사용자가 파일을 읽을 수 있는지 확인합니다.
    chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
    chmod 400 /opt/apigee/customer/application/kekstore.p12
  3. /opt/apigee/customer/application/management-server.properties에 다음 속성을 추가합니다. 파일이 없으면 새로 만듭니다. 속성 파일 참조도 참고하세요.
    conf_keymanagement_kmscred.encryption.enabled=true
    
    # Fallback is true to ensure your existing plaintext credentials continue to work
    conf_keymanagement_kmscred.encryption.allowFallback=true
    
    conf_keymanagement_kmscred.encryption.keystore.path=PATH_TO_KEYSTORE_FILE
    conf_keymanagement_kmscred.encryption.kek.alias=KEYSTORE_NAME
    
    # These could alternately be set as environment variables. These variables should be
    # accessible to Apigee user during bootup of the Java process. If environment
    # variables are specified, you can skip the password configs below.
    # KMSCRED_ENCRYPTION_KEYSTORE_PASS=
    # KMSCRED_ENCRYPTION_KEK_PASS=
    See also Using environment variables for configuration properties.
    
    conf_keymanagement_kmscred.encryption.keystore.pass=KEYSTORE_PASSWORD
    conf_keymanagement_kmscred.encryption.kek.pass=KEK_PASSWORD

    KEK_PASSWORD는 키 저장소를 생성하는 데 사용된 도구에 따라 KEYSTORE_PASSWORD와 동일할 수도 있습니다.

  4. 다음 명령어를 사용하여 관리 서버를 다시 시작합니다.
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server wait_for_ready

    wait_for_ready 명령어는 관리 서버가 준비되면 다음 메시지를 반환합니다.

    Checking if management-server is up: management-server is up.
  5. 여러 노드에 관리 서버가 설치된 경우 각 관리 서버 노드에서 위의 1~4단계를 반복합니다.

3단계: 개발자 앱 만들기

이제 관리 서버가 업데이트되었으므로 클라이언트 사용자 인증 정보 데이터를 암호화하는 데 사용되는 키 생성을 트리거하는 개발자 앱을 만들어야 합니다.

  1. 데이터 암호화 키 (KEK) 생성을 트리거하는 개발자 앱을 만듭니다. 단계는 앱 등록을 참고하세요.
  2. 원하는 경우 개발자 앱을 삭제합니다. 암호화 키가 생성된 후에는 이를 보관할 필요가 없습니다.

4단계: 메시지 프로세서 구성

메시지 프로세서에서 암호화가 사용 설정될 때까지 런타임 요청은 암호화된 사용자 인증 정보를 처리할 수 없습니다.

  1. 1단계에서 생성한 키 저장소 파일을 메시지 프로세서 노드의 디렉터리(예: /opt/apigee/customer/application)에 복사합니다. 예를 들면 다음과 같습니다.
    cp certs/kekstore.p12 /opt/apigee/customer/application
  2. apigee 사용자가 파일을 읽을 수 있는지 확인합니다.
    chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
  3. /opt/apigee/customer/application/message-processor.properties에 다음 속성을 추가합니다. 파일이 없으면 만듭니다. 속성 파일 참조도 확인하세요.
    conf_keymanagement_kmscred.encryption.enabled=true
    
    # Fallback is true to ensure your existing plaintext credentials continue to work
    conf_keymanagement_kmscred.encryption.allowFallback=true
    
    conf_keymanagement_kmscred.encryption.keystore.path=PATH_TO_KEYSTORE_FILE
    conf_keymanagement_kmscred.encryption.kek.alias=KEYSTORE_NAME
    
    # These could alternately be set as environment variables. These variables should be
    # accessible to Apigee user during bootup of the Java process. If environment
    # variables are specified, you can skip the password configs below.
    # KMSCRED_ENCRYPTION_KEYSTORE_PASS=
    # KMSCRED_ENCRYPTION_KEK_PASS=
    See also Using environment variables for configuration properties.
    
    
    conf_keymanagement_kmscred.encryption.keystore.pass=KEYSTORE_PASSWORD
    conf_keymanagement_kmscred.encryption.kek.pass=KEK_PASSWORD

    키 저장소를 생성하는 데 사용된 도구에 따라 KEK_PASSWORDKEYSTORE_PASSWORD와 동일할 수 있습니다.

  4. 다음 명령어를 사용하여 메시지 프로세서를 다시 시작합니다.
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor wait_for_ready

    메시지 프로세서가 메시지를 처리할 준비가 되면 wait_for_ready 명령어는 다음 메시지를 반환합니다.

    Checking if message-processor is up: message-processor is up.
  5. 메시지 프로세서가 여러 노드에 설치된 경우 각 메시지 프로세서 노드에서 1~4단계를 반복합니다.

요약

지금부터 만드는 모든 개발자 앱은 Cassandra 데이터베이스에 사용자 인증 정보 보안 비밀이 암호화됩니다.

구성 속성에 환경 변수 사용

또는 환경 변수를 사용하여 다음과 같은 메시지 프로세서 및 관리 서버 구성 속성을 설정할 수 있습니다. 설정된 경우 환경 변수가 메시지 프로세서 또는 관리 서버 구성 파일에 설정된 속성을 재정의합니다.

conf_keymanagement_kmscred.encryption.keystore.pass=
conf_keymanagement_kmscred.encryption.kek.pass=

해당하는 환경 변수는 다음과 같습니다.

export KMSCRED_ENCRYPTION_KEYSTORE_PASS=KEYSTORE_PASSWORD
export KMSCRED_ENCRYPTION_KEK_PASS=KEK_PASSWORD

이러한 환경 변수를 설정하면 메시지 프로세서 및 관리 서버 노드의 구성 파일에서 이러한 구성 속성을 생략할 수 있습니다. 무시되기 때문입니다.

conf_keymanagement_kmscred.encryption.keystore.pass
conf_keymanagement_kmscred.encryption.kek.pass

속성 파일 참조

이 섹션에서는 이 문서 앞부분에서 설명한 대로 모든 메시지 프로세서 및 관리 서버 노드에서 설정해야 하는 구성 속성을 설명합니다.

속성 기본값 설명
conf_keymanagement_kmscred.encryption.enabled false 키 암호화를 사용 설정하려면 true이어야 합니다.
conf_keymanagement_kmscred.encryption.allowFallback false 기존 일반 텍스트 사용자 인증 정보가 계속 작동하도록 allowFallback을 true로 설정합니다.
conf_keymanagement_kmscred.encryption.keystore.path 해당 사항 없음 메시지 프로세서 또는 관리 서버 노드의 KEK 키 저장소 경로를 제공합니다. 2단계: 관리 서버 구성3단계: 메시지 프로세서 구성을 참고하세요.
conf_keymanagement_kmscred.encryption.kek.alias 해당 사항 없음 키 저장소에 KEK가 저장되는 별칭입니다.
conf_keymanagement_kmscred.encryption.keystore.pass 해당 사항 없음 환경 변수를 사용하여 이러한 속성을 설정하는 경우 선택사항입니다. 구성 속성에 환경 변수 사용도 참고하세요.
conf_keymanagement_kmscred.encryption.kek.pass 해당 사항 없음 환경 변수를 사용하여 이러한 속성을 설정하는 경우 선택사항입니다. 구성 속성에 환경 변수 사용도 참조하세요.