์ด ํ์ด์ง์์๋ Cloud KMS์์ ํค๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ํค๋ ๋์นญ ๋๋ ๋น๋์นญ ์ํธํ ํค, ๋น๋์นญ ์๋ช ํค์ด๊ฑฐ๋ MAC ์๋ช ํค์ผ ์ ์์ต๋๋ค.
ํค๋ฅผ ๋ง๋ค ๋ ํน์ Cloud KMS ์์น์ ํค๋ง์ ํค๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ ํค๋ง์ ๋ง๋ค๊ฑฐ๋ ๊ธฐ์กด ํค๋ง์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ํ์ด์ง์์๋ ์ Cloud KMS ๋๋ Cloud HSM ํค๋ฅผ ์์ฑํ์ฌ ๊ธฐ์กด ํค๋ง์ ์ถ๊ฐํฉ๋๋ค. Cloud EKM ํค๋ฅผ ๋ง๋ค๋ ค๋ฉด ์ธ๋ถ ํค ๋ง๋ค๊ธฐ๋ฅผ ์ฐธ์กฐํ์ธ์. Cloud KMS ๋๋ Cloud HSM ํค๋ฅผ ๊ฐ์ ธ์ค๋ ค๋ฉด ํค ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
์์ํ๊ธฐ ์ ์
์ด ํ์ด์ง์ ์์ ์ ์๋ฃํ๋ ค๋ฉด ๋จผ์ ๋ค์ ํญ๋ชฉ์ด ์์ด์ผ ํฉ๋๋ค.
- Cloud KMS ๋ฆฌ์์ค๋ฅผ ํฌํจํ Google Cloud ํ๋ก์ ํธ ๋ฆฌ์์ค. ๋ค๋ฅธ Google Cloud ๋ฆฌ์์ค๊ฐ ํฌํจ๋์ง ์์ Cloud KMS ๋ฆฌ์์ค์ ๋ํด ๊ฐ๋ณ ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ํค๋ฅผ ๋ง๋ค ํค๋ง์ ์ด๋ฆ๊ณผ ์์น. ๋ค๋ฅธ ๋ฆฌ์์ค ๊ฐ๊น์ด์ ์๊ณ ์ํ๋ ๋ณดํธ ์์ค์ ์ง์ํ๋ ์์น์์ ํค๋ง์ ์ ํํฉ๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ ์์น ๋ฐ ์ง์๋๋ ๋ณดํธ ์์ค์ ๋ณด๋ ค๋ฉด Cloud KMS ์์น๋ฅผ ์ฐธ์กฐํ์ธ์. ํค๋ง์ ๋ง๋ค๋ ค๋ฉด ํค๋ง ๋ง๋ค๊ธฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
- ์ ํ์ฌํญ: gcloud CLI๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํ๊ฒฝ์ ์ค๋นํฉ๋๋ค.
In the Google Cloud console, activate Cloud Shell.
ํ์ํ ์ญํ
ํค๋ฅผ ๋ง๋๋ ๋ฐ ํ์ํ ๊ถํ์ ์ป์ผ๋ ค๋ฉด ๊ด๋ฆฌ์์๊ฒ ํ๋ก์ ํธ ๋๋ ์์ ๋ฆฌ์์ค์ ๋ํ Cloud KMS ๊ด๋ฆฌ์ (
roles/cloudkms.admin
) IAM ์ญํ ์ ๋ถ์ฌํด ๋ฌ๋ผ๊ณ ์์ฒญํ์ธ์. ์ญํ ๋ถ์ฌ์ ๋ํ ์์ธํ ๋ด์ฉ์ ํ๋ก์ ํธ, ํด๋, ์กฐ์ง์ ๋ํ ์ก์ธ์ค ๊ด๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ธ์.์ด ์ฌ์ ์ ์๋ ์ญํ ์๋ ํค๋ฅผ ๋ง๋๋ ๋ฐ ํ์ํ ๊ถํ์ด ํฌํจ๋์ด ์์ต๋๋ค. ํ์ํ ์ ํํ ๊ถํ์ ๋ณด๋ ค๋ฉด ํ์ ๊ถํ ์น์ ์ ํผ์น์ธ์.
ํ์ ๊ถํ
ํค๋ฅผ ๋ง๋ค๋ ค๋ฉด ๋ค์ ๊ถํ์ด ํ์ํฉ๋๋ค.
-
cloudkms.cryptoKeys.create
-
cloudkms.cryptoKeys.get
-
cloudkms.cryptoKeys.list
-
cloudkms.cryptoKeyVersions.create
-
cloudkms.cryptoKeyVersions.get
-
cloudkms.cryptoKeyVersions.list
-
cloudkms.keyRings.get
-
cloudkms.keyRings.list
-
cloudkms.locations.get
-
cloudkms.locations.list
-
resourcemanager.projects.get
-
๊ณต๊ฐ ํค๋ฅผ ๊ฐ์ ธ์ค๋ ค๋ฉด ๋ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
cloudkms.cryptoKeyVersions.viewPublicKey
์ปค์คํ ์ญํ ์ด๋ ๋ค๋ฅธ ์ฌ์ ์ ์๋ ์ญํ ์ ์ฌ์ฉํ์ฌ ์ด ๊ถํ์ ๋ถ์ฌ๋ฐ์ ์๋ ์์ต๋๋ค.
๋์นญ ์ํธํ ํค ๋ง๋ค๊ธฐ
์ฝ์
Google Cloud ์ฝ์์์ ํค ๊ด๋ฆฌ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
ํค๋ฅผ ๋ง๋ค ํค๋ง์ ์ด๋ฆ์ ํด๋ฆญํฉ๋๋ค.
ํค ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
ํค ์ด๋ฆ์ ํค์ ์ด๋ฆ์ ์ ๋ ฅํฉ๋๋ค.
๋ณดํธ ์์ค์์ ์ํํธ์จ์ด ๋๋ HSM์ ์ ํํฉ๋๋ค.
ํค ์๋ฃ์์ ์์ฑ๋ ํค๋ฅผ ์ ํํฉ๋๋ค.
์ฉ๋์์ Symmetric encrypt/decrypt๋ฅผ ์ ํํฉ๋๋ค.
์ํ ์ฃผ๊ธฐ ๋ฐ ์์์ผ์ ๊ธฐ๋ณธ๊ฐ์ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
gcloud
๋ช ๋ น์ค์์ Cloud KMS๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ ์ต์ ๋ฒ์ ์ Google Cloud CLI๋ก ์ค์น ๋๋ ์ ๊ทธ๋ ์ด๋ํ์ธ์.
gcloud kms keys create KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --purpose "encryption" \ --protection-level "PROTECTION_LEVEL"
๋ค์์ ๋ฐ๊ฟ๋๋ค.
KEY_NAME
: ํค์ ์ด๋ฆ์ ๋๋ค.KEY_RING
: ํค๊ฐ ํฌํจ๋ ํค๋ง์ ์ด๋ฆ์ ๋๋ค.LOCATION
: ํค๋ง์ Cloud KMS ์์น์ ๋๋ค.PROTECTION_LEVEL
: ํค์ ์ฌ์ฉํ ๋ณดํธ ์์ค์ ๋๋ค(์:software
๋๋hsm
).software
ํค์--protection-level
ํ๋๊ทธ๋ ์๋ตํด๋ ๋ฉ๋๋ค.
๋ชจ๋ ํ๋๊ทธ ๋ฐ ๊ฐ๋ฅํ ๊ฐ์ ๋ํ ์ ๋ณด๋ฅผ ๋ณด๋ ค๋ฉด
--help
ํ๋๊ทธ์ ํจ๊ป ๋ช ๋ น์ด๋ฅผ ์คํํ์ธ์.C#
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ C# ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS C# SDK๋ฅผ ์ค์นํฉ๋๋ค.
Go
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Go ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Go SDK๋ฅผ ์ค์นํฉ๋๋ค.
Java
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ ์๋ฐ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS ์๋ฐ SDK๋ฅผ ์ค์นํฉ๋๋ค.
Node.js
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Node.js ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Node.js SDK๋ฅผ ์ค์นํฉ๋๋ค.
PHP
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Google Cloud์์ PHP ์ฌ์ฉ์ ๊ดํด ์์๋ณด๊ณ Cloud KMS PHP SDK๋ฅผ ์ค์นํ์ธ์.
Python
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Python ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Python SDK๋ฅผ ์ค์นํฉ๋๋ค.
Ruby
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Ruby ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Ruby SDK๋ฅผ ์ค์นํฉ๋๋ค.
API
์ด ์์์์๋ curl์ HTTP ํด๋ผ์ด์ธํธ๋ก ์ฌ์ฉํ์ฌ API ์ฌ์ฉ์ ๋ณด์ฌ์ค๋๋ค. ์ก์ธ์ค ์ ์ด์ ๋ํ ์์ธํ ๋ด์ฉ์ Cloud KMS API ์ก์ธ์ค๋ฅผ ์ฐธ์กฐํ์ธ์.
ํค๋ฅผ ๋ง๋ค๋ ค๋ฉด
CryptoKey.create
๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?crypto_key_id=KEY_NAME" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data '{"purpose": "ENCRYPT_DECRYPT", "versionTemplate": { "protectionLevel": "PROTECTION_LEVEL", "algorithm": "ALGORITHM" }}'
๋ค์์ ๋ฐ๊ฟ๋๋ค.
PROJECT_ID
: ํค๋ง์ด ํฌํจ๋ ํ๋ก์ ํธ์ ID์ ๋๋ค.LOCATION
: ํค๋ง์ Cloud KMS ์์น์ ๋๋ค.KEY_RING
: ํค๊ฐ ํฌํจ๋ ํค๋ง์ ์ด๋ฆ์ ๋๋ค.KEY_NAME
: ํค์ ์ด๋ฆ์ ๋๋ค.PROTECTION_LEVEL
: ํค์ ๋ณดํธ ์์ค์ ๋๋ค(์:SOFTWARE
๋๋HSM
).ALGORITHM
: HMAC ์๋ช ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค(์:HMAC_SHA256
). ์ง์๋๋ ๋ชจ๋ HMAC ์๊ณ ๋ฆฌ์ฆ์ ๋ณด๋ ค๋ฉด HMAC ์๋ช ์๊ณ ๋ฆฌ์ฆ์ ์ฐธ์กฐํ์ธ์.
์ปค์คํ ์๋ ์ํ์ผ๋ก ๋์นญ ์ํธํ ํค ๋ง๋ค๊ธฐ
ํค๋ฅผ ๋ง๋ค ๋ ์๋ก์ด ํค ๋ฒ์ ์ด ์๋์ผ๋ก ์์ฑ๋๋ ๊ฐ๊ฒฉ์ธ ์ํ ๊ธฐ๊ฐ์ ์ง์ ํ ์ ์์ต๋๋ค. ๋ํ ์ง๊ธ์ผ๋ก๋ถํฐ ํ๋์ ์ํ ๊ธฐ๊ฐ ์ด์ ๋๋ ์ดํ์ ๋ค์ ์ํ์ด ๋ฐ์ํ๋๋ก ๋ค์ ์ํ ์๊ฐ์ ๋ ๋ฆฝ์ ์ผ๋ก ์ง์ ํ ์๋ ์์ต๋๋ค.
์ฝ์
Google Cloud ์ฝ์์ ์ฌ์ฉํ์ฌ ํค๋ฅผ ๋ง๋ค๋ฉด Cloud KMS๊ฐ ์ํ ๊ธฐ๊ฐ๊ณผ ๋ค์ ์ํ ์๊ฐ์ ์๋์ผ๋ก ์ค์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํ๋๋ก ์ ํํ๊ฑฐ๋ ๋ค๋ฅธ ๊ฐ์ ์ง์ ํ ์ ์์ต๋๋ค.
๋ค๋ฅธ ์ํ ์ฃผ๊ธฐ์ ์์ ์๊ฐ์ ์ง์ ํ๋ ค๋ฉด, ํค๋ฅผ ๋ง๋ค ๋ ๋ง๋ค๊ธฐ ๋ฒํผ์ ํด๋ฆญํ๊ธฐ ์ ์ ๋ค์์ ์ํํฉ๋๋ค.
ํค ์ํ ๊ธฐ๊ฐ์์ ์ต์ ์ ์ ํํฉ๋๋ค.
์์์ผ์์ ์ฒซ ๋ฒ์งธ ์๋ ์ํ์ ์คํํ ๋ ์ง๋ฅผ ์ ํํฉ๋๋ค. ์์์ผ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ํ์ฌ ํค๋ฅผ ์์ฑํ ์์ ๋ถํฐ ์ฒซ ๋ฒ์งธ ์๋ ์ํ ๋จ์ผ ํค ์ํ ๊ธฐ๊ฐ์ ์์ํ ์ ์์ต๋๋ค.
gcloud
๋ช ๋ น์ค์์ Cloud KMS๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ ์ต์ ๋ฒ์ ์ Google Cloud CLI๋ก ์ค์น ๋๋ ์ ๊ทธ๋ ์ด๋ํ์ธ์.
gcloud kms keys create KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --purpose "encryption" \ --rotation-period ROTATION_PERIOD \ --next-rotation-time NEXT_ROTATION_TIME
๋ค์์ ๋ฐ๊ฟ๋๋ค.
KEY_NAME
: ํค์ ์ด๋ฆ์ ๋๋ค.KEY_RING
: ํค๊ฐ ํฌํจ๋ ํค๋ง์ ์ด๋ฆ์ ๋๋ค.LOCATION
: ํค๋ง์ Cloud KMS ์์น์ ๋๋ค.ROTATION_PERIOD
: ํค๋ฅผ ์ํํ๋ ๊ฐ๊ฒฉ์ ๋๋ค(์:30d
๋ ํค๋ฅผ 30์ผ๋ง๋ค ์ํ). ์ํ ๊ธฐ๊ฐ์ ์ต์ 1์ผ์์ ์ต๋ 100๋ ์ด์ด์ผ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ CryptoKey.rotationPeriod๋ฅผ ์ฐธ์กฐํ์ธ์.NEXT_ROTATION_TIME
: ์ฒซ ๋ฒ์งธ ์ํ์ ์๋ฃํ ํ์์คํฌํ์ ๋๋ค(์:2023-01-01T01:02:03
). ๋ช ๋ น์ด๋ฅผ ์คํํ๋ ์์ ์ผ๋ก๋ถํฐ ํ๋์ ์ํ ๊ธฐ๊ฐ ๋์ ์ฒซ ๋ฒ์งธ ์ํ์ ์์ฝํ๋ ค๋ฉด--next-rotation-time
์ ์๋ตํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์CryptoKey.nextRotationTime
์ ์ฐธ์กฐํ์ธ์.
๋ชจ๋ ํ๋๊ทธ ๋ฐ ๊ฐ๋ฅํ ๊ฐ์ ๋ํ ์ ๋ณด๋ฅผ ๋ณด๋ ค๋ฉด
--help
ํ๋๊ทธ์ ํจ๊ป ๋ช ๋ น์ด๋ฅผ ์คํํ์ธ์.C#
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ C# ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS C# SDK๋ฅผ ์ค์นํฉ๋๋ค.
Go
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Go ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Go SDK๋ฅผ ์ค์นํฉ๋๋ค.
Java
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ ์๋ฐ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS ์๋ฐ SDK๋ฅผ ์ค์นํฉ๋๋ค.
Node.js
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Node.js ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Node.js SDK๋ฅผ ์ค์นํฉ๋๋ค.
PHP
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Google Cloud์์ PHP ์ฌ์ฉ์ ๊ดํด ์์๋ณด๊ณ Cloud KMS PHP SDK๋ฅผ ์ค์นํ์ธ์.
Python
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Python ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Python SDK๋ฅผ ์ค์นํฉ๋๋ค.
Ruby
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Ruby ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Ruby SDK๋ฅผ ์ค์นํฉ๋๋ค.
API
์ด ์์์์๋ curl์ HTTP ํด๋ผ์ด์ธํธ๋ก ์ฌ์ฉํ์ฌ API ์ฌ์ฉ์ ๋ณด์ฌ์ค๋๋ค. ์ก์ธ์ค ์ ์ด์ ๋ํ ์์ธํ ๋ด์ฉ์ Cloud KMS API ์ก์ธ์ค๋ฅผ ์ฐธ์กฐํ์ธ์.
ํค๋ฅผ ๋ง๋ค๋ ค๋ฉด
CryptoKey.create
๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?crypto_key_id=KEY_NAME" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data '{"purpose": "PURPOSE", "rotationPeriod": "ROTATION_PERIOD", "nextRotationTime": "NEXT_ROTATION_TIME"}'
๋ค์์ ๋ฐ๊ฟ๋๋ค.
PURPOSE
: ํค์ ์ฉ๋์ ๋๋ค.ROTATION_PERIOD
: ํค๋ฅผ ์ํํ๋ ๊ฐ๊ฒฉ์ ๋๋ค(์:30d
๋ ํค๋ฅผ 30์ผ๋ง๋ค ์ํ). ์ํ ๊ธฐ๊ฐ์ ์ต์ 1์ผ์์ ์ต๋ 100๋ ์ด์ด์ผ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ CryptoKey.rotationPeriod๋ฅผ ์ฐธ์กฐํ์ธ์.NEXT_ROTATION_TIME
: ์ฒซ ๋ฒ์งธ ์ํ์ ์๋ฃํ ํ์์คํฌํ์ ๋๋ค(์:2023-01-01T01:02:03
). ์์ธํ ๋ด์ฉ์CryptoKey.nextRotationTime
์ ์ฐธ์กฐํ์ธ์.
'ํ๊ธฐ ์์ฝ๋จ' ์ํ ์ ์ง ๊ธฐ๊ฐ ์ค์
๊ธฐ๋ณธ์ ์ผ๋ก Cloud KMS์ ํค ๋ฒ์ ์ ํ๊ธฐ๋๊ธฐ ์ 30์ผ ๋์ ํ๊ธฐ ์์ฝ๋จ(
DESTROY_SCHEDULED
) ์ํ๋ก ์ ์ง๋ฉ๋๋ค. ํ๊ธฐ ์์ฝ๋จ ์ํ๋ฅผ ์ํํธ ์ญ์ ์ํ๋ผ๊ณ ๋ ํฉ๋๋ค. ํค ๋ฒ์ ์ด ์ด ์ํ๋ก ์ ์ง๋๋ ๊ธฐ๊ฐ์ ๊ตฌ์ฑํ ์ ์์ผ๋ฉฐ ๋ค์๊ณผ ๊ฐ์ ์ ์ฝ์ด ์์ต๋๋ค.- ํค๋ฅผ ๋ง๋๋ ๋์ค์๋ง ๊ธฐ๊ฐ์ ์ค์ ํ ์ ์์ต๋๋ค.
- ํค ๊ธฐ๊ฐ์ด ์ง์ ๋ ํ์๋ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
- ๊ธฐ๊ฐ์ ์ดํ์ ์์ฑ๋๋ ๋ชจ๋ ํค ๋ฒ์ ์ ์ ์ฉ๋ฉ๋๋ค.
- ์ต์ ๊ธฐ๊ฐ์ ๋ชจ๋ ํค์ ๋ํด 24์๊ฐ์ด๊ณ , ์ต์ ๊ธฐ๊ฐ์ด 0์ธ ๊ฐ์ ธ์ค๊ธฐ ์ ์ฉ ํค๋ ์์ธ์ ๋๋ค.
- ์ต๋ ๊ธฐ๊ฐ์ 120์ผ์ ๋๋ค.
- ๊ธฐ๋ณธ ๊ธฐ๊ฐ์ 30์ผ์ ๋๋ค.
์กฐ์ง์ ์กฐ์ง ์ ์ฑ ์ ์ต์ ํ๊ธฐ ์์ฝ ๊ธฐ๊ฐ ๊ฐ์ด ์ ์๋์์ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ํค ํ๊ธฐ ์ ์ด๋ฅผ ์ฐธ์กฐํ์ธ์.
ํ๊ธฐ ์์ฝ ์ํ์ ๋ํด ๋ง์ถค ๊ธฐ๊ฐ์ ์ฌ์ฉํ๋ ํค๋ฅผ ๋ง๋ค๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์.
์ฝ์
Google Cloud ์ฝ์์์ ํค ๊ด๋ฆฌ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
ํค๋ฅผ ๋ง๋ค ํค๋ง์ ์ด๋ฆ์ ํด๋ฆญํฉ๋๋ค.
ํค ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ํค ์ค์ ์ ๊ตฌ์ฑํฉ๋๋ค.
์ถ๊ฐ ์ค์ ์ ํด๋ฆญํฉ๋๋ค.
'ํ๊ธฐ ์์ฝ๋จ' ์ํ ์ ์ง ๊ธฐ๊ฐ์์ ์๊ตฌ์ ์ผ๋ก ํ๊ธฐ๋๊ธฐ ์ ์ ํค๋ฅผ ํ๊ธฐ ์์ฝ๋จ ์ํ๋ก ์ ์งํ ๊ธฐ๊ฐ(์ผ)์ ์ ํํฉ๋๋ค.
ํค ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
gcloud
๋ช ๋ น์ค์์ Cloud KMS๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ ์ต์ ๋ฒ์ ์ Google Cloud CLI๋ก ์ค์น ๋๋ ์ ๊ทธ๋ ์ด๋ํ์ธ์.
gcloud kms keys create KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --purpose PURPOSE \ --destroy-scheduled-duration DURATION
๋ค์์ ๋ฐ๊ฟ๋๋ค.
KEY_NAME
: ํค์ ์ด๋ฆ์ ๋๋ค.KEY_RING
: ํค๊ฐ ํฌํจ๋ ํค๋ง์ ์ด๋ฆ์ ๋๋ค.LOCATION
: ํค๋ง์ Cloud KMS ์์น์ ๋๋ค.PURPOSE
: ํค์ ์ฉ๋์ ๋๋ค(์:encryption
).DURATION
: ์๊ตฌ์ ์ผ๋ก ํ๊ธฐํ๊ธฐ ์ ์ ํค๋ฅผ ํ๊ธฐ ์์ฝ๋จ ์ํ๋ก ์ ์งํ ๊ธฐ๊ฐ์ ๋๋ค.
๋ชจ๋ ํ๋๊ทธ ๋ฐ ๊ฐ๋ฅํ ๊ฐ์ ๋ํ ์ ๋ณด๋ฅผ ๋ณด๋ ค๋ฉด
--help
ํ๋๊ทธ์ ํจ๊ป ๋ช ๋ น์ด๋ฅผ ์คํํ์ธ์.ํน์ ์ ํ๋ฆฌ์ผ์ด์ ๋๋ ๊ท์ ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฐ์ด ํ์ํ์ง ์์ ํ ๋ชจ๋ ํค์ ๋ํด ๊ธฐ๋ณธ ๊ธฐ๊ฐ์ธ 30์ผ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋น๋์นญ ํค ๋ง๋ค๊ธฐ
๋ค์ ์น์ ์์๋ ๋น๋์นญ ํค๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
๋น๋์นญ ๋ณตํธํ ํค ๋ง๋ค๊ธฐ
๋ค์ ๋จ๊ณ์ ๋ฐ๋ผ ์ง์ ๋ ํค๋ง ๋ฐ ์์น์ ๋น๋์นญ ๋ณตํธํ ํค๋ฅผ ๋ง๋ญ๋๋ค. ์ด๋ฌํ ์์๋ฅผ ์กฐ์ ํ์ฌ ๋ค๋ฅธ ๋ณดํธ ์์ค ๋๋ ์๊ณ ๋ฆฌ์ฆ์ ์ง์ ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ ๋ฐ ๋์ฒด ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ ๋ฐ ๋ณดํธ ์์ค์ ์ฐธ์กฐํ์ธ์.
ํค๋ฅผ ์ฒ์ ๋ง๋ค ๋ ์ด๊ธฐ ํค ๋ฒ์ ์ํ๋ ์์ฑ ๋๊ธฐ ์ค์ ๋๋ค. ์ํ๊ฐ ์ฌ์ฉ ์ค์ ๋จ์ผ๋ก ๋ฐ๋๋ฉด ํค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํค ๋ฒ์ ์ํ์ ๋ํ ์์ธํ ๋ด์ฉ์ ํค ๋ฒ์ ์ํ๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฝ์
Google Cloud ์ฝ์์์ ํค ๊ด๋ฆฌ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
ํค๋ฅผ ๋ง๋ค ํค๋ง์ ์ด๋ฆ์ ํด๋ฆญํฉ๋๋ค.
ํค ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
ํค ์ด๋ฆ์ ํค์ ์ด๋ฆ์ ์ ๋ ฅํฉ๋๋ค.
๋ณดํธ ์์ค์์ ์ํํธ์จ์ด ๋๋ HSM์ ์ ํํฉ๋๋ค.
ํค ์๋ฃ์์ ์์ฑ๋ ํค๋ฅผ ์ ํํฉ๋๋ค.
์ฉ๋์์ ๋น๋์นญ ๋ณตํธํ๋ฅผ ์ ํํฉ๋๋ค.
์๊ณ ๋ฆฌ์ฆ์์ 3072๋นํธ RSA - OAEP ํจ๋ฉ - SHA256 ๋ค์ด์ ์คํธ๋ฅผ ์ ํํฉ๋๋ค. ์ดํ ํค ๋ฒ์ ์์ ์ด ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
gcloud
๋ช ๋ น์ค์์ Cloud KMS๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ ์ต์ ๋ฒ์ ์ Google Cloud CLI๋ก ์ค์น ๋๋ ์ ๊ทธ๋ ์ด๋ํ์ธ์.
gcloud kms keys create KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --purpose "asymmetric-encryption" \ --default-algorithm "ALGORITHM"
๋ค์์ ๋ฐ๊ฟ๋๋ค.
KEY_NAME
: ํค์ ์ด๋ฆ์ ๋๋ค.KEY_RING
: ํค๊ฐ ํฌํจ๋ ํค๋ง์ ์ด๋ฆ์ ๋๋ค.LOCATION
: ํค๋ง์ Cloud KMS ์์น์ ๋๋ค.ALGORITHM
: ํค์ ์ฌ์ฉํ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค(์:rsa-decrypt-oaep-3072-sha256
). ์ง์๋๋ ๋น๋์นญ ์ํธํ ์๊ณ ๋ฆฌ์ฆ ๋ชฉ๋ก์ ๋น๋์นญ ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ ์ฐธ์กฐํ์ธ์.
๋ชจ๋ ํ๋๊ทธ ๋ฐ ๊ฐ๋ฅํ ๊ฐ์ ๋ํ ์ ๋ณด๋ฅผ ๋ณด๋ ค๋ฉด
--help
ํ๋๊ทธ์ ํจ๊ป ๋ช ๋ น์ด๋ฅผ ์คํํ์ธ์.C#
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ C# ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS C# SDK๋ฅผ ์ค์นํฉ๋๋ค.
Go
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Go ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Go SDK๋ฅผ ์ค์นํฉ๋๋ค.
Java
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ ์๋ฐ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS ์๋ฐ SDK๋ฅผ ์ค์นํฉ๋๋ค.
Node.js
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Node.js ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Node.js SDK๋ฅผ ์ค์นํฉ๋๋ค.
PHP
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Google Cloud์์ PHP ์ฌ์ฉ์ ๊ดํด ์์๋ณด๊ณ Cloud KMS PHP SDK๋ฅผ ์ค์นํ์ธ์.
Python
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Python ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Python SDK๋ฅผ ์ค์นํฉ๋๋ค.
Ruby
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Ruby ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Ruby SDK๋ฅผ ์ค์นํฉ๋๋ค.
API
์ด ์์์์๋ curl์ HTTP ํด๋ผ์ด์ธํธ๋ก ์ฌ์ฉํ์ฌ API ์ฌ์ฉ์ ๋ณด์ฌ์ค๋๋ค. ์ก์ธ์ค ์ ์ด์ ๋ํ ์์ธํ ๋ด์ฉ์ Cloud KMS API ์ก์ธ์ค๋ฅผ ์ฐธ์กฐํ์ธ์.
CryptoKey.create
๋ฅผ ํธ์ถํ์ฌ ๋น๋์นญ ๋ณตํธํ ํค๋ฅผ ๋ง๋์ธ์.curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?crypto_key_id=KEY_NAME" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data '{"purpose": "ASYMMETRIC_DECRYPT", "versionTemplate": {"algorithm": "ALGORITHM"}}'
๋ค์์ ๋ฐ๊ฟ๋๋ค.
PROJECT_ID
: ํค๋ง์ด ํฌํจ๋ ํ๋ก์ ํธ์ ID์ ๋๋ค.LOCATION
: ํค๋ง์ Cloud KMS ์์น์ ๋๋ค.KEY_RING
: ํค๊ฐ ํฌํจ๋ ํค๋ง์ ์ด๋ฆ์ ๋๋ค.KEY_NAME
: ํค์ ์ด๋ฆ์ ๋๋ค.ALGORITHM
: ํค์ ์ฌ์ฉํ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค(์:RSA_DECRYPT_OAEP_3072_SHA256
). ์ง์๋๋ ๋น๋์นญ ์ํธํ ์๊ณ ๋ฆฌ์ฆ ๋ชฉ๋ก์ ๋น๋์นญ ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ ์ฐธ์กฐํ์ธ์.
๋น๋์นญ ์๋ช ํค ๋ง๋ค๊ธฐ
๋ค์ ๋จ๊ณ์ ๋ฐ๋ผ ์ง์ ๋ ํค๋ง ๋ฐ ์์น์ ๋น๋์นญ ์๋ช ํค๋ฅผ ๋ง๋ญ๋๋ค. ์ด๋ฌํ ์์๋ฅผ ์กฐ์ ํ์ฌ ๋ค๋ฅธ ๋ณดํธ ์์ค ๋๋ ์๊ณ ๋ฆฌ์ฆ์ ์ง์ ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ ๋ฐ ๋์ฒด ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ ๋ฐ ๋ณดํธ ์์ค์ ์ฐธ์กฐํ์ธ์.
ํค๋ฅผ ์ฒ์ ๋ง๋ค ๋ ์ด๊ธฐ ํค ๋ฒ์ ์ํ๋ ์์ฑ ๋๊ธฐ ์ค์ ๋๋ค. ์ํ๊ฐ ์ฌ์ฉ ์ค์ ๋จ์ผ๋ก ๋ฐ๋๋ฉด ํค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํค ๋ฒ์ ์ํ์ ๋ํ ์์ธํ ๋ด์ฉ์ ํค ๋ฒ์ ์ํ๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฝ์
Google Cloud ์ฝ์์์ ํค ๊ด๋ฆฌ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
ํค๋ฅผ ๋ง๋ค ํค๋ง์ ์ด๋ฆ์ ํด๋ฆญํฉ๋๋ค.
ํค ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
ํค ์ด๋ฆ์ ํค์ ์ด๋ฆ์ ์ ๋ ฅํฉ๋๋ค.
๋ณดํธ ์์ค์์ ์ํํธ์จ์ด ๋๋ HSM์ ์ ํํฉ๋๋ค.
ํค ์๋ฃ์์ ์์ฑ๋ ํค๋ฅผ ์ ํํฉ๋๋ค.
์ฉ๋์์ ๋น๋์นญ ์๋ช ์ ์ ํํฉ๋๋ค.
์๊ณ ๋ฆฌ์ฆ์์ ํ์ ๊ณก์ P-256 - SHA256 ๋ค์ด์ ์คํธ๋ฅผ ์ ํํฉ๋๋ค. ์ดํ ํค ๋ฒ์ ์์ ์ด ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
gcloud
๋ช ๋ น์ค์์ Cloud KMS๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ ์ต์ ๋ฒ์ ์ Google Cloud CLI๋ก ์ค์น ๋๋ ์ ๊ทธ๋ ์ด๋ํ์ธ์.
gcloud kms keys create KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --purpose "asymmetric-signing" \ --default-algorithm "ALGORITHM"
๋ค์์ ๋ฐ๊ฟ๋๋ค.
KEY_NAME
: ํค์ ์ด๋ฆ์ ๋๋ค.KEY_RING
: ํค๊ฐ ํฌํจ๋ ํค๋ง์ ์ด๋ฆ์ ๋๋ค.LOCATION
: ํค๋ง์ Cloud KMS ์์น์ ๋๋ค.ALGORITHM
: ํค์ ์ฌ์ฉํ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค(์:ec-sign-p256-sha256
). ์ง์๋๋ ์๊ณ ๋ฆฌ์ฆ ๋ชฉ๋ก์ ๋น๋์นญ ์๋ช ์๊ณ ๋ฆฌ์ฆ์ ์ฐธ์กฐํ์ธ์.
๋ชจ๋ ํ๋๊ทธ ๋ฐ ๊ฐ๋ฅํ ๊ฐ์ ๋ํ ์ ๋ณด๋ฅผ ๋ณด๋ ค๋ฉด
--help
ํ๋๊ทธ์ ํจ๊ป ๋ช ๋ น์ด๋ฅผ ์คํํ์ธ์.C#
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ C# ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS C# SDK๋ฅผ ์ค์นํฉ๋๋ค.
Go
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Go ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Go SDK๋ฅผ ์ค์นํฉ๋๋ค.
Java
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ ์๋ฐ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS ์๋ฐ SDK๋ฅผ ์ค์นํฉ๋๋ค.
Node.js
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Node.js ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Node.js SDK๋ฅผ ์ค์นํฉ๋๋ค.
PHP
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Google Cloud์์ PHP ์ฌ์ฉ์ ๊ดํด ์์๋ณด๊ณ Cloud KMS PHP SDK๋ฅผ ์ค์นํ์ธ์.
Python
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Python ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Python SDK๋ฅผ ์ค์นํฉ๋๋ค.
Ruby
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Ruby ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Ruby SDK๋ฅผ ์ค์นํฉ๋๋ค.
API
์ด ์์์์๋ curl์ HTTP ํด๋ผ์ด์ธํธ๋ก ์ฌ์ฉํ์ฌ API ์ฌ์ฉ์ ๋ณด์ฌ์ค๋๋ค. ์ก์ธ์ค ์ ์ด์ ๋ํ ์์ธํ ๋ด์ฉ์ Cloud KMS API ์ก์ธ์ค๋ฅผ ์ฐธ์กฐํ์ธ์.
CryptoKey.create
๋ฅผ ํธ์ถํ์ฌ ๋น๋์นญ ์๋ช ํค๋ฅผ ๋ง๋์ธ์.curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?crypto_key_id=KEY_NAME" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data '{"purpose": "ASYMMETRIC_SIGN", "versionTemplate": {"algorithm": "ALGORITHM"}}'
๋ค์์ ๋ฐ๊ฟ๋๋ค.
PROJECT_ID
: ํค๋ง์ด ํฌํจ๋ ํ๋ก์ ํธ์ ID์ ๋๋ค.LOCATION
: ํค๋ง์ Cloud KMS ์์น์ ๋๋ค.KEY_RING
: ํค๊ฐ ํฌํจ๋ ํค๋ง์ ์ด๋ฆ์ ๋๋ค.KEY_NAME
: ํค์ ์ด๋ฆ์ ๋๋ค.ALGORITHM
: ํค์ ์ฌ์ฉํ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค(์:EC_SIGN_P256_SHA256
). ์ง์๋๋ ์๊ณ ๋ฆฌ์ฆ ๋ชฉ๋ก์ ๋น๋์นญ ์๋ช ์๊ณ ๋ฆฌ์ฆ์ ์ฐธ์กฐํ์ธ์.
๊ณต๊ฐ ํค ๊ฐ์ ธ์ค๊ธฐ
๋น๋์นญ ํค๋ฅผ ๋ง๋ค๋ฉด Cloud KMS์์ ๊ณต๊ฐ ํค/๋น๊ณต๊ฐ ํค ์์ ๋ง๋ญ๋๋ค. ํค๊ฐ ์์ฑ๋ ํ ์ธ์ ๋ ์ง ์ฌ์ฉ ์ค์ ๋ ๋น๋์นญ ํค์ ๊ณต๊ฐ ํค๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
๊ณต๊ฐ ํค๋ PEM(Privacy-enhanced Electronic Mail) ํ์์ ๋๋ค. ์์ธํ ๋ด์ฉ์ RFC 7468 ์น์ ์ผ๋ฐ ๊ณ ๋ ค์ฌํญ ๋ฐ ๋์ ๊ณต๊ฐ ํค ์ ๋ณด์ ํ ์คํธ ์ธ์ฝ๋ฉ์ ์ฐธ์กฐํ์ธ์.
๊ธฐ์กด ๋น๋์นญ ํค ๋ฒ์ ์ ๊ณต๊ฐ ํค๋ฅผ ๋ค์ด๋ก๋ํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์.
์ฝ์
Google Cloud ์ฝ์์์ ํค ๊ด๋ฆฌ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
๊ณต๊ฐ ํค๋ฅผ ๊ฒ์ํ ๋น๋์นญ ํค๊ฐ ํฌํจ๋ ํค๋ง์ ์ด๋ฆ์ ํด๋ฆญํฉ๋๋ค.
๊ณต๊ฐ ํค๋ฅผ ๊ฐ์ ธ์ฌ ํค์ ์ด๋ฆ์ ํด๋ฆญํฉ๋๋ค.
๊ณต๊ฐ ํค๋ฅผ ๊ฒ์ํ ํค ๋ฒ์ ์ ํด๋นํ๋ ํ์์
๋๋ณด๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.๊ณต๊ฐ ํค ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
๊ณต๊ฐ ํค๊ฐ ํ๋กฌํํธ์ ํ์๋ฉ๋๋ค. ๊ณต๊ฐ ํค๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌํ ์ ์์ต๋๋ค. ๊ณต๊ฐ ํค๋ฅผ ๋ค์ด๋ก๋ํ๋ ค๋ฉด ๋ค์ด๋ก๋๋ฅผ ํด๋ฆญํฉ๋๋ค.
๊ณต๊ฐ ํค ๊ฐ์ ธ์ค๊ธฐ ์ต์ ์ด ํ์๋์ง ์์ผ๋ฉด ๋ค์์ ํ์ธํฉ๋๋ค.
- ํค๊ฐ ๋น๋์นญ ํค์ ๋๋ค.
- ํค ๋ฒ์ ์ด ์ฌ์ฉ ์ค์ ๋์์ต๋๋ค.
cloudkms.cryptoKeyVersions.viewPublicKey
๊ถํ์ด ์์ต๋๋ค.
Google Cloud ์ฝ์์์ ๋ค์ด๋ก๋ํ ๊ณต๊ฐ ํค์ ํ์ผ ์ด๋ฆ์ ๋ค์ ํ์์ ๋๋ค.
KEY_RING-KEY_NAME-KEY_VERSION.pub
ํ์ผ ์ด๋ฆ์ ๊ฐ ๋ถ๋ถ์ด ํ์ดํ์ผ๋ก ๊ตฌ๋ถ๋ฉ๋๋ค(์:
ringname-keyname-version.pub
).gcloud
๋ช ๋ น์ค์์ Cloud KMS๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ ์ต์ ๋ฒ์ ์ Google Cloud CLI๋ก ์ค์น ๋๋ ์ ๊ทธ๋ ์ด๋ํ์ธ์.
gcloud kms keys versions get-public-key KEY_VERSION \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --public-key-format PUBLIC_KEY_FORMAT \ --output-file OUTPUT_FILE_PATH
๋ค์์ ๋ฐ๊ฟ๋๋ค.
KEY_VERSION
: ํค ๋ฒ์ ๋ฒํธ์ ๋๋ค.KEY_NAME
: ํค์ ์ด๋ฆ์ ๋๋ค.KEY_RING
: ํค๊ฐ ํฌํจ๋ ํค๋ง์ ์ด๋ฆ์ ๋๋ค.LOCATION
: ํค๋ง์ Cloud KMS ์์น์ ๋๋ค.PUBLIC_KEY_FORMAT
: ๊ณต๊ฐ ํค๋ฅผ ๋ด๋ณด๋ผ ํ์์ ๋๋ค. PQC ์๊ณ ๋ฆฌ์ฆ(๋ฏธ๋ฆฌ๋ณด๊ธฐ)์ ๊ฒฝ์ฐnist-pqc
๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ํค์ ๊ฒฝ์ฐpem
์ ์ฌ์ฉํ๊ฑฐ๋ ์ด ๋งค๊ฐ๋ณ์๋ฅผ ์๋ตํ ์ ์์ต๋๋ค.OUTPUT_FILE_PATH
: ๊ณต๊ฐ ํค ํ์ผ์ ์ ์ฅํ ๊ฒฝ๋ก์ ๋๋ค(์:public-key.pub
).
๋ชจ๋ ํ๋๊ทธ ๋ฐ ๊ฐ๋ฅํ ๊ฐ์ ๋ํ ์ ๋ณด๋ฅผ ๋ณด๋ ค๋ฉด
--help
ํ๋๊ทธ์ ํจ๊ป ๋ช ๋ น์ด๋ฅผ ์คํํ์ธ์.C#
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ C# ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS C# SDK๋ฅผ ์ค์นํฉ๋๋ค.
Go
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Go ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Go SDK๋ฅผ ์ค์นํฉ๋๋ค.
Java
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ ์๋ฐ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS ์๋ฐ SDK๋ฅผ ์ค์นํฉ๋๋ค.
Node.js
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Node.js ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Node.js SDK๋ฅผ ์ค์นํฉ๋๋ค.
PHP
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Google Cloud์์ PHP ์ฌ์ฉ์ ๊ดํด ์์๋ณด๊ณ Cloud KMS PHP SDK๋ฅผ ์ค์นํ์ธ์.
Python
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Python ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Python SDK๋ฅผ ์ค์นํฉ๋๋ค.
Ruby
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Ruby ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Ruby SDK๋ฅผ ์ค์นํฉ๋๋ค.
API
์ด ์์์์๋ curl์ HTTP ํด๋ผ์ด์ธํธ๋ก ์ฌ์ฉํ์ฌ API ์ฌ์ฉ์ ๋ณด์ฌ์ค๋๋ค. ์ก์ธ์ค ์ ์ด์ ๋ํ ์์ธํ ๋ด์ฉ์ Cloud KMS API ์ก์ธ์ค๋ฅผ ์ฐธ์กฐํ์ธ์.
CryptoKeyVersions.getPublicKey ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๊ณต๊ฐ ํค๋ฅผ ๊ฒ์ํฉ๋๋ค.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION/publicKey?public_key_format=PUBLIC_KEY_FORMAT" \ --request "GET" \ --header "authorization: Bearer TOKEN"
๋ค์์ ๋ฐ๊ฟ๋๋ค.
PROJECT_ID
: ํค๋ง์ด ํฌํจ๋ ํ๋ก์ ํธ์ ID์ ๋๋ค.LOCATION
: ํค๋ง์ Cloud KMS ์์น์ ๋๋ค.KEY_RING
: ํค๊ฐ ํฌํจ๋ ํค๋ง์ ์ด๋ฆ์ ๋๋ค.KEY_NAME
: ํค์ ์ด๋ฆ์ ๋๋ค.KEY_VERSION
: ํค ๋ฒ์ ๋ฒํธ์ ๋๋ค.PUBLIC_KEY_FORMAT
: ๊ณต๊ฐ ํค๋ฅผ ๋ด๋ณด๋ผ ํ์์ ๋๋ค. PQC ์๊ณ ๋ฆฌ์ฆ(๋ฏธ๋ฆฌ๋ณด๊ธฐ)์ ๊ฒฝ์ฐNIST_PQC
๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ํค์ ๊ฒฝ์ฐPEM
์ ์ฌ์ฉํ๊ฑฐ๋ ์ด ๋งค๊ฐ๋ณ์๋ฅผ ์๋ตํ ์ ์์ต๋๋ค.
PQC๊ฐ ์๋ ํค์ ๊ณต๊ฐ ํค ํ์์ ์๋ตํ๋ฉด ์ถ๋ ฅ์ ๋ค์๊ณผ ์ ์ฌํฉ๋๋ค.
{ "pem": "-----BEGIN PUBLIC KEY-----\nQ29uZ3JhdHVsYXRpb25zLCB5b3UndmUgZGlzY292ZX JlZCB0aGF0IHRoaXMgaXNuJ3QgYWN0dWFsbHkgYSBwdWJsaWMga2V5ISBIYXZlIGEgbmlj ZSBkYXkgOik=\n-----END PUBLIC KEY-----\n", "algorithm": "ALGORITHM", "pemCrc32c": "2561089887", "name": "projects/PROJECT_ID/locations/LOCATION/keyRings/ KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/ KEY_VERSION", "protectionLevel": "PROTECTION_LEVEL" }
๊ณต๊ฐ ํค ํ์์ด
NIST_PQC
์ธ PQC ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฝ์ฐ ์ถ๋ ฅ์ ๋ค์๊ณผ ๋น์ทํฉ๋๋ค.{ "publicKeyFormat": "NIST_PQC", "publicKey": { "crc32cChecksum": "1985843562", "data": "kdcOIrFCC5kN8S4i0+R+AoSc9gYIJ9jEQ6zG235ZmCQ=" } "algorithm": "ALGORITHM", "name": "projects/PROJECT_ID/locations/LOCATION/keyRings/ KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/ KEY_VERSION", "protectionLevel": "PROTECTION_LEVEL" }
๊ณต๊ฐ ํค๋ฅผ JWK ํ์์ผ๋ก ๋ณํ
Cloud KMS๋ฅผ ์ฌ์ฉํ๋ฉด PEM ํ์์ผ๋ก ๊ณต๊ฐ ํค๋ฅผ ๊ฒ์ํ ์ ์์ต๋๋ค. ์ผ๋ถ ์ ํ๋ฆฌ์ผ์ด์ ์๋ JSON ์น ํค(JWK)์ ๊ฐ์ ๋ค๋ฅธ ํค ํ์์ด ํ์ํ ์ ์์ต๋๋ค. JWK ํ์์ ๋ํ ์์ธํ ๋ด์ฉ์ RFC 7517์ ์ฐธ์กฐํ์ธ์.
๊ณต๊ฐ ํค๋ฅผ JWK ํ์์ผ๋ก ๋ณํํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฆ ๋๋ค.
Go
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Go ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Go SDK๋ฅผ ์ค์นํฉ๋๋ค.
Java
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ ์๋ฐ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS ์๋ฐ SDK๋ฅผ ์ค์นํฉ๋๋ค.
Python
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Python ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Python SDK๋ฅผ ์ค์นํฉ๋๋ค.
๋น๋์นญ ํค์ ๋ํ ์ก์ธ์ค ์ ์ด
์๋ช ์ ๋๋ ๊ฒ์ฆ์์๊ฒ๋ ๋น๋์นญ ํค์ ๋ํ ์ ์ ํ ๊ถํ ๋๋ ์ญํ ์ด ํ์ํฉ๋๋ค.
์๋ช ์ ์ํํ ์ฌ์ฉ์ ๋๋ ์๋น์ค์ ๊ฒฝ์ฐ ๋น๋์นญ ํค์ ๋ํ
cloudkms.cryptoKeyVersions.useToSign
๊ถํ์ ๋ถ์ฌํฉ๋๋ค.๊ณต๊ฐ ํค๋ฅผ ๊ฒ์ํ ์ฌ์ฉ์ ๋๋ ์๋น์ค์ ๋น๋์นญ ํค์ ๋ํ
cloudkms.cryptoKeyVersions.viewPublicKey
๋ฅผ ๋ถ์ฌํฉ๋๋ค. ๊ณต๊ฐ ํค๋ ์๋ช ๊ฒ์ฆ์ ํ์ํฉ๋๋ค.
๊ถํ ๋ฐ ์ญํ ์์ Cloud KMS ์ถ์ ๋ฒ์ ์ ๊ถํ ๋ฐ ์ญํ ์ ๋ํด ์์๋ณด์ธ์.
MAC ์๋ช ํค ๋ง๋ค๊ธฐ
์ฝ์
Google Cloud ์ฝ์์์ ํค ๊ด๋ฆฌ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
ํค๋ฅผ ๋ง๋ค ํค๋ง์ ์ด๋ฆ์ ํด๋ฆญํฉ๋๋ค.
ํค ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
ํค ์ด๋ฆ์ ํค์ ์ด๋ฆ์ ์ ๋ ฅํฉ๋๋ค.
๋ณดํธ ์์ค์์ ์ํํธ์จ์ด ๋๋ HSM์ ์ ํํฉ๋๋ค.
ํค ์๋ฃ์์ ์์ฑ๋ ํค๋ฅผ ์ ํํฉ๋๋ค.
์ฉ๋์์ MAC ์๋ช /ํ์ธ์ ์ ํํฉ๋๋ค.
์ ํ์ฌํญ: ์๊ณ ๋ฆฌ์ฆ์์ HMAC ์๋ช ์๊ณ ๋ฆฌ์ฆ์ ์ ํํฉ๋๋ค.
๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
gcloud
๋ช ๋ น์ค์์ Cloud KMS๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ ์ต์ ๋ฒ์ ์ Google Cloud CLI๋ก ์ค์น ๋๋ ์ ๊ทธ๋ ์ด๋ํ์ธ์.
gcloud kms keys create KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --purpose "mac" \ --default-algorithm "ALGORITHM" \ --protection-level "PROTECTION_LEVEL"
๋ค์์ ๋ฐ๊ฟ๋๋ค.
KEY_NAME
: ํค์ ์ด๋ฆ์ ๋๋ค.KEY_RING
: ํค๊ฐ ํฌํจ๋ ํค๋ง์ ์ด๋ฆ์ ๋๋ค.LOCATION
: ํค๋ง์ Cloud KMS ์์น์ ๋๋ค.ALGORITHM
: HMAC ์๋ช ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค(์:hmac-sha256
). ์ง์๋๋ ๋ชจ๋ HMAC ์๊ณ ๋ฆฌ์ฆ์ ๋ณด๋ ค๋ฉด HMAC ์๋ช ์๊ณ ๋ฆฌ์ฆ์ ์ฐธ์กฐํ์ธ์.PROTECTION_LEVEL
: ํค์ ๋ณดํธ ์์ค์ ๋๋ค(์:hsm
).software
ํค์--protection-level
ํ๋๊ทธ๋ ์๋ตํด๋ ๋ฉ๋๋ค.
๋ชจ๋ ํ๋๊ทธ ๋ฐ ๊ฐ๋ฅํ ๊ฐ์ ๋ํ ์ ๋ณด๋ฅผ ๋ณด๋ ค๋ฉด
--help
ํ๋๊ทธ์ ํจ๊ป ๋ช ๋ น์ด๋ฅผ ์คํํ์ธ์.C#
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ C# ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS C# SDK๋ฅผ ์ค์นํฉ๋๋ค.
Go
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Go ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Go SDK๋ฅผ ์ค์นํฉ๋๋ค.
Java
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ ์๋ฐ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS ์๋ฐ SDK๋ฅผ ์ค์นํฉ๋๋ค.
Node.js
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Node.js ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Node.js SDK๋ฅผ ์ค์นํฉ๋๋ค.
PHP
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Google Cloud์์ PHP ์ฌ์ฉ์ ๊ดํด ์์๋ณด๊ณ Cloud KMS PHP SDK๋ฅผ ์ค์นํ์ธ์.
Python
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Python ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Python SDK๋ฅผ ์ค์นํฉ๋๋ค.
Ruby
์ด ์ฝ๋๋ฅผ ์คํํ๋ ค๋ฉด ๋จผ์ Ruby ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ๊ณ Cloud KMS Ruby SDK๋ฅผ ์ค์นํฉ๋๋ค.
API
์ด ์์์์๋ curl์ HTTP ํด๋ผ์ด์ธํธ๋ก ์ฌ์ฉํ์ฌ API ์ฌ์ฉ์ ๋ณด์ฌ์ค๋๋ค. ์ก์ธ์ค ์ ์ด์ ๋ํ ์์ธํ ๋ด์ฉ์ Cloud KMS API ์ก์ธ์ค๋ฅผ ์ฐธ์กฐํ์ธ์.
ํค๋ฅผ ๋ง๋ค๋ ค๋ฉด
CryptoKey.create
๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?crypto_key_id=KEY_NAME" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data '{"purpose": "MAC", "versionTemplate": { "protectionLevel": "PROTECTION_LEVEL", "algorithm": "ALGORITHM" }}'
๋ค์์ ๋ฐ๊ฟ๋๋ค.
PROJECT_ID
: ํค๋ง์ด ํฌํจ๋ ํ๋ก์ ํธ์ ID์ ๋๋ค.LOCATION
: ํค๋ง์ Cloud KMS ์์น์ ๋๋ค.KEY_RING
: ํค๊ฐ ํฌํจ๋ ํค๋ง์ ์ด๋ฆ์ ๋๋ค.KEY_NAME
: ํค์ ์ด๋ฆ์ ๋๋ค.PROTECTION_LEVEL
: ํค์ ๋ณดํธ ์์ค์ ๋๋ค(์:SOFTWARE
๋๋HSM
).ALGORITHM
: HMAC ์๋ช ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค(์:HMAC_SHA256
). ์ง์๋๋ ๋ชจ๋ HMAC ์๊ณ ๋ฆฌ์ฆ์ ๋ณด๋ ค๋ฉด HMAC ์๋ช ์๊ณ ๋ฆฌ์ฆ์ ์ฐธ์กฐํ์ธ์.
๋ค์ ๋จ๊ณ
- ํค ์ํ์ ๋ํด ์์๋ณด์ธ์.
- ์๋ช ์์ฑ ๋ฐ ๊ฒ์ฆ์ ๋ํด ์์๋ณด์ธ์.
- RSA ํค๋ก ๋ฐ์ดํฐ ์ํธํ ๋ฐ ๋ณตํธํ์ ๋ํด ์์๋ณด์ธ์.
- ๊ณต๊ฐ ํค ๊ฒ์์ ๋ํด ์์๋ณด์ธ์.
-