์™ธ๋ถ€ CA์—์„œ ํ•˜์œ„ CA ๋งŒ๋“ค๊ธฐ

์ด ํŽ˜์ด์ง€์—์„œ๋Š” ์™ธ๋ถ€ ๋ฃจํŠธ CA์— ์—ฐ๊ฒฐ๋˜๋Š” ํ•˜์œ„ ์ธ์ฆ ๊ธฐ๊ด€(CA)์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋ฃจํŠธ CA์™€ ํ•˜์œ„ CA๊ฐ€ ํฌํ•จ๋œ ๊ธฐ์กด ๊ณต๊ฐœ ํ‚ค ์ธํ”„๋ผ(PKI) ๊ณ„์ธต ๊ตฌ์กฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋™์ผํ•œ ๋ฃจํŠธ CA๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์™ธ๋ถ€ ๋ฃจํŠธ CA์— ์—ฐ๊ฒฐ๋œ CA Service์˜ ํ•˜์œ„ CA๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์™ธ๋ถ€ ๋ฃจํŠธ CA์˜ ํ‚ค ๋ฐ ์ž‘์—…์€ Google Cloud ์™ธ๋ถ€์— ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€ ๋ฃจํŠธ CA๋ฅผ ํ†ตํ•ด์„œ๋งŒ ํ•˜์œ„ CA ์ธ์ฆ์„œ๋ฅผ Google Cloud์— ๋ฐœ๊ธ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์™ธ๋ถ€ ๋ฃจํŠธ CA๋ฅผ ์‹ ๋ขฐํ•˜๋Š” ๋ชจ๋“  ์›Œํฌ๋กœ๋“œ์—์„œ ํ•˜์œ„ CA๋ฅผ ์ฆ‰์‹œ ์‹ ๋ขฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ•˜์œ„ CA๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Ÿฐํƒ€์ž„ ์‹œ ์™ธ๋ถ€ ๋ฃจํŠธ CA์— ๋‹ค์‹œ ๋ฌธ์˜ํ•  ํ•„์š” ์—†์ด ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

  • CA Service ์ž‘์—… ๊ด€๋ฆฌ์ž(roles/privateca.caManager) ๋˜๋Š” CA Service ๊ด€๋ฆฌ์ž(roles/privateca.admin) IAM ์—ญํ• ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ IAM ์ •์ฑ… ๊ตฌ์„ฑ์„ ์ฐธ์กฐํ•˜์„ธ์š”.
  • ์™ธ๋ถ€ ๋ฃจํŠธ CA๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•˜์œ„ CA์˜ ์ด๋ฆ„, ์ œ๋ชฉ, ์œ ํšจ ๊ธฐ๊ฐ„, ํ‚ค ํฌ๊ธฐ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ CA ์„ค์ • ํ™•์ธ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์™ธ๋ถ€ CA์—์„œ ํ•˜์œ„ CA ๋งŒ๋“ค๊ธฐ

์™ธ๋ถ€ CA์—์„œ ํ•˜์œ„ CA๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ํ•˜์œ„ CA ์ธ์ฆ์„œ ์„œ๋ช… ์š”์ฒญ(CSR) ์ƒ์„ฑ: ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” ํ•˜์œ„ CA์˜ CSR์„ ์ƒ์„ฑํ•œ ๋‹ค์Œ CSR์„ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  2. ์™ธ๋ถ€ ๋ฃจํŠธ CA์—์„œ ์„œ๋ช…ํ•œ ํ•˜์œ„ CA ์ธ์ฆ์„œ ๊ฐ€์ ธ์˜ค๊ธฐ: ๋‘ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” ์„œ๋ช…์„ ์œ„ํ•ด CSR์„ ์™ธ๋ถ€ ๋ฃจํŠธ CA์— ์ œ์ถœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. CSR์„ ์ œ์ถœํ•˜๊ณ  ์„œ๋ช…๋œ ์ธ์ฆ์„œ๋ฅผ ์–ป๊ธฐ ์œ„ํ•œ ์™ธ๋ถ€ ๋ฃจํŠธ CA์˜ ํ•ด๋‹น ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  3. ์„œ๋ช…๋œ ํ•˜์œ„ CA ์ธ์ฆ์„œ๋ฅผ CA Service๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ: ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„๋Š” Google Cloud CLI ๋˜๋Š” Google Cloud ์ฝ˜์†”์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ช…๋œ PEM ์ธ์ฆ์„œ ์ฒด์ธ์„ ์—…๋กœ๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ์™ธ๋ถ€ ๋ฃจํŠธ CA์—์„œ ํ•˜์œ„ CA๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

CSR ๋งŒ๋“ค๊ธฐ

์ฝ˜์†”

  1. Google Cloud ์ฝ˜์†”์—์„œ ๋ณด์•ˆ > Certificate Authority Service ๋ฉ”๋‰ด๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    Certificate Authority Service๋กœ ์ด๋™

  2. CA ๊ด€๋ฆฌ์ž ํƒญ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  3. CA ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

CA ์œ ํ˜• ์„ ํƒ:

  1. ํ•˜์œ„ CA๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  2. ์œ ํšจ ๊ธฐ๊ฐ„ ํ•„๋“œ์— CA ์ธ์ฆ์„œ์—์„œ ๋ฐœ๊ธ‰ํ•œ ์ธ์ฆ์„œ๊ฐ€ ์œ ํšจํ•ด์•ผ ํ•  ๊ธฐ๊ฐ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ฃจํŠธ CA๊ฐ€ ์™ธ๋ถ€์— ์žˆ์Šต๋‹ˆ๋‹ค๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  4. CA ๋“ฑ๊ธ‰์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ž‘์—… ๋“ฑ๊ธ‰ ์„ ํƒ์„ ์ฐธ์กฐํ•˜์„ธ์š”.
  5. ๋ฆฌ์ „ํ™”์˜ ๋ชฉ๋ก์—์„œ CA ์œ„์น˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  6. ๋‹ค์Œ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
CA ์ฃผ์ฒด ์ด๋ฆ„ ๊ตฌ์„ฑ
  1. ์กฐ์ง(O) ํ•„๋“œ์— ํšŒ์‚ฌ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  2. ์„ ํƒ์‚ฌํ•ญ: ์กฐ์ง ๋‹จ์œ„(OU) ํ•„๋“œ์— ํšŒ์‚ฌ ๋ถ€์„œ ๋˜๋Š” ์‚ฌ์—…๋ถ€๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  3. ์„ ํƒ์‚ฌํ•ญ: ๊ตญ๊ฐ€ ์ด๋ฆ„ ํ•„๋“œ์— 2์ž๋ฆฌ ๊ตญ๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  4. ์„ ํƒ์‚ฌํ•ญ: ์ฃผ/๋„ ์ด๋ฆ„ ํ•„๋“œ์— ์ฃผ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  5. ์„ ํƒ์‚ฌํ•ญ: ์ง€์—ญ ์ด๋ฆ„ ํ•„๋“œ์— ๋„์‹œ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  6. CA ์ผ๋ฐ˜ ์ด๋ฆ„(CN) ํ•„๋“œ์— CA ์ด๋ฆ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  7. ํ’€ ID ํ•„๋“œ์— CA ํ’€ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. CA๋ฅผ ๋งŒ๋“  ํ›„์—๋Š” CA ํ’€์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  8. ๋‹ค์Œ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
CA ํ‚ค ํฌ๊ธฐ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌ์„ฑ
  1. ์š”๊ตฌ์‚ฌํ•ญ์— ๊ฐ€์žฅ ๋ถ€ํ•ฉํ•˜๋Š” ํ‚ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ํ‚ค ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฒฐ์ •์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ‚ค ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ ํƒ์„ ์ฐธ์กฐํ•˜์„ธ์š”.
  2. ๋‹ค์Œ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
CA ์•„ํ‹ฐํŒฉํŠธ ๊ตฌ์„ฑ

๋‹ค์Œ ๋‹จ๊ณ„๋Š” ์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋ฉด ๊ธฐ๋ณธ ์„ค์ •์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

  1. Google ๊ด€๋ฆฌํ˜• ๋˜๋Š” ์ž์ฒด ๊ด€๋ฆฌํ˜• Cloud Storage ๋ฒ„ํ‚ท ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  2. ์ž์ฒด ๊ด€๋ฆฌํ˜• Cloud Storage ๋ฒ„ํ‚ท์„ ์„ ํƒํ•˜์ง€ ์•Š์œผ๋ฉด CA Service๋Š” CA์™€ ๋™์ผํ•œ ์œ„์น˜์— Google ๊ด€๋ฆฌ ๋ฒ„ํ‚ท์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  3. ํ•ด์ง€ ์ธ์ฆ์„œ ๋ชฉ๋ก(CRL) ๋ฐ CA ์ธ์ฆ์„œ์˜ Cloud Storage ๋ฒ„ํ‚ท ๊ฒŒ์‹œ๋ฅผ ์ค‘์ง€ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  4. CRL ๋ฐ CA ์ธ์ฆ์„œ์˜ Cloud Storage ๋ฒ„ํ‚ท ๊ฒŒ์‹œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„ค์ •์„ ์ค‘์ง€ํ•˜๋ ค๋ฉด ์ „ํ™˜ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  5. ๋‹ค์Œ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
๋ผ๋ฒจ ์ถ”๊ฐ€

๋‹ค์Œ ๋‹จ๊ณ„๋Š” ์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

CA์— ๋ผ๋ฒจ์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. ํ•ญ๋ชฉ ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  2. ํ‚ค 1 ํ•„๋“œ์— ๋ผ๋ฒจ ํ‚ค๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ฐ’ 1 ํ•„๋“œ์— ๋ผ๋ฒจ ๊ฐ’์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  4. ๋‹ค๋ฅธ ๋ผ๋ฒจ์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ํ•ญ๋ชฉ ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ 2๋‹จ๊ณ„์™€ 3๋‹จ๊ณ„์— ์„ค๋ช…๋œ ๋Œ€๋กœ ๋ผ๋ฒจ ํ‚ค์™€ ๊ฐ’์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋‹ค์Œ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
์„ค์ • ๊ฒ€ํ† 

๋ชจ๋“  ์„ค์ •์„ ์‹ ์ค‘ํ•˜๊ฒŒ ๊ฒ€ํ† ํ•œ ๋‹ค์Œ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•˜์—ฌ CA๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

CSR ๋‹ค์šด๋กœ๋“œ

  1. ์ธ์ฆ ๊ธฐ๊ด€ ํŽ˜์ด์ง€์—์„œ ํ™œ์„ฑํ™”ํ•˜๋ ค๋Š” CA๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  2. ํ™œ์„ฑํ™”๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ๋Œ€ํ™”์ƒ์ž๊ฐ€ ์—ด๋ฆฌ๋ฉด CSR ๋‹ค์šด๋กœ๋“œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    CA์˜ CSR ๋‹ค์šด๋กœ๋“œ

gcloud

  1. ํ•˜์œ„ CA์˜ CA ํ’€์„ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ CA ํ’€ ๋งŒ๋“ค๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

    gcloud privateca pools create SUBORDINATE_POOL_ID
    

    SUBORDINATE_POOL_ID๋ฅผ CA ํ’€์˜ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  2. ์ƒ์„ฑ๋œ CA ํ’€์—์„œ ํ•˜์œ„ CA๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ gcloud ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ gcloud ๋ช…๋ น์–ด๋Š” CSR์„ ๋งŒ๋“ค๊ณ  ์ด๋ฅผ FILE_NAME ํŒŒ์ผ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

    gcloud privateca subordinates create SUBORDINATE_CA_ID \
      --pool=SUBORDINATE_POOL_ID \
      --create-csr --csr-output-file=FILE_NAME \
      --key-algorithm="ec-p256-sha256" \
      --subject="CN=Example Server TLS CA, O=Example LLC"
    

    ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • SUBORDINATE_CA_ID: ํ•˜์œ„ CA์˜ ๊ณ ์œ  ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค.
    • SUBORDINATE_POOL_ID: CA ํ’€ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
    • FILE_NAME: PEM์œผ๋กœ ์ธ์ฝ”๋”ฉ๋œ CSR์ด ์ž‘์„ฑ๋˜๋Š” ํŒŒ์ผ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

    --key-algorithm ํ”Œ๋ž˜๊ทธ๋Š” CA์˜ ๊ด€๋ฆฌํ˜• Cloud HSM ํ‚ค๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

    --subject ํ”Œ๋ž˜๊ทธ๋Š” ์ธ์ฆ์„œ ์ฃผ์ฒด์˜ X.501 ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

    gcloud privateca subordinates create ๋ช…๋ น์–ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ gcloud privateca subordinates create๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

CSR์ด ์ƒ์„ฑ๋˜๋ฉด ๋‹ค์Œ ๋ฌธ์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

Created Certificate Authority [projects/my-project-pki/locations/us-west1/caPools/SUBORDINATE_POOL_ID/certificateAuthorities/SUBORDINATE_CA_ID] and saved CSR to FILE_NAME.

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ „์ฒด ์„ค์ • ๋ชฉ๋ก์„ ๋ณด๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

gcloud privateca subordinates create --help

CSR์„ ๋ถ„์‹คํ•œ ๊ฒฝ์šฐ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

gcloud privateca subordinates get-csr SUBORDINATE_CA_ID \
  --pool=SUBORDINATE_POOL_ID

Terraform

  1. ํ•ด๋‹น CA ํ’€์— CA ํ’€๊ณผ ํ•˜์œ„ CA๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    resource "google_privateca_ca_pool" "default" {
      name     = "test-ca-pool"
      location = "us-central1"
      tier     = "ENTERPRISE"
    }
    
    resource "google_privateca_certificate_authority" "sub-ca" {
      pool = google_privateca_ca_pool.default.name
      certificate_authority_id = "my-certificate-authority-sub"
      location = "us-central1"
      config {
        subject_config {
          subject {
            organization = "HashiCorp"
            common_name = "my-subordinate-authority"
          }
          subject_alt_name {
            dns_names = ["hashicorp.com"]
          }
        }
        x509_config {
          ca_options {
            is_ca = true
            # Force the sub CA to only issue leaf certs
            max_issuer_path_length = 0
          }
          key_usage {
            base_key_usage {
              cert_sign = true
              crl_sign = true
            }
            extended_key_usage {
            }
          }
        }
      }
      lifetime = "86400s"
      key_spec {
        algorithm = "RSA_PKCS1_4096_SHA256"
      }
      type = "SUBORDINATE"
    }
    
  2. CSR์„ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด ๋‹ค์Œ ๊ตฌ์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    data "google_privateca_certificate_authority" "sub-ca-csr" {
      location = "us-central1"
      pool = google_privateca_ca_pool.default.name
      certificate_authority_id = google_privateca_certificate_authority.sub-ca.certificate_authority_id
    }
    
    output "csr" {
      value = data.google_privateca_certificate_authority.sub-ca-csr.pem_csr
    }
    
  3. terraform apply๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

CSR์— ์„œ๋ช…ํ•˜๊ธฐ

์ƒ์„ฑ๋œ CSR ํŒŒ์ผ์„ ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ ์ฑ…์ž„์ด ์žˆ๋Š” ์กฐ์ง ๊ตฌ์„ฑ์›์—๊ฒŒ ์ „๋‹ฌํ•˜๊ณ  ์„œ๋ช…์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์ธ ๋‹จ๊ณ„๋Š” ์กฐ์ง์˜ ์„ค์ •์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๋‹ค์Œ openssl ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ๋ฃจํŠธ CA๋ฅผ ์‹คํ—˜ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Shell

์ƒˆ ๋ฃจํŠธ CA์˜ ์„ค์ •์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

cat > root.conf <<- EOM
[ req ]
distinguished_name = req_distinguished_name
x509_extensions    = v3_ca
prompt             = no
[ req_distinguished_name ]
commonName = Sample Root
[ v3_ca ]
subjectKeyIdentifier=hash
basicConstraints=critical, CA:true
EOM

์ƒˆ ๋ฃจํŠธ CA๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

openssl req -x509 -new -nodes -config root.conf -keyout rootCA.key \
  -days 3000 -out rootCA.crt -batch

์ƒˆ ํ•˜์œ„ CA ์ธ์ฆ์„œ์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š” ํ™•์žฅ์ž๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

cat > extensions.conf <<- EOM
basicConstraints=critical,CA:TRUE,pathlen:0
keyUsage=critical,keyCertSign,cRLSign
extendedKeyUsage=critical,serverAuth
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid
EOM

์ด ๋ฃจํŠธ๋กœ ํ•˜์œ„ CA์˜ CSR์— ์„œ๋ช…ํ•ฉ๋‹ˆ๋‹ค.

openssl x509 -req -in FILE_NAME -CA rootCA.crt -CAkey rootCA.key \
  -CAcreateserial -out subordinate.crt -days 1095 -sha256 -extfile extensions.conf

์ „์ฒด ์ธ์ฆ์„œ ์ฒด์ธ์„ ๋‹จ์ผ ํŒŒ์ผ๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

cat subordinate.crt > chain.crt
cat rootCA.crt >> chain.crt

์„œ๋ช…๋œ ์ธ์ฆ์„œ ์—…๋กœ๋“œ

์„œ๋ช…๋œ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜์œ„ CA๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ฝ˜์†”

  1. Google Cloud ์ฝ˜์†”์—์„œ Certificate Authority Service ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    Certificate Authority Service๋กœ ์ด๋™

  2. CA ๊ด€๋ฆฌ์ž ํƒญ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  3. ์ธ์ฆ ๊ธฐ๊ด€์—์„œ ๋งŒ๋“  ํ•˜์œ„ CA๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  4. ํ™œ์„ฑํ™”๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  5. ๋Œ€ํ™”์ƒ์ž๊ฐ€ ์—ด๋ฆฌ๋ฉด CSR ๋‹ค์šด๋กœ๋“œ๋ฅผ ํด๋ฆญํ•˜์—ฌ ๋ฐœ๊ธ‰ CA๊ฐ€ ์„œ๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” PEM ์ธ์ฝ”๋”ฉ CSR ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

  6. ๋‹ค์Œ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  7. ์ธ์ฆ์„œ ์ฒด์ธ ์—…๋กœ๋“œ ํ•„๋“œ์—์„œ ์ฐพ์•„๋ณด๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  8. ํ™•์žฅ์ž๊ฐ€ .crt์ธ ์„œ๋ช…๋œ ์ธ์ฆ์„œ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

  9. ํ™œ์„ฑํ™”๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

gcloud privateca subordinates activate SUBORDINATE_CA_ID \
  --pool=SUBORDINATE_POOL_ID \
  --pem-chain ./chain.crt

๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • SUBORDINATE_CA_ID: ํ™œ์„ฑํ™”ํ•˜๋ ค๋Š” ํ•˜์œ„ CA์˜ ๊ณ ์œ  ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค.
  • SUBORDINATE_POOL_ID: ํ•˜์œ„ CA๊ฐ€ ํฌํ•จ๋œ CA ํ’€์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

--pem-chain ํ”Œ๋ž˜๊ทธ๋Š” ํ•„์ˆ˜์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ๋Š” PEM ์ธ์ฝ”๋”ฉ ์ธ์ฆ์„œ ๋ชฉ๋ก์ด ํฌํ•จ๋œ ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์ธ์ฆ์„œ ๋ชฉ๋ก์€ ํ˜„์žฌ CA ์ธ์ฆ์„œ๋กœ ์‹œ์ž‘ํ•˜๊ณ  ๋ฃจํŠธ CA ์ธ์ฆ์„œ๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค.

gcloud privateca subordinates activate ๋ช…๋ น์–ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ gcloud privateca subordinates activate๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์„œ๋ช…๋œ ์ธ์ฆ์„œ๊ฐ€ ์—…๋กœ๋“œ๋˜๋ฉด ๋‹ค์Œ ๋ฌธ์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

Activated certificate authority [SUBORDINATE_CA_ID].

Terraform

  1. ์„œ๋ช…๋œ CA ์ธ์ฆ์„œ๋ฅผ subordinate.crt๋กœ ๋กœ์ปฌ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  2. ์„œ๋ช…์ž CA ์ธ์ฆ์„œ๋ฅผ rootCA.crt๋กœ ๋กœ์ปฌ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  3. CA ํ™œ์„ฑํ™” ํ›„ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” CSR์„ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ํ•˜๋ฏ€๋กœ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์—์„œ ์–ธ๊ธ‰๋œ CSR์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ตฌ์„ฑ์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
  4. ๋‹ค์Œ ํ•„๋“œ๋กœ ํ•˜์œ„ CA ๊ตฌ์„ฑ์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  terraform apply๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

      pem_ca_certificate     = file("subordinate.crt")
      subordinate_config {
        pem_issuer_chain {
            pem_certificates = [file("rootCA.crt")] 
        }
      }
    

    ๋ฐœ๊ธ‰๊ธฐ๊ด€ ์ฒด์ธ์— CA๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ ํฌํ•จ๋œ ๊ฒฝ์šฐ ๊ฐ’์„ [file("intermediateCA.cert"), file("rootCA.crt")]๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„