이 문서에서는 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)를 보관할 키 저장소를 만들려면 다음 단계를 따르세요.
- 다음 명령어를 실행하여 KEK를 암호화하는 데 사용할 키를 저장할 키 저장소를 생성합니다. 명령어를 다음과 같이 정확하게 입력합니다. 원하는 키 저장소 이름을 지정할 수 있습니다.
keytool -genseckey -alias KEYSTORE_NAME -keyalg AES -keysize 256 \ -keystore kekstore.p12 -storetype PKCS12
메시지가 표시되면 비밀번호를 입력합니다. 이 비밀번호는 나중에 관리 서버와 메시지 프로세서를 구성할 때 사용합니다.
이 명령어는 별칭이 KEYSTORE_NAME인 키가 포함된 kekstore.p12 키 저장소 파일을 생성합니다.
- (선택사항) 다음 명령어를 사용하여 파일이 올바르게 생성되었는지 확인합니다. 파일이 올바르면 명령어는 별칭이 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단계에서 생성한 키 저장소 파일을 관리 서버 노드의 디렉터리(예:
/opt/apigee/customer/application
)에 복사합니다. 예를 들면 다음과 같습니다.cp certs/kekstore.p12 /opt/apigee/customer/application
apigee
사용자가 파일을 읽을 수 있는지 확인합니다.chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
chmod 400 /opt/apigee/customer/application/kekstore.p12
/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
와 동일할 수도 있습니다.- 다음 명령어를 사용하여 관리 서버를 다시 시작합니다.
/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.
- 여러 노드에 관리 서버가 설치된 경우 각 관리 서버 노드에서 위의 1~4단계를 반복합니다.
3단계: 개발자 앱 만들기
이제 관리 서버가 업데이트되었으므로 클라이언트 사용자 인증 정보 데이터를 암호화하는 데 사용되는 키 생성을 트리거하는 개발자 앱을 만들어야 합니다.
- 데이터 암호화 키 (KEK) 생성을 트리거하는 개발자 앱을 만듭니다. 단계는 앱 등록을 참고하세요.
- 원하는 경우 개발자 앱을 삭제합니다. 암호화 키가 생성된 후에는 이를 보관할 필요가 없습니다.
4단계: 메시지 프로세서 구성
메시지 프로세서에서 암호화가 사용 설정될 때까지 런타임 요청은 암호화된 사용자 인증 정보를 처리할 수 없습니다.
- 1단계에서 생성한 키 저장소 파일을 메시지 프로세서 노드의 디렉터리(예:
/opt/apigee/customer/application
)에 복사합니다. 예를 들면 다음과 같습니다.cp certs/kekstore.p12 /opt/apigee/customer/application
apigee
사용자가 파일을 읽을 수 있는지 확인합니다.chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
/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_PASSWORD
가KEYSTORE_PASSWORD
와 동일할 수 있습니다.- 다음 명령어를 사용하여 메시지 프로세서를 다시 시작합니다.
/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.
- 메시지 프로세서가 여러 노드에 설치된 경우 각 메시지 프로세서 노드에서 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
|
해당 사항 없음 | 환경 변수를 사용하여 이러한 속성을 설정하는 경우 선택사항입니다. 구성 속성에 환경 변수 사용도 참조하세요. |