이 주제에서는 Cloud KMS로 키를 가져오기 전에 키를 수동으로 래핑하는 방법을 보여줍니다. 키를 가져오기 전에 Google Cloud CLI를 사용하여 자동으로 래핑하지 않으려면 이 주제의 안내를 따르세요. 차이점에 대한 개요는 키 가져오기 작동 방식을 참조하세요.
시작하기 전에 단계를 제외한 5~10 분 후에 이 주제의 단계를 완료할 수 있습니다.
시작하기 전에
키를 래핑하려면 먼저 다음 기본 요건을 완료해야 합니다.
- 대상 키링과 키를 만들고 가져오기 작업을 만듭니다.
- Cloud KMS로 가져올 수 있도록 키가 로컬에서 사용 가능하고 형식이 올바른지 확인합니다.
- OpenSSL 패치 및 재컴파일
래핑 키 검색
이 섹션에서는 시작하기 전에에서 만든 가져오기 작업에서 래핑 키를 검색하는 방법을 보여줍니다. Google Cloud 콘솔을 사용하는 것이 좋습니다.
콘솔
Google Cloud 콘솔에서 키 관리 페이지로 이동합니다.
가져오기 작업이 있는 키링의 이름을 클릭합니다.
페이지 상단에 있는 가져오기 작업 탭을 클릭합니다.
더보기 more_vert를 클릭한 다음 팝업 메뉴에서 래핑 키 다운로드를 클릭합니다.
gcloud CLI
가져오기 작업이 활성 상태인지 확인하려면 gcloud kms import-jobs describe
명령어를 실행합니다.
gcloud kms import-jobs describe IMPORT_JOB \ --location LOCATION \ --keyring KEY_RING \ --format="value(state)"
state: ACTIVE
다음 명령을 실행하여 가져오기 작업의 공개 키를 ${HOME}/wrapping-key.pem
에 저장합니다.
gcloud kms import-jobs describe \ --location=LOCATION \ --keyring=KEY_RING \ --format="value(publicKey.pem)" \ IMPORT_JOB > ${HOME}/wrapping-key.pem
API
ImportJob.get
메서드를 호출합니다.ImportJob.get
응답의publicKey
필드를 통해 공개 키를 검색합니다. 이 값은WrappingPublicKey
유형입니다.WrappingPublicKey
유형의pem
필드는 PEM(Privacy Enhanced Mail) 형식으로 인코딩된 공개 키입니다.
PEM 인코딩 형식에 대한 자세한 내용은 RFC 7468, 특히 일반 고려사항 및 소유자 공개 키 정보의 텍스트 인코딩 섹션을 참조하세요.
환경 변수 설정
OpenSSL 명령어에는 입력 값으로 몇 가지 파일 경로가 필요합니다. 명령어를 더 쉽게 실행할 수 있도록 파일 경로의 환경 변수를 정의합니다. 아래에 정의한 디렉터리에 쓸 수 있는 권한이 있는지 확인합니다.
PUB_WRAPPING_KEY
변수를 가져오기 작업에서 다운로드한 래핑 키의 전체 경로로 설정합니다. 래핑 키는.pem
으로 끝납니다.PUB_WRAPPING_KEY="WRAPPING_KEY_PATH"
TARGET_KEY
변수를 래핑되지 않은 (대상) 키의 전체 경로로 설정합니다.TARGET_KEY=TARGET_KEY_PATH
TARGET_KEY_PATH
를 대칭 키의.bin
파일 경로나 비대칭 키의.der
파일 경로로 바꿉니다.RSA-AES로 래핑하는 경우
TEMP_AES_KEY
변수를 임시 AES 키의 전체 경로로 설정합니다.TEMP_AES_KEY=TEMP_AES_KEY_PATH
가져올 수 있는 래핑된 대상 키를 저장할 전체 경로로
WRAPPED_KEY
변수를 설정합니다.WRAPPED_KEY=WRAPPED_KEY_PATH
다음 명령어를 사용하여 모든 환경 변수가 올바르게 설정되었는지 확인합니다.
echo "PUB_WRAPPING_KEY: " ${PUB_WRAPPING_KEY}; \ echo "TARGET_KEY: " ${TARGET_KEY}; \ echo "TEMP_AES_KEY: " ${TEMP_AES_KEY}; \ echo "WRAPPED_KEY: " ${WRAPPED_KEY}
변수가 올바르게 설정되면 키를 래핑할 준비가 된 것입니다. 다음에서는 RSA만 또는 RSA-AES 등 두 가지 방식을 설명합니다.
키 래핑
RSA로 키 래핑
이 방식에서 대상 키는 RSA 블록에 래핑됩니다. 따라서 대상 키 크기가 제한됩니다. 예를 들어 이 메서드를 사용하여 다른 RSA 키를 래핑할 수 없습니다. 지원되는 가져오기 메서드는 rsa-oaep-3072-sha256
및 rsa-oaep-4096-sha256
입니다.
CKM_RSA_PKCS_OAEP
알고리즘을 사용하여 래핑 공개 키로 대상 키를 래핑합니다.openssl pkeyutl \ -encrypt \ -pubin \ -inkey ${PUB_WRAPPING_KEY} \ -in ${TARGET_KEY} \ -out ${WRAPPED_KEY} \ -pkeyopt rsa_padding_mode:oaep \ -pkeyopt rsa_oaep_md:sha256 \ -pkeyopt rsa_mgf1_md:sha256
RSA-AES로 키 래핑
이 방식에서 대상 키는 임시 AES 키로 래핑됩니다. 그러면 임시 AES 키가 RSA 키로 래핑됩니다. 이러한 래핑된 키 두 개를 연결하고 가져옵니다. 대상 키는 RSA가 아닌 AES로 래핑되므로 이 방식을 사용하여 큰 키를 래핑할 수 있습니다. 지원되는 가져오기 메서드는 rsa-oaep-3072-sha1-aes-256
, rsa-oaep-4096-sha1-aes-256
, rsa-oaep-3072-sha256-aes-256
, rsa-oaep-4096-sha256-aes-256
입니다.
32바이트 길이의 임시 무작위 AES 키를 생성하고
${TEMP_AES_KEY}
로 식별된 위치에 저장합니다.openssl rand -out "${TEMP_AES_KEY}" 32
CKM_RSA_PKCS_OAEP
알고리즘을 사용하여 래핑 공개 키로 임시 AES 키를 래핑합니다. 가져오기 메서드가rsa-oaep-3072-sha1-aes-256
또는rsa-oaep-4096-sha1-aes-256
이면rsa_oaep_md
및rsa_mgf1_md
에sha1
을 사용합니다.rsa-oaep-3072-sha256-aes-256
및rsa-oaep-4096-sha256-aes-256
에sha256
을 사용합니다.openssl pkeyutl \ -encrypt \ -pubin \ -inkey ${PUB_WRAPPING_KEY} \ -in ${TEMP_AES_KEY} \ -out ${WRAPPED_KEY} \ -pkeyopt rsa_padding_mode:oaep \ -pkeyopt rsa_oaep_md:{sha1|sha256} \ -pkeyopt rsa_mgf1_md:{sha1|sha256}
OpenSSL_V110
변수를openssl.sh
스크립트의 경로로 설정합니다. OpenSSL의 패치 및 재컴파일에 대한 안내에 정확히 따랐다면 변수 값을 수정하지 않고 이 명령어를 사용할 수 있습니다.OPENSSL_V110="${HOME}/local/bin/openssl.sh"
CKM_AES_KEY_WRAP_PAD
알고리즘을 사용하여 임시 AES 키로 대상 키를 래핑하고WRAPPED_KEY
에 추가합니다."${OPENSSL_V110}" enc \ -id-aes256-wrap-pad \ -iv A65959A6 \ -K $( hexdump -v -e '/1 "%02x"' < "${TEMP_AES_KEY}" ) \ -in "${TARGET_KEY}" >> "${WRAPPED_KEY}"
-iv A65959A6
플래그는 A65959A6을 대체 초기값으로 설정합니다. 이는 RFC 5649 사양의 요구사항입니다.
다음 단계
- 이제
WRAPPED_KEY
에 저장된 래핑된 키를 가져올 수 있습니다. 키를 가져오려면 수동으로 래핑된 키 가져오기의 안내를 따르세요.