IBM Db2 원시 암호화를 위해 Hyper Protect Crypto Services PKCS #11 사용
IBM Db2® 기본 암호화는 키 데이터베이스 파일 및 데이터베이스 백업 이미지를 외부 스토리지 매체에 저장하는 중에도 이들을 보호합니다. 데이터베이스 시스템은 권한 있는 사용자 및 애플리케이션이 사용할 때 데이터를 자동으로 암호화하고 복호화합니다. 일반적으로 데이터베이스 사용자는 기본 암호화를 알아야 할 필요가 없고, 데이터베이스 클라이언트 애플리케이션은 특별히 조정될 필요가 없습니다.
Db2 기본 암호화는 다음과 같이 두 개의 계층화된 키 계층 구조를 사용합니다. 데이터는 데이터 암호화 키(DEK)로 암호화됩니다. DEK는 마스터 키로 암호화되고 데이터베이스 또는 백업 이미지와 함께 암호화된 양식으로 저장됩니다. Db2는 암호화된 데이터베이스 및 암호화된 백업마다 고유한 DEK를 생성합니다.
마스터 키는 DEK를 암호화하는 데 사용됩니다. 암호화된 각 데이터베이스는 한 번에 하나의 마스터 키와 연관됩니다.
Db2 기본 암호화를 계획할 때 중요한 질문 중 하나는 마스터 키와 보안을 유지하는 방법입니다.
목표
이 튜토리얼에서는 IBM Cloud® Hyper Protect Crypto Services에 마스터 키를 보관하여 완전하고 독점적으로 마스터 키를 계속 제어할 수 있는 방법을 보여줍니다. 이를 위해 Hyper Protect Crypto Services의 PKCS #11 통합 기능을 사용해야 합니다.
이 튜토리얼을 통해 다음 그림에 표시된 설정을 구현합니다.
이 설정에서 Db2는 Hyper Protect Crypto Services PKCS #11 라이브러리에서 마스터 키를 관리하기 위한 오퍼레이션을 호출합니다. Hyper Protect Crypto Services PKCS #11 라이브러리는 마스터 키를 저장하고 관리하기 위해 최상의 기술을 제공하는 Hyper Protect Crypto Services 인스턴스와 통합합니다.
시작하기 전에
이 튜토리얼을 완료하려면 다음 전제조건을 충족해야 합니다.
태스크 플로우
이 솔루션을 완료하려면 다음 단계를 수행하십시오.
Hyper Protect Crypto Services 인스턴스 초기화
-
이 튜토리얼의 경우 먼저 Hyper Protect Crypto Services 인스턴스를 초기화해야 합니다.
Hyper Protect Crypto Services 인스턴스의 ID 및 EP11 엔드포인트 주소를 적어 놓으십시오. 후속 단계를 위해 이 정보가 필요합니다.
-
사용자 정의 IAM 역할
Discover HPCS을(를) 작성하십시오. 이 역할은 PKCS #11 라이브러리에 필요한 Hyper Protect Crypto Services 인스턴스를 발견하는 데 필요한 매우 제한된 권한을 제공합니다. 이 역할에는 키 또는 EP11 키 저장소를 사용, 작성 또는 관리하는 권한이 없습니다.- UI에서 관리 > 액세스 (IAM) 로 이동하여 역할을 선택한 후 작성을 클릭하십시오.
- 역할의 이름
Discover HPCS을(를) 입력하십시오. - 역할에 대한 ID를 입력하십시오. 이 ID는 API를 사용하여 액세스를 지정할 때 사용되는 CRN에서 사용됩니다. 역할 ID에는 대문자로 시작되는 영숫자만 사용해야 합니다(예:
DiscoverHPCS). - 선택사항: 액세스를 지정하는 사용자가 역할 지정을 통해 사용자에게 제공하는 액세스 레벨을 알 수 있도록 간결하고 유용한 설명을 입력하십시오. 이 설명은 사용자가 서비스에 대한 액세스를 지정할 때 UI에도 표시됩니다.
- 서비스 목록에서 Hyper Protect Crypto Services를 선택하십시오.
hs-crypto.discovery.listservers조치에 대해 추가를 선택한 다음, 작성을 클릭하십시오.
-
PKCS #11 API 사용자 유형 설정의 지시사항에 따라 일반 사용자 및 익명 사용자에 대한 서비스 ID 및 API 키를 설정하십시오.
지시사항에 언급된 SO 사용자 유형을 설정하지 마십시오. 또한 지시사항과는 대조적으로 익명 사용자 서비스 ID에
Key operator사용자 정의 역할을 지정하지 말고 대신Discover HPCS사용자 정의 역할을 지정하십시오.이 설정을 사용하면 익명 사용자는 Hyper Protect Crypto Services 인스턴스에 대해 매우 제한된 권한만 가지며 키 또는 EP11 키 저장소를 사용, 작성 또는 관리할 수 없습니다.
-
일반 사용자 및 익명 사용자에 대한 API 키 값을 후속 단계에 저장하십시오.
-
지시사항에 따라 개인용 EP11 키 저장소를 작성하고 후속 단계를 위해 키 저장소 ID를 기록해 두십시오.
Hyper Protect Crypto Services PKCS #11 라이브러리 설정
1. Db2 Community Edition 컨테이너 실행
-
다음 명령을 사용하여 Db2 Community Edition 컨테이너를 실행하십시오.
docker run -itd --name mydb --privileged=true -p 50000:50000 -e LICENSE=accept -e DB2INST1_PASSWORD=password -e DBNAME=testdb ibmcom/db2 -
호스트 시스템의 명령행에서 다음 명령을 실행하십시오.
docker exec -it --user root --workdir / mydb bash
이 쉘은 후속 단계를 위해 root로 명령을 실행하는 데 사용됩니다.
2. Hyper Protect Crypto Services PKCS #11 구성 파일 작성
이제 Hyper Protect Crypto Services PKCS #11 기능에 대한 구성 파일을 작성하십시오. 구성 파일의 이름은 grep11client.yaml입니다.
다음 파일 템플리트를 조정하고 파일의 이름을 grep11client.yaml로 지정하십시오.
<instance_ID>을(를) Hyper Protect Crypto Services 인스턴스의 ID로 대체하십시오.<EP11_endpoint_URL>및<EP11_endpoint_port_number>을(를) Hyper Protect Crypto Services 인스턴스의 EP11 엔드포인트 주소에 대한 각 매개변수로 대체하십시오.<private_keystore_id>을(를) 이전에 작성한 개인용 키 저장소의 ID로 바꾸십시오.<anonymous_user_api_key>을(를) 익명 사용자의 각 API 키로 바꾸십시오.
iamcredentialtemplate: &defaultiamcredential
enabled: true
endpoint: "https://iam.cloud.ibm.com"
# The Universally Unique IDentifier (UUID) of your Hyper Protect Crypto Services instance.
instance: "<instance_ID>"
tokens:
0:
grep11connection:
# The EP11 endpoint address starting from 'ep11'. For example: "<instance_ID>.ep11.us-south.hs-crypto.appdomain.cloud"
address: "<EP11_endpoint_URL>"
port: "<EP11_endpoint_port_number>" # The EP11 endpoint port number
tls:
enabled: true # EP11 requires TLS connection.
mutual: false
storage:
remotestore:
enabled: true
users:
# The Security Officer (SO) user
0: # The index of the Security Officer (SO) user MUST be 0.
# The name for the Security Officer (SO) user. For example: "Administrator":
name: "Administrator"
iamauth: *defaultiamcredential
# The normal user
1: # The index of the normal user MUST be 1.
# The name for the normal user. For example: "Normal user":
name: "Normal user"
# The 128-bit UUID of the private keystore which you created previously
tokenspaceID: "<private_keystore_id>"
iamauth: *defaultiamcredential
# The anonymous user
2: # The index of the anonymous user MUST be 2.
# The name for the anonymous user. For example: "Anonymous":
name: "Anonymous"
# The public keystore will not be used with this setup.
# Specify an arbitrary 128-bit UUID below, e.g.:
tokenspaceID: "12345678-1234-1234-1234-1234567890AB"
iamauth:
<<: *defaultiamcredential
# Provide the API key for the Anonymous user.
apikey: "<anonymous_user_api_key>"
logging:
# Set the logging level.
# The supported levels, in an increasing order of verboseness: 'panic', 'fatal', 'error', 'warning'/'warn', 'info', 'debug', 'trace'. The Default value is 'warning'.
loglevel: "info"
logpath: "/tmp/grep11client.log" # The full path of your logging file.
3. Hyper Protect Crypto Services PKCS #11 라이브러리 설치
-
이전에 작성된 구성 파일
grep11client.yaml및 PKCS #11 라이브러리pkcs11-grep11-<platform>.so.<version>을(를) Db2 컨테이너에 복사하십시오. -
root로 다음 명령을 실행하여 Db2 설정에 Hyper Protect Crypto Services PKCS #11 라이브러리를 설치하십시오.mkdir /etc/ep11client chmod a+rx /etc/ep11client/ cp grep11client.yaml /etc/ep11client/grep11client.yaml chmod a+r /etc/ep11client/grep11client.yaml mkdir -p /pkcs11 cp pkcs11-grep11-<platform>.so.<version> /pkcs11/pkcs11-grep11.so chmod -R a+rwx /pkcs11 touch /tmp/grep11client.log chmod a+rw /tmp/grep11client.log
Db2 기본 암호화 설정
이제 Db2 기본 암호화를 설정하십시오. 이를 수행하려면 모든 데이터베이스 관리자 권한이 있는지 확인해야 합니다.
-
다음 컨텐츠를 사용하여 이 파일
/pkcs11/keystore.conf을(를) 작성하십시오.VERSION=1 PRODUCT_NAME=Other ALLOW_KEY_INSERT_WITHOUT_KEYSTORE_BACKUP=true LIBRARY=/pkcs11/pkcs11-grep11.so SLOT_ID=0 NEW_OBJECT_TYPE=PRIVATE KEYSTORE_STASH=/pkcs11/pkcs11_pw.sth -
다음 명령을
root로 실행하여/pkcs11/keystore.conf파일의 소유권 및 권한을 업데이트하십시오.chown -R db2inst1:db2iadm1 /pkcs11/keystore.conf chmod ug+rw /pkcs11/keystore.conf -
비밀번호 스태시 파일을 작성하려면 다음 명령을 실행하고 <normal_user_api_key>을(를) 작성된 일반 사용자의 API 키로 바꾸십시오.
su - db2inst1 db2credman -stash -password "<normal_user_api_key>" -to /pkcs11/pkcs11_pw.sth -
Db2 구성을 업데이트하려면
db2inst1사용자로 다음 명령을 실행하십시오.db2 update dbm cfg using keystore_location /pkcs11/keystore.conf keystore_type pkcs11 -
DB2_DEK_MAC_TYPE환경 변수를 설정하려면db2inst1사용자로 다음 명령을 실행하고 Db2를 다시 시작하십시오.db2 terminate db2stop export DB2_DEK_MAC_TYPE=HMAC db2startDb2를 시작하기 전에 환경 변수
DB2_DEK_MAC_TYPE=HMAC를 지정해야 합니다. Windows에서 Db2를 사용하는 경우 다음 명령을 사용하여 Db2 프로파일 변수를 설정해야 합니다.db2set -g DB2_DEK_MAC_TYPE=HMAC -
암호화된 데이터베이스를 작성하려면 다음 명령을 실행하십시오.
db2 create db cryptdb1 encrypt이 명령으로 다음과 같은 정보가 인쇄됩니다.
DB20000I The CREATE DATABASE command completed successfully. -
암호화된 데이터베이스를 테스트하려면 다음 명령을 실행하십시오.
db2 connect to cryptdb1 db2 "create table test (id int not null, data varchar(100))" db2 "insert into test values (1, 'This is a secret text')" db2 "select * from test"이 명령으로 다음과 같은 정보가 인쇄됩니다.
ID DATA ----------- ---------------------------------------------------------------------------------------------------- 1 This is a secret text 1 record(s) selected.
다음 단계
이제 민감한 데이터가 암호화된 스토리지에 안전하게 저장됩니다. 또한 마스터 키는 보안 수준이 매우 높고 위조가 방지된 상태로 Hyper Protect Crypto Services에 보관됩니다.
이 튜토리얼에서는 Hyper Protect Crypto Services에서 Db2 기본 암호화를 설정하는 방법에 대해 알아보았습니다.
- PKCS #11에 대해 자세히 알아보기
- PKCS #11 API에 대해 자세히 알아보기
- PKCS #11 API 사용 시작