๋ฃจํธ ์ธ์ฆ ๊ธฐ๊ด ๋ง๋ค๊ธฐ
์ด ํ์ด์ง์์๋ CA ํ์์ ๋ฃจํธ ์ธ์ฆ ๊ธฐ๊ด (CA)์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
๋ฃจํธ CA๋ ๊ณต๊ฐ ํค ์ธํ๋ผ(PKI) ๊ณ์ธต ๊ตฌ์กฐ์ ๋งจ ์์ ์์ผ๋ฉฐ PKI์ ์ ๋ขฐ ์ต์ปค๋ฅผ ํ์ฑํฉ๋๋ค. PKI์์ ์ธ์ฆ์๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ํจ๊ป ์ฌ์ฉํ๋ ค๋ฉด ๊ธฐ๊ธฐ, ์ํํธ์จ์ด ๋๋ ๊ตฌ์ฑ์์๊ฐ PKI๋ฅผ ์ ๋ขฐํด์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด ๋ฃจํธ CA๋ฅผ ์ ๋ขฐํ๋๋ก ๊ธฐ๊ธฐ, ์ํํธ์จ์ด, ๊ตฌ์ฑ์์๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ฃจํธ CA์์ ๋ฐ๊ธ๋ ๋ชจ๋ ์ธ์ฆ์๋ฅผ ์ ๋ขฐํ ์ ์์ต๋๋ค.
์์ํ๊ธฐ ์ ์
- CA Service ์์
๊ด๋ฆฌ์(
roles/privateca.caManager
) ๋๋ CA Service ๊ด๋ฆฌ์(roles/privateca.admin
) IAM ์ญํ ์ด ์์ด์ผ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ IAM ์ ์ฑ ๊ตฌ์ฑ์ ์ฐธ๊ณ ํ์ธ์. - CA ํ์ ๋ง๋ญ๋๋ค.
- CA ์ค์ ํ์ธ
๋ฃจํธ CA ๋ง๋ค๊ธฐ
๋ฃจํธ CA์๋ ์์ฒด ์๋ช ์ธ์ฆ์๊ฐ ์์ผ๋ฉฐ, ์ด๋ ํด๋ผ์ด์ธํธ์ ํธ๋ฌ์คํธ ์ ์ฅ์์ ๋ฐฐํฌํด์ผ ํฉ๋๋ค. ๋ฃจํธ CA์ ์ธ์ฆ์๋ ์ธ์ฆ์ ์ฒด์ธ์ ๋งจ ์์ ์์ต๋๋ค. ๋ค๋ฅธ CA๋ก ์ด CA ์ธ์ฆ์๋ฅผ ํด์งํ ์ ์์ต๋๋ค. ๋ฃจํธ CA์ CRL์ ๋ฃจํธ CA๊ฐ ๋ฐ๊ธํ ๋ค๋ฅธ ์ธ์ฆ์์๋ง ์ ์ฉ๋๋ฉฐ ๋ฃจํธ CA ์์ฒด์๋ ์ ์ฉ๋์ง ์์ต๋๋ค.
๊ธฐ์กด CA ํ ๋๋ ์ CA ํ์ ๋ฃจํธ CA๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๋ค์ ์๋ด์์๋ ๊ธฐ์กด ํ์ ์ฌ์ฉํฉ๋๋ค.
์ฝ์
๊ธฐ์กด CA ํ์ ๋ฃจํธ CA๋ฅผ ๋ง๋ค๋ ค๋ฉด ๋ค์์ ์ํํ์ธ์.
Google Cloud ์ฝ์์์ Certificate Authority Service ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
CA ๊ด๋ฆฌ์ ํญ์ ํด๋ฆญํฉ๋๋ค.
CA ๋ง๋ค๊ธฐ
ํผ์น๊ธฐ ํ์ดํ๋ฅผ ํด๋ฆญํ ๋ค์ ๊ธฐ์กด CA ํ์ CA ๋ง๋ค๊ธฐ๋ฅผ ์ ํํฉ๋๋ค.
CA ํ ์ ํ
๋ชฉ๋ก์์ ๊ธฐ์กด CA ํ์ ์ ํํ๊ณ ๊ณ์์ ํด๋ฆญํฉ๋๋ค.
CA ์ ํ ์ ํ
- ์ ํ์์ ๋ฃจํธ CA๋ฅผ ์ ํํฉ๋๋ค.
- ์ ํจ ๊ธฐ๊ฐ ํ๋์ CA ์ธ์ฆ์์์ ๋ฐ๊ธํ ์ธ์ฆ์๊ฐ ์ ํจํด์ผ ํ ๊ธฐ๊ฐ์ ์ ๋ ฅํฉ๋๋ค.
- ์ด๊ธฐํ๋ ์ํ์์ ์์ฑ๋ CA์ ์์ ์ํ๋ฅผ ์ ํํฉ๋๋ค.
- ๊ณ์์ ํด๋ฆญํฉ๋๋ค.
- ์กฐ์ง(O) ํ๋์ ํ์ฌ ์ด๋ฆ์ ์ ๋ ฅํฉ๋๋ค.
- ์ ํ์ฌํญ: ์กฐ์ง ๋จ์(OU) ํ๋์ ํ์ฌ ๋ถ์ ๋๋ ์ฌ์ ๋ถ๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- ์ ํ์ฌํญ: ๊ตญ๊ฐ ์ด๋ฆ (C) ํ๋์ 2์๋ฆฌ ๊ตญ๊ฐ ์ฝ๋๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- ์ ํ์ฌํญ: ์ฃผ/๋ ์ด๋ฆ ํ๋์ ์ฃผ ์ด๋ฆ์ ์ ๋ ฅํฉ๋๋ค.
- ์ ํ์ฌํญ: ์ง์ญ ์ด๋ฆ ํ๋์ ๋์ ์ด๋ฆ์ ์ ๋ ฅํฉ๋๋ค.
- CA ์ผ๋ฐ ์ด๋ฆ(CN) ํ๋์ CA ์ด๋ฆ์ ์ ๋ ฅํฉ๋๋ค.
- ๊ณ์์ ํด๋ฆญํฉ๋๋ค.
- ์๊ตฌ์ฌํญ์ ๊ฐ์ฅ ๋ถํฉํ๋ ํค ์๊ณ ๋ฆฌ์ฆ์ ์ ํํฉ๋๋ค. ์ ์ ํ ํค ์๊ณ ๋ฆฌ์ฆ ๊ฒฐ์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ ํค ์๊ณ ๋ฆฌ์ฆ ์ ํ์ ์ฐธ์กฐํ์ธ์.
- ๊ณ์์ ํด๋ฆญํฉ๋๋ค.
- Google ๊ด๋ฆฌํ ๋๋ ๊ณ ๊ฐ ๊ด๋ฆฌํ Cloud Storage ๋ฒํท ์ฌ์ฉ ์ฌ๋ถ๋ฅผ ์ ํํฉ๋๋ค.
- Google ๊ด๋ฆฌํ Cloud Storage ๋ฒํท์ ๊ฒฝ์ฐ CA Service๋ CA์ ๋์ผํ ์์น์ Google ๊ด๋ฆฌํ ๋ฒํท์ ๋ง๋ญ๋๋ค.
- ๊ณ ๊ฐ ๊ด๋ฆฌ Cloud Storage ๋ฒํท์ ๊ฒฝ์ฐ ์ฐพ์๋ณด๊ธฐ๋ฅผ ํด๋ฆญํ๊ณ ๊ธฐ์กด Cloud Storage ๋ฒํท ์ค ํ๋๋ฅผ ์ ํํฉ๋๋ค.
- ๊ณ์์ ํด๋ฆญํฉ๋๋ค.
๋ค์ ๋จ๊ณ๋ ์ ํ์ฌํญ์ ๋๋ค.
CA์ ๋ผ๋ฒจ์ ์ถ๊ฐํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
- ํญ๋ชฉ ์ถ๊ฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ํค 1 ํ๋์ ๋ผ๋ฒจ ํค๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- ๊ฐ 1 ํ๋์ ๋ผ๋ฒจ ๊ฐ์ ์ ๋ ฅํฉ๋๋ค.
- ๋ค๋ฅธ ๋ผ๋ฒจ์ ์ถ๊ฐํ๋ ค๋ฉด ํญ๋ชฉ ์ถ๊ฐ๋ฅผ ํด๋ฆญํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ 2๋จ๊ณ์ 3๋จ๊ณ์ ์ค๋ช ๋ ๋๋ก ๋ผ๋ฒจ ํค์ ๊ฐ์ ์ถ๊ฐํฉ๋๋ค.
- ๊ณ์์ ํด๋ฆญํฉ๋๋ค.
๋ชจ๋ ์ค์ ์ ์ ์คํ๊ฒ ๊ฒํ ํ ๋ค์ ์๋ฃ๋ฅผ ํด๋ฆญํ์ฌ CA๋ฅผ ๋ง๋ญ๋๋ค.
gcloud
๊ธฐ์กด CA ํ์์ ์ ๋ฃจํธ CA๋ฅผ ๋ง๋ค๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
gcloud privateca roots create ROOT_CA_ID \ --location=LOCATION \ --pool=POOL_ID \ --key-algorithm=KEY_ALGORITHM \ --subject="CN=my-ca, O=Test LLC"
๋ค์์ ๋ฐ๊ฟ๋๋ค.
- ROOT_CA_ID: CA์ ์ด๋ฆ์ ๋๋ค.
- LOCATION: CA ํ์ ์์น์ ๋๋ค.
- POOL_ID: CA ํ์ ์ด๋ฆ์ ๋๋ค.
- KEY_ALGORITHM: Cloud KMS ํค๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉํ ์๊ณ ๋ฆฌ์ฆ์
๋๋ค. ์ด ํ๋๊ทธ๋ ์ ํ์ฌํญ์
๋๋ค. ์ด ํ๋๊ทธ๋ฅผ ํฌํจํ์ง ์์ผ๋ฉด ํค ์๊ณ ๋ฆฌ์ฆ์ด ๊ธฐ๋ณธ์ ์ผ๋ก
rsa-pkcs1-4096-sha256
์ผ๋ก ์ค์ ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ --key-algorithm ํ๋๊ทธ๋ฅผ ์ฐธ๊ณ ํ์ธ์.
๊ธฐ๋ณธ์ ์ผ๋ก CA๋
STAGED
์ํ๋ก ์์ฑ๋ฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก CA๋ฅผ ์ฌ์ฉ ์ค์ ํ๋ ค๋ฉด--auto-enable
ํ๋๊ทธ๋ฅผ ํฌํจํฉ๋๋ค.CA ์ธ์ฆ์ ๋ฐ CRL์ ๊ฒ์ํ๋ ๋ฐ ๊ณ ๊ฐ ๊ด๋ฆฌ Cloud Storage ๋ฒํท์ ์ฌ์ฉํ๋ ค๋ฉด ๋ช ๋ น์ด์
--bucket bucket-name
์ ์ถ๊ฐํฉ๋๋ค. bucket-name์ Cloud Storage ๋ฒํท ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ๋๋ค.์ ์ฒด ์ค์ ๋ชฉ๋ก์ ๋ณด๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
gcloud privateca roots create --help
Terraform
Google ์์ ๋ฐ Google ๊ด๋ฆฌ ์ํธํ ํค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฃจํธ CA๋ฅผ ๋ง๋ค๋ ค๋ฉด ๋ค์ ์ํ ๊ตฌ์ฑ์ ์ฌ์ฉํฉ๋๋ค.
์์ฒด ๊ด๋ฆฌ ํค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฃจํธ CA๋ฅผ ๋ง๋ค๋ ค๋ฉด ๋ค์ ์ํ ๊ตฌ์ฑ์ ์ฌ์ฉํฉ๋๋ค.
Go
CA Service์ ์ธ์ฆํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ค์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ธ์ฆ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
์๋ฐ
CA Service์ ์ธ์ฆํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ค์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ธ์ฆ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
Python
CA Service์ ์ธ์ฆํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ค์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ธ์ฆ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
REST API
๋ฃจํธ CA๋ฅผ ๋ง๋ญ๋๋ค.
HTTP ๋ฉ์๋ ๋ฐ URL:
POST https://privateca.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/caPools/POOL_ID/certificateAuthorities?certificate_authority_id=ROOT_CA_ID
JSON ์์ฒญ ๋ณธ๋ฌธ:
{ "type": "SELF_SIGNED", "lifetime": { "seconds": 315576000, "nanos": 0 }, "config": { "subject_config": { "subject": { "organization": "ORGANIZATION_NAME", "common_name": "COMMON_NAME" } }, "x509_config":{ "ca_options":{ "is_ca":true }, "key_usage":{ "base_key_usage":{ "cert_sign":true, "crl_sign":true } } } }, "key_spec":{ "algorithm":"RSA_PKCS1_4096_SHA256" } }
์์ฒญ์ ๋ณด๋ด๋ ค๋ฉด ๋ค์ ์ต์ ์ค ํ๋๋ฅผ ํผ์นฉ๋๋ค.
๋ค์๊ณผ ๋น์ทํ JSON ์๋ต์ด ํ์๋ฉ๋๋ค.
{ "name": "projects/PROJECT_ID/locations/LOCATION/operations/operation-UUID", "metadata": {...}, "done": false }
์์ ์ด ์๋ฃ๋ ๋๊น์ง ์์ ์ ํด๋งํฉ๋๋ค.
HTTP ๋ฉ์๋ ๋ฐ URL:
GET https://privateca.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/operation-UUID
์์ฒญ์ ๋ณด๋ด๋ ค๋ฉด ๋ค์ ์ต์ ์ค ํ๋๋ฅผ ํผ์นฉ๋๋ค.
๋ค์๊ณผ ๋น์ทํ JSON ์๋ต์ด ํ์๋ฉ๋๋ค.
{ "name": "projects/PROJECT_ID/locations/LOCATION/operations/operation-UUID", "metadata": {...}, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.security.privateca.v1.CertificateAuthority", "name": "...", } }
CA๊ฐ ์์๋๋ก ์๋ํ๋์ง ํ์ธ๋๋ฉด CA ํ์ ์ํ ๋ถํ ๋ถ์ฐ ์ธ์ฆ์์ ๋ฐ๊ธ์ ์์ํ๋๋ก ์ฌ์ฉ ์ค์ ํ ์ ์์ต๋๋ค.
๋ฃจํธ CA ์ฌ์ฉ ์ค์
gcloud
๋ฃจํธ CA๋ฅผ ์ฌ์ฉ ์ค์ ํ๋ ค๋ฉด ๋ค์ gcloud
๋ช
๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
gcloud privateca roots enable ROOT_CA_ID --location=LOCATION --pool=POOL_ID
๋ค์์ ๋ฐ๊ฟ๋๋ค.
- ROOT_CA_ID: CA์ ์ด๋ฆ์ ๋๋ค.
- LOCATION: CA ํ์ ์์น์ ๋๋ค. ์ ์ฒด ์์น ๋ชฉ๋ก์ ์์น๋ฅผ ์ฐธ๊ณ ํ์ธ์.
- POOL_ID: CA ํ์ ์ด๋ฆ์ ๋๋ค.
Terraform
Terraform์ ์ฌ์ฉํ์ฌ ๋ฃจํธ CA๋ฅผ ๋ง๋๋ ๊ฒฝ์ฐ ๋ฃจํธ CA๋ ์์ฑ ์ ์ฌ์ฉ ์ค์ ๋ฉ๋๋ค. STAGED
์ํ์ ๋ฃจํธ CA๋ฅผ ๋ง๋ค๋ ค๋ฉด CA๋ฅผ ๋ง๋ค ๋ desired_state
ํ๋๋ฅผ STAGED
๋ก ์ค์ ํฉ๋๋ค.
CA ์์ฑ ํ desired_state
ํ๋๋ฅผ ENABLED
๋๋ DISABLED
๋ก ์ค์ ํ ์ ์์ต๋๋ค.
Go
CA Service์ ์ธ์ฆํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ค์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ธ์ฆ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
์๋ฐ
CA Service์ ์ธ์ฆํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ค์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ธ์ฆ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
Python
CA Service์ ์ธ์ฆํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ค์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ธ์ฆ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
REST API
CA ํ์์ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํ๋๋ก CA๋ฅผ ์ฌ์ฉ ์ค์ ํฉ๋๋ค.
HTTP ๋ฉ์๋ ๋ฐ URL:
POST https://privateca.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/caPools/POOL_ID/certificateAuthorities/ROOT_CA_ID:enable
์์ฒญ์ ๋ณด๋ด๋ ค๋ฉด ๋ค์ ์ต์ ์ค ํ๋๋ฅผ ํผ์นฉ๋๋ค.
๋ค์๊ณผ ๋น์ทํ JSON ์๋ต์ด ํ์๋ฉ๋๋ค.
{ "name": "projects/PROJECT_ID/locations/LOCATION/operations/operation-UUID", "metadata": {...}, "done": false }
์์ ์ด ์๋ฃ๋ ๋๊น์ง ์์ ์ ํด๋งํฉ๋๋ค.
HTTP ๋ฉ์๋ ๋ฐ URL:
GET https://privateca.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/operation-UUID
์์ฒญ์ ๋ณด๋ด๋ ค๋ฉด ๋ค์ ์ต์ ์ค ํ๋๋ฅผ ํผ์นฉ๋๋ค.
๋ค์๊ณผ ๋น์ทํ JSON ์๋ต์ด ํ์๋ฉ๋๋ค.
{ "name": "projects/PROJECT_ID/locations/LOCATION/operations/operation-UUID", "metadata": {...}, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.security.privateca.v1.CertificateAuthority", "name": "...", } }
CA ํ ์คํธ
CA๊ฐ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํ ์ ์๋์ง ํ์ธํ๋ ค๋ฉด ์ฐ๊ฒฐ๋ CA ํ์์ ์ธ์ฆ์๋ฅผ ์์ฒญํ๊ณ --ca
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ํ
์คํธํ CA ์ด๋ฆ์ ๋ช
์์ ์ผ๋ก ์ธ๊ธํฉ๋๋ค.
๋ค์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ CA ํ์์ ์ธ์ฆ์๋ฅผ ์์ฒญํ ์ ์์ต๋๋ค.
- CA Service์์ ์๋์ผ๋ก ๋น๊ณต๊ฐ ๋๋ ๊ณต๊ฐ ํค๋ฅผ ๋ง๋ค๋๋ก ํฉ๋๋ค.
- ์์ฒด ๋น๊ณต๊ฐ/๊ณต๊ฐ ํค๋ฅผ ์์ฑํ๊ณ ์ธ์ฆ์ ์๋ช ์์ฒญ(CSR) ์ ์ถํ๊ธฐ
์๋ ์์ฑ๋ ๋น๊ณต๊ฐ ํค๋ ๊ณต๊ฐ ํค๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ์ฝ๊ฒ CA ํ์ CA์์ ์ธ์ฆ์๋ฅผ ์์ฒญํ ์ ์์ต๋๋ค. ์ด ์น์ ์์๋ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ CA ํ ์คํธ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
์๋ ์์ฑ๋ ๋น๊ณต๊ฐ ํค๋ ๊ณต๊ฐ ํค๋ฅผ ์ฌ์ฉํ์ฌ CA ํ์ CA์์ ์ธ์ฆ์๋ฅผ ์์ฒญํ๋ ค๋ฉด ๋ค์ gcloud
๋ช
๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
gcloud privateca certificates create \
--issuer-pool=POOL_ID \
--issuer-location=ISSUER_LOCATION \
--ca=ROOT_CA_ID \
--generate-key \
--key-output-file=KEY_FILENAME \
--cert-output-file=CERT_FILENAME \
--dns-san=DNS_NAME
๋ค์์ ๋ฐ๊ฟ๋๋ค.
- POOL_ID: CA ํ์ ์ด๋ฆ์ ๋๋ค.
- ISSUER_LOCATION: ๋์งํธ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํ ์ธ์ฆ ๊ธฐ๊ด (CA)์ ์์น์ ๋๋ค.
- ROOT_CA_ID: ํ ์คํธํ CA์ ๊ณ ์ ์๋ณ์์ ๋๋ค.
- KEY_FILENAME: ์์ฑ๋ ํค๊ฐ PEM ํ์์ผ๋ก ์์ฑ๋๋ ํ์ผ์ ๋๋ค.
- CERT_FILENAME: ๊ฒฐ๊ณผ๋ก ์์ฑ๋ PEM ์ธ์ฝ๋ฉ ์ธ์ฆ์ ์ฒด์ธ ํ์ผ์ด ์์ฑ๋๋ ํ์ผ์ ๋๋ค. ์ธ์ฆ์ ์ฒด์ธ์ ์์๋ ๋ฆฌํ์์ ๋ฃจํธ์ ๋๋ค.
DNS_NAME: ์ผํ๋ก ๊ตฌ๋ถ๋ ํ๋ ์ด์์ DNS ์ฃผ์ฒด ๋์ฒด ์ด๋ฆ (SAN)์ ๋๋ค.
--generate-key
ํ๋๊ทธ๋ ๋จธ์ ์ ์ RSA-2048 ๋น๊ณต๊ฐ ํค๋ฅผ ์์ฑํฉ๋๋ค.
์ธ์ฆ์ ์๋ช ์์ฒญ (CSR)์ ์ฌ์ฉํ์ฌ CA ํ์ CA์์ ์ธ์ฆ์๋ฅผ ์์ฒญํ๊ฑฐ๋ ์ธ์ฆ์ ์์ฒญ์ ๋ํด ์์ธํ ์์๋ณด๋ ค๋ฉด ์ธ์ฆ์ ์์ฒญ ๋ฐ ๋ฐ๊ธ๋ ์ธ์ฆ์ ๋ณด๊ธฐ๋ฅผ ์ฐธ๊ณ ํ์ธ์.
์ธ์ฆ ๊ธฐ๊ด ํด๋ก
๊ธฐ์กด CA๋ฅผ ํด๋ก ํ์ฌ ํด๋น CA๋ฅผ ๊ฐฑ์ ํ๊ฑฐ๋ ๋์ผํ ๊ตฌ์ฑ์ผ๋ก ์ CA๋ฅผ ๋ง๋ค๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
gcloud privateca roots create NEW_CA_ID \
--location=LOCATION \
--pool=POOL_ID \
--from-ca=EXISTING_CA_ID \
--key-algorithm "ec-p384-sha384"
๋ค์์ ๋ฐ๊ฟ๋๋ค.
- NEW_CA_ID: ์ CA์ ๊ณ ์ ์๋ณ์์ ๋๋ค.
- LOCATION: CA ํ์ ์์น์ ๋๋ค.
- POOL_ID: ์ CA๋ฅผ ๋ง๋ค CA ํ์ ์ด๋ฆ์ ๋๋ค.
- EXISTING_CA_ID: ์์ค CA์ ID ๋๋ ์์ค CA์ ์ ๊ทํ๋ ์๋ณ์์ ๋๋ค.
--from-ca
ํ๋๊ทธ๋ ๋ฃจํธ ๋ฐ ํ์ CA ๋ง๋ค๊ธฐ์ ์ง์๋ฉ๋๋ค. ๊ธฐ์กด CA๋ ์ CA์ ๋์ผํ CA ํ์ ์์ด์ผ ํฉ๋๋ค.
--key-algorithm
ํ๋๊ทธ๋ ๊ธฐ์กด CA์์ (Cloud KMS ํค ๋ฒ์ ๋ฐ Cloud Storage ๋ฒํท์ ์ ์ธํ) ๋ชจ๋ CA ๊ตฌ์ฑ์ ๋ณต์ฌํฉ๋๋ค.
ํ์ง๋ง ์ ์ ํ ํ๋๊ทธ๋ฅผ ๋ช
์์ ์ผ๋ก ์ ๊ณตํ์ฌ ์ CA์ ๊ตฌ์ฑ ๊ฐ์ ์ฌ์ ์ํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ ์ฃผ์ฒด๋ฅผ ์ฌ์ฉํ๋๋ก `--subject SUBJECT๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
--key-algorithm
ํ๋๊ทธ๋ฅผ ์๋ตํ๋ฉด ์๊ณ ๋ฆฌ์ฆ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ์ง์ ๋ฉ๋๋ค.
- ๋ฃจํธ CA์ ๊ฒฝ์ฐ
rsa-pkcs1-4096-sha256
- ํ์ CA์ ๊ฒฝ์ฐ
rsa-pkcs1-2048-sha256
์ด gcloud
๋ช
๋ น์ด์ ๋ํ ์์ธํ ๋ด์ฉ์ gcloud privateca roots create๋ฅผ ์ฐธ๊ณ ํ์ธ์.
๋ค์ ๋จ๊ณ
- ํ์ CA๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์.
- ์ธ์ฆ์ ์์ฒญ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์.
- ํ ํ๋ฆฟ ๋ฐ ๋ฐ๊ธ ์ ์ฑ ์ ๋ํด ์์๋ด ๋๋ค.