๊ธฐ๋ฐ€ ๋ฆฌ์†Œ์Šค ๋งŒ๋“ค๊ธฐ ๋ฐ ์•ก์„ธ์Šค ๊ถŒํ•œ ๋ถ€์—ฌ


๋ฐ์ดํ„ฐ ๊ณต๋™์ž‘์—…์ž๋Š” ์›Œํฌ๋กœ๋“œ์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋ฐ€ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ๋‹ค์Œ ๋ฆฌ์†Œ์Šค๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ฐ์ดํ„ฐ ๊ณต๋™์ž‘์—…์ž๋Š” Confidential Space ์›Œํฌ๋กœ๋“œ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์ €์žฅ๋˜๋Š” ์œ„์น˜์™€ ํ•ด๋‹น ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ ๊ณต๋™์ž‘์—…์ž์—๊ฒŒ ๊ณ ์œ ํ•œ์ง€ ์•„๋‹ˆ๋ฉด ๊ณต์œ ๋˜๋Š”์ง€ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ ๋ฐ์ดํ„ฐ ๊ณต๋™์ž‘์—…์ž๊ฐ€ ์†Œ์œ ํ•œ ์—ฌ๋Ÿฌ Cloud Storage ๋ฒ„ํ‚ท์— ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•”ํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ ์ €์žฅ

๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ชจ๋“  Google Cloud ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ํ˜ธ์ŠคํŒ…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด์žฅ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋“  Cloud Key Management Service (Cloud KMS)์™€ ๊ฐ™์€ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋“  ์ด ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ ์ƒํƒœ๋กœ ์•”ํ˜ธํ™”๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

WIP๋กœ ์›Œํฌ๋กœ๋“œ ์Šน์ธ

WIP๋Š” Confidential Space๊ฐ€ ์™ธ๋ถ€ ์›Œํฌ๋กœ๋“œ๊ฐ€ ์ œํœด ID๋กœ ๊ธฐ๋ฐ€ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๊ณ  ๊ธฐ๋ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ์ œํœด ID๋Š” ์ž์ฒด ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ ์ฃผ ๊ตฌ์„ฑ์›์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์ทจ๊ธ‰๋˜๋Š” ์™ธ๋ถ€ ์—”ํ‹ฐํ‹ฐ๋กœ, IAM ์—ญํ• ์„ ๋ถ€์—ฌํ•˜์—ฌ ํŠน์ • ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•˜๊ฑฐ๋‚˜ ์„œ๋น„์Šค ๊ณ„์ •์„ ๊ฐ€์žฅํ•˜์—ฌ ๋™์ผํ•œ ์ž‘์—…์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ๊ณต๋™์ž‘์—…์ž๋Š” WIP ๋‚ด์—์„œ ์ œ๊ณต์—…์ฒด๋ฅผ ์„ค์ •ํ•˜์—ฌ ์—ฐํ•ฉ ID๋กœ ์ธ์ฆํ•˜๋Š” ํ•ญ๋ชฉ์˜ ๊ทœ์น™์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ปจํ”ผ๋ด์…œ ์ŠคํŽ˜์ด์Šค์˜ ๊ฒฝ์šฐ ์ œ๊ณต์ž์—์„œ ๋‹ค์Œ์„ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์ฆ๋ช… ์„œ๋น„์Šค: ์ด ์„œ๋น„์Šค๋Š” ์›Œํฌ๋กœ๋“œ๊ฐ€ ์ปจํ”ผ๋ด์…œ VM ์ธ์Šคํ„ด์Šค์ž„์„ ํ™•์ธํ•˜๊ณ  ์ตœ์ข…์ ์œผ๋กœ OpenID Connect(OIDC) ์ฆ๋ช… ํ† ํฐ์„ WIP ์ œ๊ณต์—…์ฒด์— ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์›Œํฌ๋กœ๋“œ ์šด์˜์ž๋Š” ์‚ฌ์šฉ๋˜๋Š” ์ฆ๋ช… ์„œ๋น„์Šค๋ฅผ ์„ค์ •ํ•˜๋ฉฐ, ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋˜๋ ค๋ฉด WIP ๊ณต๊ธ‰์ž์— ์ถ”๊ฐ€๋œ ์ฆ๋ช… ์„œ๋น„์Šค์™€ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์†์„ฑ ๋งคํ•‘: ์ธ์ฆ ์—”ํ‹ฐํ‹ฐ(์ด ๊ฒฝ์šฐ ์›Œํฌ๋กœ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” VM ์ธ์Šคํ„ด์Šค)์—์„œ ์ƒ์„ฑํ•œ ์–ด์„ค์…˜์— ๋งคํ•‘๋˜๋Š” ๋ณด์•ˆ ํ† ํฐ ์„œ๋น„์Šค ์•ก์„ธ์Šค ํ† ํฐ์˜ ์†์„ฑ์ž…๋‹ˆ๋‹ค. ์–ด์„ค์…˜์€ VM ์ธ์Šคํ„ด์Šค ์ž์ฒด, Confidential Space ์ด๋ฏธ์ง€, ์›Œํฌ๋กœ๋“œ ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ์ด๋ฃจ์–ด์ง€๋ฉฐ ์›Œํฌ๋กœ๋“œ์— ์˜ํ•ด WIP ์ œ๊ณต์ž์—๊ฒŒ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์†์„ฑ์€ Cloud Logging์˜ ๊ฐ์‚ฌ ์ถ”์ ๊ณผ ๊ฐ™์€ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ์›Œํฌ๋กœ๋“œ ์ด๋ฏธ์ง€ ์ปจํ…Œ์ด๋„ˆ ๋‹ค์ด์ œ์ŠคํŠธ์™€ ๊ฐ™์€ ์ธ์ฆ๋œ ์—”ํ‹ฐํ‹ฐ ์–ด์„ค์…˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ IAM์„ ํ†ตํ•ด ์—ญํ• ์„ ๋ถ€์—ฌํ•˜๋Š” ๋ฐ๋„ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์†์„ฑ ๋งคํ•‘์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์„ธ์š”.

  • ์ฆ๋ช… ์ •์ฑ…: ์ธ์ฆ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์–ป๊ธฐ ์œ„ํ•ด ํ†ต๊ณผํ•ด์•ผ ํ•˜๋Š” ์ผ๋ จ์˜ ์กฐ๊ฑด์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์ฃผ์žฅํ•˜๋Š” ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

์›Œํฌ๋กœ๋“œ๊ฐ€ ์‹œ์ž‘๋˜๋ฉด Confidential Space ๋Ÿฐ์ฒ˜๋Š” ์›Œํฌ๋กœ๋“œ ์šด์˜์ž๊ฐ€ ์ •์˜ํ•œ ์ฆ๋ช… ์„œ๋น„์Šค์— ์ฆ๋ช… ๋ณด๊ณ ์„œ๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ์ด ์„œ๋น„์Šค๋Š” ์ปจํ”ผ๋ด์…œ VM ์ธ์Šคํ„ด์Šค๋ฅผ ํ™•์ธํ•œ ํ›„ OIDC ์ฆ๋ช… ํ† ํฐ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ† ํฐ์€ 1์‹œ๊ฐ„ ๋™์•ˆ ์ง€์†๋˜๋ฉฐ ์ž๋™์œผ๋กœ ์ƒˆ๋กœ๊ณ ์นจ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ฆ๋ช… ํ† ํฐ์ด ์›Œํฌ๋กœ๋“œ์— ์˜ํ•ด WIP ์ œ๊ณต์—…์ฒด์— ์ „๋‹ฌ๋˜๊ณ  ์ œ๊ณต์—…์ฒด๋Š” ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์–ด์„ค์…˜์ด ์ œ๊ณต์—…์ฒด์— ์ •์˜๋œ ์ฆ๋ช… ์ •์ฑ…์„ ํ†ต๊ณผํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์›Œํฌ๋กœ๋“œ๊ฐ€ ์ปจํ”ผ๋ด์…œ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์™ธ๋ถ€ ์›Œํฌ๋กœ๋“œ ์•ก์„ธ์Šค

WIP์™€ ์ œ๊ณต์—…์ฒด๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์ „์— ์›Œํฌ๋กœ๋“œ๊ฐ€ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ง์ ‘ ๋ฆฌ์†Œ์Šค ์•ก์„ธ์Šค ๋˜๋Š” ์„œ๋น„์Šค ๊ณ„์ • ๊ฐ€์žฅ).

์ง์ ‘ ๋ฆฌ์†Œ์Šค ์•ก์„ธ์Šค

์›Œํฌ๋กœ๋“œ์—๋Š” ์ง์ ‘ ๋ฆฌ์†Œ์Šค ์•ก์„ธ์Šค ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ด ๋ฐฉ๋ฒ•์€ ์ธ์ฆ ์—”ํ‹ฐํ‹ฐ์˜ ์–ด์„ค์…˜์— ์—ฐ๊ฒฐ๋œ WIP ์ œ๊ณต์—…์ฒด์—์„œ ์ œํœด ID๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์›Œํฌ๋กœ๋“œ์˜ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ๋‹ค์ด์ œ์ŠคํŠธ์™€ ๊ฐ™์€ ์†์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ IAM ๋ฐ”์ธ๋”ฉ์„ ํ†ตํ•ด ๋ฆฌ์†Œ์Šค์— ์ง์ ‘ ์•ก์„ธ์Šคํ•˜๋„๋ก ์›Œํฌ๋กœ๋“œ๋ฅผ ์Šน์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง์ ‘ ๋ฆฌ์†Œ์Šค ์•ก์„ธ์Šค์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ ๊ณต๋™์ž‘์—…์ž๊ฐ€ ์›Œํฌ๋กœ๋“œ ์„œ๋น„์Šค ๊ณ„์ •์ด ๊ฐ€์žฅํ•  ์„œ๋น„์Šค ๊ณ„์ •์„ ์„ค์ •ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ปจํ”ผ๋ด์…œ ์ŠคํŽ˜์ด์Šค ํ™˜๊ฒฝ์„ ์„ค์ •ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋‹จ๊ณ„๊ฐ€ ์ ์Šต๋‹ˆ๋‹ค.

  • ์›Œํฌ๋กœ๋“œ๋Š” IAM์— ์˜ํ•ด ๊ฒฐ์ •๋œ ํŠน์ • ๋ฆฌ์†Œ์Šค์—๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ถŒํ•œ์ด ๊ณผ๋„ํ•˜๊ฒŒ ๋ถ€์—ฌ๋œ ์„œ๋น„์Šค ๊ณ„์ •์ด๋‚˜ ๊ฐ€์žฅ ๊ถŒํ•œ์œผ๋กœ ์ธํ•ด ์•…์˜์ ์ธ ํ–‰์œ„์ž์—๊ฒŒ ์˜๋„ํ•œ ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค ๊ณ„์ • ๊ฐ€์žฅ ๋ฐฉ๋ฒ•๋ณด๋‹ค ๋” ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฐ ๋ฆฌ์†Œ์Šค ์•ก์„ธ์Šค๋Š” ์—ฌ๋Ÿฌ ์›Œํฌ๋กœ๋“œ์—์„œ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ๋œ ์„œ๋น„์Šค ๊ณ„์ •์˜ ID ๋Œ€์‹  ์›Œํฌ๋กœ๋“œ VM ์ธ์Šคํ„ด์Šค์˜ ์ œํœด ID๋กœ ๋กœ๊น…๋ฉ๋‹ˆ๋‹ค. ์›Œํฌ๋กœ๋“œ VM ์ธ์Šคํ„ด์Šค์˜ ID์—๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ์ด๋ฏธ์ง€ ๋‹ค์ด์ œ์ŠคํŠธ, ์›Œํฌ๋กœ๋“œ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ํ”„๋กœ์ ํŠธ ๋ฒˆํ˜ธ, ์›Œํฌ๋กœ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” VM ์ธ์Šคํ„ด์Šค์˜ ID์™€ ๊ฐ™์€ ์„ธ๋ถ€์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ๋” ์ž์„ธํ•œ ๊ฐ์‚ฌ ์ถ”์ ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • WIP ์ œ๊ณต์ž์—์„œ VM ์ธ์Šคํ„ด์Šค selfLink ์†์„ฑ์„ google.subject ์†์„ฑ์— ๋งคํ•‘ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. selfLink ๊ฐ’์ด ๋งค์šฐ ๊ธธ๋ฉด ์ด ์†์„ฑ์˜ 127๋ฐ”์ดํŠธ ์ œํ•œ์„ ์ดˆ๊ณผํ•˜์—ฌ WIP ์ œ๊ณต์—…์ฒด ์ธ์ฆ์ด ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋น„์Šค ๊ณ„์ • ๊ฐ€์žฅ

์„œ๋น„์Šค ๊ณ„์ • ๋ช…์˜ ๋„์šฉ ๋ฐฉ๋ฒ•์€ ๊ฐ ๋ฐ์ดํ„ฐ ๊ณต๋™์ž‘์—…์ž๊ฐ€ ์„œ๋น„์Šค ๊ณ„์ •์„ ์„ค์ •ํ•˜์—ฌ ๋น„๊ณต๊ฐœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณตํ˜ธํ™”ํ•œ ๋‹ค์Œ ํ•ด๋‹น ์„œ๋น„์Šค ๊ณ„์ •์„ ์ž์ฒด WIP์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ WIP ์ œ๊ณต์—…์ฒด์—์„œ ์›Œํฌ๋กœ๋“œ ์„œ๋น„์Šค ๊ณ„์ •์„ ์ง€์ •ํ•˜์—ฌ ์›Œํฌ๋กœ๋“œ ์„œ๋น„์Šค ๊ณ„์ •์ด ๋ฐ์ดํ„ฐ ๊ณต๋™์ž‘์—…์ž ์„œ๋น„์Šค ๊ณ„์ •์„ ๊ฐ€์žฅํ•˜์—ฌ ๊ธฐ๋ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค ๊ณ„์ • ๊ฐ€์žฅ์€ ๋‹ค์Œ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

VM ์ธ์Šคํ„ด์Šค์— ๋งค์šฐ ๊ธด selfLink ์†์„ฑ์ด ์žˆ์œผ๋ฉด ์„œ๋น„์Šค ๊ณ„์ • ๊ฐ€์žฅ ๋ฐฉ๋ฒ•์ด WIP ์ œ๊ณต์ž์— ์ธ์ฆํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ฆ๋ช… ํ† ํฐ์˜ sub ํด๋ ˆ์ž„(selfLink ๊ฐ’์œผ๋กœ ์„ค์ •๋จ)์ด WIP ๊ณต๊ธ‰์ž์—์„œ 127๋ฐ”์ดํŠธ ์ œํ•œ์ด ์žˆ๋Š” google.subject ์†์„ฑ์— ๋งคํ•‘๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

VM ์ธ์Šคํ„ด์Šค selfLink ๊ฐ’์ด 127๋ฐ”์ดํŠธ๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ๊ฒฝ์šฐ VM ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„์„ ๋ฐ”๊ฟ” selfLink๋ฅผ ๋‹จ์ถ•ํ•˜๊ฑฐ๋‚˜ ์ง์ ‘ ๋ฆฌ์†Œ์Šค ์•ก์„ธ์Šค ๋ฐฉ๋ฒ•์„ ๋Œ€์‹  ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

WIP ๋ฐ ์ œ๊ณต์—…์ฒด ์„ค์ •

์ œ๊ณต์—…์ฒด ์„ค์ • ๋‹จ๊ณ„๋Š” ์ง์ ‘ ๋ฆฌ์†Œ์Šค ์•ก์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ๋˜๋Š” ์„œ๋น„์Šค ๊ณ„์ • ๊ฐ€์žฅ์„ ์‚ฌ์šฉํ•˜๋Š”์ง€์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

์ง์ ‘ ๋ฆฌ์†Œ์Šค ์•ก์„ธ์Šค

์ง์ ‘ ๋ฆฌ์†Œ์Šค ์•ก์„ธ์Šค ๋ฐฉ๋ฒ•์—๋Š” WIP ๋ฐ ์ œ๊ณต์—…์ฒด๋ฅผ ์„ค์ •ํ•œ ๋‹ค์Œ ํŠน์ • ์›Œํฌ๋กœ๋“œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ๋‹ค์ด์ œ์ŠคํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ IAM ์—ญํ• ์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

WIP ๋ฐ ์ œ๊ณต์—…์ฒด ์„ค์ •

WIP ๋ฐ ์ œ๊ณต์—…์ฒด๋ฅผ ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. WIP๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    gcloud iam workload-identity-pools create DATA_COLLABORATOR_POOL_NAME \
        --location=global
    
  2. WIP์—์„œ OIDC ์ œ๊ณต์—…์ฒด๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    gcloud iam workload-identity-pools providers create-oidc attestation-verifier \
        --location=global \
        --workload-identity-pool=DATA_COLLABORATOR_POOL_NAME \
        --issuer-uri="https://confidentialcomputing.googleapis.com/" \
        --allowed-audiences="https://sts.googleapis.com" \
        --attribute-mapping="google.subject=\"gcpcs::\"+assertion.submods.container.image_digest+\"::\"+assertion.submods.gce.project_number+\"::\"+assertion.submods.gce.instance_id,attribute.image_digest=assertion.submods.container.image_digest" \
        --attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' \
            && 'STABLE' in assertion.submods.confidential_space.support_attributes"
    

    ์ด ์˜ˆ์‹œ์—์„œ๋Š” ๋‹ค์Œ ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    • https://confidentialcomputing.googleapis.com/์˜ issuer-uri์ž…๋‹ˆ๋‹ค. ์ฆ‰, Google Cloud ์ฆ๋ช…์ด ์ฆ๋ช… ์„œ๋น„์Šค๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

    • https://sts.googleapis.com์˜ allowed-audiences์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ์•ก์„ธ์Šค ํ† ํฐ์œผ๋กœ ๊ตํ™˜ํ•˜๋Š” Google์˜ ๋ณด์•ˆ ํ† ํฐ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

    • google.subject์˜ attribute-mapping(๋‹ค์Œ ๊ฐ’ ํฌํ•จ)

      \"gcpcs::\"+assertion.submods.container.image_digest+\"::\"+assertion.submods.gce.project_number+\"::\"+assertion.submods.gce.instance_id,attribute.image_digest=assertion.submods.container.image_digest
      

      ์ด ๊ฐ’์€ Common Expression Language(CEL)์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๊ฐ’์€ gcpcs ์†์„ฑ์— ํ• ๋‹น๋˜๋ฉฐ ์›Œํฌ๋กœ๋“œ๊ฐ€ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•  ๋•Œ๋งˆ๋‹ค Cloud Logging์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

      • assertion.submods.container.image_digest: ์›Œํฌ๋กœ๋“œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ๋‹ค์ด์ œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.

      • assertion.submods.gce.project_number: VM ์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœ์ ํŠธ ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค.

      • assertion.submods.gce.instance_id: VM ์ธ์Šคํ„ด์Šค์˜ ID์ž…๋‹ˆ๋‹ค.

      ๋˜ํ•œ attribute.image_digest์ด ์›Œํฌ๋กœ๋“œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ๋‹ค์ด์ œ์ŠคํŠธ์ธ assertion.submods.container.image_digest๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ ํŠน์ • ์ด๋ฏธ์ง€ ๋‹ค์ด์ œ์ŠคํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ œํœด ID IAM ์—ญํ• ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค.

      google.subject ๊ฐ’์˜ ์ด ๊ธธ์ด๊ฐ€ 127๋ฐ”์ดํŠธ ๋ฏธ๋งŒ์ธ ๊ฒฝ์šฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์›Œํฌ๋กœ๋“œ ์–ด์„ค์…˜์„ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์ฆ๋ช… ์ •์ฑ…์„ ๊ตฌ์„ฑํ•˜๋Š” ๋‹ค์Œ attribute-conditions ์ด๋Ÿฌํ•œ ์กฐ๊ฑด์ด ์›Œํฌ๋กœ๋“œ์˜ ์–ด์„ค์…˜๊ณผ ์ผ์น˜ํ•˜๋ฉด ์›Œํฌ๋กœ๋“œ๊ฐ€ ์ œํœด ID๋กœ ์ปจํ”ผ๋ด์…œ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

      • assertion.swname == 'CONFIDENTIAL_SPACE': ์ปจํ”ผ๋ด์…œ ์ŠคํŽ˜์ด์Šค๊ฐ€ VM์—์„œ ์‹คํ–‰๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด์ด๋ฉฐ ๋ชจ๋“  ๋‚ด์žฅ ๋ณด์•ˆ ๋ณด์žฅ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

      • 'STABLE' in assertion.submods.confidential_space.support_attributes: ํ”„๋กœ๋•์…˜ Confidential Space ์ด๋ฏธ์ง€๊ฐ€ ์‚ฌ์šฉ ์ค‘์ด๋ฉฐ STABLE ์ง€์› ์†์„ฑ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

      ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ ์กฐ๊ฑด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฆ๋ช… ์ •์ฑ… ๋งŒ๋“ค๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์ œํœด ID์— IAM ์—ญํ•  ๋ถ€์—ฌ

WIP ๊ณต๊ธ‰์ž๋ฅผ ๋งŒ๋“  ํ›„ ID์˜ ์›Œํฌ๋กœ๋“œ ์ด๋ฏธ์ง€ ์ปจํ…Œ์ด๋„ˆ ๋‹ค์ด์ œ์ŠคํŠธ๊ฐ€ ์˜ˆ์ƒ ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์ œํœด ID์— IAM ์—ญํ• ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์—์„œ๋Š” ํŠน์ • Cloud Key Management Service ํ‚ค๋ฅผ ๋ณตํ˜ธํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ์ œํœด ID์— ๋ถ€์—ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

gcloud kms keys add-iam-policy-binding \
    projects/DATA_COLLABORATOR_PROJECT_ID/locations/global/keyRings/DATA_COLLABORATOR_KEYRING_NAME/cryptoKeys/DATA_COLLABORATOR_KEY_NAME \
    --member="principalSet://iam.googleapis.com/projects/DATA_COLLABORATOR_PROJECT_NUMBER/locations/global/workloadIdentityPools/DATA_COLLABORATOR_POOL_NAME/attribute.image_digest/WORKLOAD_CONTAINER_IMAGE_DIGEST" \
    --role=roles/cloudkms.cryptoKeyDecrypter

์„œ๋น„์Šค ๊ณ„์ • ๊ฐ€์žฅ

์„œ๋น„์Šค ๊ณ„์ • ๊ฐ€์žฅ ๋ฐฉ๋ฒ•์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  1. ๊ฐ ๋ฐ์ดํ„ฐ ๊ณต๋™์ž‘์—…์ž ํ”„๋กœ์ ํŠธ์—์„œ ์„œ๋น„์Šค ๊ณ„์ •์„ ๋งŒ๋“ค๊ณ  ๊ธฐ๋ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณตํ˜ธํ™”ํ•  ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

  2. ๊ฐ ๋ฐ์ดํ„ฐ ๊ณต๋™์ž‘์—…์ž ํ”„๋กœ์ ํŠธ์—์„œ WIP๋ฅผ ๋งŒ๋“  ๋‹ค์Œ, ๋ฐฉ๊ธˆ ๋งŒ๋“  ๊ฐ ํ”„๋กœ์ ํŠธ์˜ ์„œ๋น„์Šค ๊ณ„์ •์„ ํ•ด๋‹น WIP์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

  3. ๊ฐ WIP์—์„œ WIP ์ œ๊ณต์ž๋ฅผ ๋งŒ๋“ค์–ด ๋ฐ์ดํ„ฐ ๊ณต๋™์ž‘์—…์ž ์„œ๋น„์Šค ๊ณ„์ •์„ ๊ฐ€์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ„์ •์œผ๋กœ ์›Œํฌ๋กœ๋“œ ์„œ๋น„์Šค ๊ณ„์ •์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณตํ˜ธํ™”ํ•  ์„œ๋น„์Šค ๊ณ„์ • ์„ค์ •

  1. ๋ฐ์ดํ„ฐ ๊ณต๋™์ž‘์—…์ž ํ”„๋กœ์ ํŠธ์—์„œ ์„œ๋น„์Šค ๊ณ„์ •์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    gcloud iam service-accounts create DATA_COLLABORATOR_SERVICE_ACCOUNT_NAME
    

    ์„œ๋น„์Šค ๊ณ„์ •์— ๊ธฐ๋ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณตํ˜ธํ™”ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Cloud KMS๋กœ Cloud Storage์˜ ๊ธฐ๋ฐ€ ํŒŒ์ผ์„ ์•”ํ˜ธํ™”ํ•˜๋Š” ๊ฒฝ์šฐ ์„œ๋น„์Šค ๊ณ„์ •์— ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๋ณตํ˜ธํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    gcloud kms keys add-iam-policy-binding \
        projects/DATA_COLLABORATOR_PROJECT_ID/locations/global/keyRings/DATA_COLLABORATOR_KEYRING_NAME/cryptoKeys/DATA_COLLABORATOR_KEY_NAME \
        --member=serviceAccount:DATA_COLLABORATOR_SERVICE_ACCOUNT_NAME@DATA_COLLABORATOR_PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyDecrypter
    

WIP ๋ฐ ์ œ๊ณต์—…์ฒด ์„ค์ •

WIP ๋ฐ ์ œ๊ณต์ž๋ฅผ ์„ค์ •ํ•˜๋ ค๋ฉด ๊ฐ ๋ฐ์ดํ„ฐ ๊ณต๋™์ž‘์—…์ž ํ”„๋กœ์ ํŠธ์—์„œ ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ์™„๋ฃŒํ•˜์„ธ์š”.

  1. WIP๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    gcloud iam workload-identity-pools create DATA_COLLABORATOR_POOL_NAME \
        --location=global
    
  2. ๊ฐ€์žฅํ•  ์„œ๋น„์Šค ๊ณ„์ •์„ WIP์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค(roles/iam.workloadIdentityUser ์—ญํ•  ์‚ฌ์šฉ).

    gcloud iam service-accounts add-iam-policy-binding \
        DATA_COLLABORATOR_SERVICE_ACCOUNT_NAME@DATA_COLLABORATOR_PROJECT_ID.iam.gserviceaccount.com \
        --member="principalSet://iam.googleapis.com/projects/DATA_COLLABORATOR_PROJECT_NUMBER/locations/global/workloadIdentityPools/DATA_COLLABORATOR_POOL_NAME/*" \
        --role=roles/iam.workloadIdentityUser
    
  3. WIP์—์„œ OIDC ์ œ๊ณต์—…์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ๋ฐ์ดํ„ฐ ๊ณต๋™์ž‘์—…์ž ์„œ๋น„์Šค ๊ณ„์ •์„ ๊ฐ€์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ์›Œํฌ๋กœ๋“œ ์„œ๋น„์Šค ๊ณ„์ •์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

    gcloud iam workload-identity-pools providers create-oidc attestation-verifier \
        --location=global \
        --workload-identity-pool=DATA_COLLABORATOR_POOL_NAME \
        --issuer-uri="https://confidentialcomputing.googleapis.com/" \
        --allowed-audiences="https://sts.googleapis.com" \
        --attribute-mapping="google.subject=assertion.sub" \
        --attribute-condition="assertion.submods.container.image_digest == 'WORKLOAD_CONTAINER_IMAGE_DIGEST' \
    && 'WORKLOAD_SERVICE_ACCOUNT_NAME@WORKLOAD_OPERATOR_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts \
    && assertion.swname == 'CONFIDENTIAL_SPACE' \
    && 'STABLE' in assertion.submods.confidential_space.support_attributes"
    

    ์ด ์˜ˆ์‹œ์—์„œ๋Š” ๋‹ค์Œ ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    • https://confidentialcomputing.googleapis.com/์˜ issuer-uri์ž…๋‹ˆ๋‹ค. ์ฆ‰, Google Cloud ์ฆ๋ช…์ด ์ฆ๋ช… ์„œ๋น„์Šค๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

    • https://sts.googleapis.com์˜ allowed-audiences์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ์•ก์„ธ์Šค ํ† ํฐ์œผ๋กœ ๊ตํ™˜ํ•˜๋Š” Google์˜ ๋ณด์•ˆ ํ† ํฐ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

    • google.subject์˜ attribute-mapping(๊ฐ’์€ assertion.sub) ์ด๋Š” ์ฆ๋ช… ํ† ํฐ์˜ sub ํด๋ ˆ์ž„์— ์ •์˜๋œ VM ์ธ์Šคํ„ด์Šค์˜ selfLink์ž…๋‹ˆ๋‹ค.

      ์›Œํฌ๋กœ๋“œ๊ฐ€ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•  ๋•Œ๋งˆ๋‹ค VM ์ธ์Šคํ„ด์Šค selfLink๊ฐ€ Cloud Logging์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    • ์ฆ๋ช… ์ •์ฑ…์„ ๊ตฌ์„ฑํ•˜๋Š” ๋‹ค์Œ attribute-conditions ์ด๋Ÿฌํ•œ ์กฐ๊ฑด์ด ์›Œํฌ๋กœ๋“œ์˜ ์–ด์„ค์…˜๊ณผ ์ผ์น˜ํ•˜๋ฉด ์›Œํฌ๋กœ๋“œ๊ฐ€ ์ œํœด ID๋กœ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

      • assertion.submods.container.image_digest == 'WORKLOAD_CONTAINER_IMAGE_DIGEST': ์›Œํฌ๋กœ๋“œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ๋‹ค์ด์ œ์ŠคํŠธ๊ฐ€ ์˜ˆ์ƒ ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

      • 'WORKLOAD_SERVICE_ACCOUNT_NAME@WORKLOAD_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts: ์›Œํฌ๋กœ๋“œ์— ์—ฐ๊ฒฐ๋œ ์„œ๋น„์Šค ๊ณ„์ •์ด ์˜ˆ์ƒ ์„œ๋น„์Šค ๊ณ„์ •๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•œ ๋‹ค์Œ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๊ณต๋™์ž‘์—…์ž ์„œ๋น„์Šค ๊ณ„์ •์„ ๊ฐ€์žฅํ•ฉ๋‹ˆ๋‹ค.

      • assertion.swname == 'CONFIDENTIAL_SPACE': ์ปจํ”ผ๋ด์…œ ์ŠคํŽ˜์ด์Šค๊ฐ€ VM์—์„œ ์‹คํ–‰๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด์ด๋ฉฐ ๋ชจ๋“  ๋‚ด์žฅ ๋ณด์•ˆ ๋ณด์žฅ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

      • 'STABLE' in assertion.submods.confidential_space.support_attributes: ํ”„๋กœ๋•์…˜ Confidential Space ์ด๋ฏธ์ง€๊ฐ€ ์‚ฌ์šฉ ์ค‘์ด๋ฉฐ STABLE ์ง€์› ์†์„ฑ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

      ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ ์กฐ๊ฑด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฆ๋ช… ์ •์ฑ… ๋งŒ๋“ค๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์ฆ๋ช… ์ •์ฑ… ๋งŒ๋“ค๊ธฐ

WIP๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •์—์„œ ์ฆ๋ช… ์ •์ฑ…์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ ์—”ํ‹ฐํ‹ฐ์˜ ์–ด์„ค์…˜์ด ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •์ฑ…๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ •์ฑ…์€ Common Expression Language(CEL)๋กœ ์ž‘์„ฑ๋˜๋ฉฐ && ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋ จ์˜ ๋ฌธ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๋ช…๋ น๋ฌธ์€ Confidential Space ์ด๋ฏธ์ง€, ์›Œํฌ๋กœ๋“œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ๋˜๋Š” VM ์ธ์Šคํ„ด์Šค์˜ ์–ด์„ค์…˜์„ ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์ง€์ •๋œ ๊ฐ’์„ ํ‘œํ˜„์‹์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์›Œํฌ๋กœ๋“œ๊ฐ€ Confidential Space๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  STABLE Confidential Space ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ ์›Œํฌ๋กœ๋“œ VM ์ธ์Šคํ„ด์Šค๊ฐ€ ์‹คํ–‰๋˜๋Š” ์˜์—ญ์ด us-central1-a์—ฌ์•ผ ํ•œ๋‹ค๋Š” ์ •์ฑ…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

assertion.swname == 'CONFIDENTIAL_SPACE' \
&& 'STABLE' in assertion.submods.confidential_space.support_attributes" \
&& assertion.submods.gce.zone == "us-central1-a"

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฆ๋ช… ์–ด์„ค์…˜์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์ฆ๋ช… ์–ด์„ค์…˜

๋‹ค์Œ ํ‘œ์—์„œ๋Š” ์ฆ๋ช… ์ •์ฑ…์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์–ด์„ค์…˜์„ ์ž์„ธํžˆ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ •์ฑ…์€ Confidential Space ์ด๋ฏธ์ง€, ์›Œํฌ๋กœ๋“œ ์ปจํ…Œ์ด๋„ˆ, VM ์ธ์Šคํ„ด์Šค์—์„œ ์ˆ˜ํ–‰ํ•œ ์–ด์„ค์…˜์„ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ์ง€ ์–ด์„ค์…˜

์–ด์„ค์…˜ ์œ ํ˜• ์„ค๋ช…

assertion.dbgstat

์ƒํ˜ธ์ž‘์šฉ:

  • ์›Œํฌ๋กœ๋“œ ์šด์˜์ž: --image-family ๊ฐ’์ž…๋‹ˆ๋‹ค.
์ •์˜๋œ ๋ฌธ์ž์—ด

Confidential Space ์ด๋ฏธ์ง€๊ฐ€ ๋””๋ฒ„๊ทธ ๋˜๋Š” ํ”„๋กœ๋•์…˜ ๋ฒ„์ „์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์œ ํšจํ•œ ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • enable: ๋””๋ฒ„๊ทธ ์ด๋ฏธ์ง€๊ฐ€ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • disabled-since-boot: ํ”„๋กœ๋•์…˜ ์ด๋ฏธ์ง€๊ฐ€ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ์‹œ

๋‹ค์Œ ์ฝ”๋“œ๋Š” Confidential Space ์ด๋ฏธ์ง€์˜ ๋””๋ฒ„๊ทธ ๋ฒ„์ „์ด ์‚ฌ์šฉ ์ค‘์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

assertion.dbgstat == "enable"

๋‹ค์Œ ์ฝ”๋“œ๋Š” Confidential Space ์ด๋ฏธ์ง€์˜ ํ”„๋กœ๋•์…˜ ๋ฒ„์ „์ด ์‚ฌ์šฉ ์ค‘์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

assertion.dbgstat == "disabled-since-boot"
assertion.submods.confidential_space.support_attributes ๋ฌธ์ž์—ด ๋ฐฐ์—ด

TEE์˜ ๋ณด์•ˆ ๋ฒ„์ „์ด ํ”„๋กœ๋•์…˜ Confidential Space ์ด๋ฏธ์ง€์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋””๋ฒ„๊ทธ Confidential Space ์ด๋ฏธ์ง€์—๋Š” ์„ค์ •๋œ ์ง€์› ์†์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค.

์ง€์› ์†์„ฑ์€ 3๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

  • LATEST: ์ตœ์‹  ๋ฒ„์ „์˜ ์ด๋ฏธ์ง€์ด๋ฉฐ ์ง€์›์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. LATEST ์ด๋ฏธ์ง€๋Š” STABLE ๋ฐ USABLE์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.
  • STABLE: ์ด ๋ฒ„์ „์˜ ์ด๋ฏธ์ง€๋Š” ์ง€์›์ด ์ œ๊ณต๋˜๋ฉฐ ์ทจ์•ฝ์ ์ด ๋ชจ๋‹ˆํ„ฐ๋ง๋ฉ๋‹ˆ๋‹ค. STABLE ์ด๋ฏธ์ง€๋„ USABLE์ž…๋‹ˆ๋‹ค.
  • USABLE: ์ด ์†์„ฑ๋งŒ ์žˆ๋Š” ์ด๋ฏธ์ง€๋Š” ์ง€์›์ด ์ค‘๋‹จ๋˜์–ด ๋” ์ด์ƒ ์ทจ์•ฝ์ ์ด ๋ชจ๋‹ˆํ„ฐ๋ง๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์— ๋”ฐ๋ฅธ ์ฑ…์ž„์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์žˆ์Šต๋‹ˆ๋‹ค.
  • EXPERIMENTAL: ์ด ์†์„ฑ๋งŒ ์žˆ๋Š” ์ด๋ฏธ์ง€๋Š” ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ์šฉ์œผ๋กœ๋งŒ ์‚ฌ์šฉ๋˜๋ฉฐ ํ”„๋กœ๋•์…˜์— ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. EXPERIMENTAL ์ด๋ฏธ์ง€๋Š” LATEST, STABLE ๋˜๋Š” USABLE ์†์„ฑ์„ ๊ฐ–์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์˜ˆ

๋‹ค์Œ ์ฝ”๋“œ๋Š” ์•ˆ์ •์ ์ธ ๋ฒ„์ „์˜ Confidential Space ์ด๋ฏธ์ง€๊ฐ€ ์‚ฌ์šฉ ์ค‘์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

"STABLE" in assertion.submods.confidential_space.support_attributes
assertion.swname ์ •์˜๋œ ๋ฌธ์ž์—ด

์ฆ๋ช… ํ•ญ๋ชฉ์—์„œ ์‹คํ–‰๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ ํ•ญ์ƒ CONFIDENTIAL_SPACE์ž…๋‹ˆ๋‹ค.

์˜ˆ
assertion.swname == "CONFIDENTIAL_SPACE"
assertion.swversion ๋ฌธ์ž์—ด ๋ฐฐ์—ด

Confidential Space ์ด๋ฏธ์ง€์˜ ์†Œํ”„ํŠธ์›จ์–ด ๋ฒ„์ „์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€์˜ ์ตœ์‹  ๋ฒ„์ „์„ ํƒ€๊ฒŸํŒ…ํ•˜๋ ค๋ฉด assertion.submods.confidential_space.support_attributes์„ ๋Œ€์‹  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์˜ˆ
int(assertion.swversion[0]) == 230103

์ปจํ…Œ์ด๋„ˆ ์–ด์„ค์…˜

์–ด์„ค์…˜ ์œ ํ˜• ์„ค๋ช…

assertion.submods.container.cmd_override

์ƒํ˜ธ์ž‘์šฉ:

  • ์›Œํฌ๋กœ๋“œ ์ž‘์„ฑ์ž: allow_cmd_override ์‹คํ–‰ ์ •์ฑ…์ž…๋‹ˆ๋‹ค.
  • ์›Œํฌ๋กœ๋“œ ์—ฐ์‚ฐ์ž: tee-cmd ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.
๋ฌธ์ž์—ด ๋ฐฐ์—ด

์›Œํฌ๋กœ๋“œ ์ด๋ฏธ์ง€์— ์‚ฌ์šฉ๋˜๋Š” CMD ๋ช…๋ น์–ด ๋ฐ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ

๋‹ค์Œ ์ฝ”๋“œ๋Š” ์›Œํฌ๋กœ๋“œ ์ด๋ฏธ์ง€์˜ CMD๋ฅผ ๋ฎ์–ด์“ฐ์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

size(assertion.submods.container.cmd_override) == 0

๋‹ค์Œ ์ฝ”๋“œ๋Š” program๊ฐ€ CMD ์žฌ์ •์˜์—์„œ ์œ ์ผํ•œ ์ฝ˜ํ…์ธ ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

assertion.submods.container.cmd_override == ['program']

assertion.submods.container.env

์ƒํ˜ธ์ž‘์šฉ:

  • ์›Œํฌ๋กœ๋“œ ์ž‘์„ฑ์ž: allow_env_override ์‹คํ–‰ ์ •์ฑ…์ž…๋‹ˆ๋‹ค.
  • ์›Œํฌ๋กœ๋“œ ์—ฐ์‚ฐ์ž: tee-env-ENVIRONMENT_VARIABLE_NAME ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.
JSON ๊ฐœ์ฒด

ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋ฐ ํ•ด๋‹น ๊ฐ’์ด ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ช…์‹œ์ ์œผ๋กœ ์ „๋‹ฌ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ

๋‹ค์Œ ์ฝ”๋“œ๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜ example-env-1์ด value-1๋กœ ์„ค์ •๋˜์—ˆ๊ณ  example-env-2๊ฐ€ value-2๋กœ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

assertion.submods.container.env == {"example-env-1": "value-1", "example-env-2": "value-2"}

assertion.submods.container.env_override

์ƒํ˜ธ์ž‘์šฉ:

  • ์›Œํฌ๋กœ๋“œ ์ž‘์„ฑ์ž: allow_env_override ์‹คํ–‰ ์ •์ฑ…์ž…๋‹ˆ๋‹ค.
  • ์›Œํฌ๋กœ๋“œ ์—ฐ์‚ฐ์ž: tee-env-ENVIRONMENT_VARIABLE_NAME ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.
๋ฌธ์ž์—ด

์›Œํฌ๋กœ๋“œ ์—ฐ์‚ฐ์ž๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์—์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋ฎ์–ด์ผ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ

๋‹ค์Œ ์ฝ”๋“œ๋Š” ์›Œํฌ๋กœ๋“œ ์šด์˜์ž๊ฐ€ example ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์žฌ์ •์˜ํ•˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

!has(assertion.submods.container.env_override.example)

๋‹ค์Œ ์ฝ”๋“œ๋Š” ์›Œํฌ๋กœ๋“œ ์šด์˜์ž๊ฐ€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋ฎ์–ด์“ฐ์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

size(assertion.submods.container.env_override) == 0
assertion.submods.container.image_digest ๋ฌธ์ž์—ด

์›Œํฌ๋กœ๋“œ ์ปจํ…Œ์ด๋„ˆ์˜ ์ด๋ฏธ์ง€ ๋‹ค์ด์ œ์ŠคํŠธ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด ์กฐ๊ฑด์„ ์ง€์ •ํ•˜๋ฉด ์—ฌ๋Ÿฌ ๋‹น์‚ฌ์ž๊ฐ€ ์ž์‹ ์˜ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๋„๋ก ์Šน์ธ๋œ ์›Œํฌ๋กœ๋“œ์— ๋™์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ
assertion.submods.container.image_digest == "sha256:837ccb607e312b170fac7383d7ccfd61fa5072793f19a25e75fbacb56539b86b"
assertion.submods.container.image_id ๋ฌธ์ž์—ด

์›Œํฌ๋กœ๋“œ ์ปจํ…Œ์ด๋„ˆ์˜ ์ด๋ฏธ์ง€ ID๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ
assertion.submods.container.image_id == "sha256:652a44b0e911271ba07cf2915cd700fdfa50abd62a98f87a57fdebc59843d93f"

assertion.submods.container.image_reference

์ƒํ˜ธ์ž‘์šฉ:

  • ์›Œํฌ๋กœ๋“œ ์—ฐ์‚ฐ์ž: tee-image-reference ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.
๋ฌธ์ž์—ด

Confidential Space ์ด๋ฏธ์ง€์—์„œ ์‹คํ–‰๋˜๋Š” ์›Œํฌ๋กœ๋“œ ์ปจํ…Œ์ด๋„ˆ์˜ ์œ„์น˜๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ
assertion.submods.container.image_reference == "us-docker.pkg.dev/PROJECT_ID/WORKLOAD_CONTAINER:latest"

assertion.submods.container.image_signatures

์ƒํ˜ธ์ž‘์šฉ:

  • ์›Œํฌ๋กœ๋“œ ์—ฐ์‚ฐ์ž: tee-signed-image-repos ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.
JSON ๊ฐœ์ฒด

์ด๋ฏธ์ง€์— ํŠน์ • ์„œ๋ช…์ด ์žˆ๊ฑฐ๋‚˜ ๊ณต๊ฐœ ํ‚ค์™€ ์„œ๋ช… ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์„œ๋ช…๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด ์กฐ๊ฑด์„ ์ง€์ •ํ•˜๋ฉด ์—ฌ๋Ÿฌ ๋‹น์‚ฌ์ž๊ฐ€ ์ž์‹ ์˜ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๋„๋ก ์Šน์ธ๋œ ์›Œํฌ๋กœ๋“œ์— ๋™์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด์„ค์…˜์—๋Š” ๋‹ค์Œ ์š”์†Œ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • key_id: ๊ณต๊ฐœ ํ‚ค์˜ 16์ง„์ˆ˜ ๋””์ง€ํ„ธ ์ง€๋ฌธ์ž…๋‹ˆ๋‹ค. ์ง€๋ฌธ์„ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

    openssl pkey -pubin -in public_key.pem -outform DER | openssl sha256

    ์—ฌ๊ธฐ์„œ public_key.pem๋Š” PEM ํ˜•์‹์˜ ๊ณต๊ฐœ ํ‚ค์ž…๋‹ˆ๋‹ค.

  • signature: ์„œ๋ช…๋œ ์ปจํ…Œ์ด๋„ˆ์™€ ์—ฐ๊ฒฐ๋˜๊ณ  ๊ฐ„๋‹จํ•œ ์„œ๋ช… ํ˜•์‹์„ ๋”ฐ๋ฅด๋Š” ํŽ˜์ด๋กœ๋“œ์˜ ์„œ๋ช…์ž…๋‹ˆ๋‹ค.
  • signature_algorithm: ํ‚ค์— ์„œ๋ช…ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

    • RSASSA_PSS_SHA256 (SHA-256 ๋‹ค์ด์ œ์ŠคํŠธ๊ฐ€ ์žˆ๋Š” RSASSA-PSS)
    • RSASSA_PKCS1V15_SHA256 (SHA-256 ๋‹ค์ด์ œ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” RSASSA-PKCS1 v1_5)
    • ECDSA_P256_SHA256 (P-256 ๊ณก์„ ์˜ ECDSA, SHA-256 ๋‹ค์ด์ œ์ŠคํŠธ)
์˜ˆ
assertion.swname == 'CONFIDENTIAL_SPACE' && ['ECDSA_P256_SHA256:PUBLIC_KEY_FINGERPRINT'].exists(fingerprint, fingerprint in assertion.submods.container.image_signatures.map(sig, sig.signature_algorithm+':'+sig.key_id)) && 'serviceaccount.iam.gserviceaccount.com' in assertion.google_service_accounts"

assertion.submods.container.restart_policy

์ƒํ˜ธ์ž‘์šฉ:

  • ์›Œํฌ๋กœ๋“œ ์—ฐ์‚ฐ์ž: tee-restart-policy ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.
์ •์˜๋œ ๋ฌธ์ž์—ด

์›Œํฌ๋กœ๋“œ๊ฐ€ ์ค‘์ง€๋  ๋•Œ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐ์ฒ˜์˜ ๋‹ค์‹œ ์‹œ์ž‘ ์ •์ฑ…์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์œ ํšจํ•œ ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Never(๊ธฐ๋ณธ)
  • Always
  • OnFailure
์˜ˆ
assertion.submods.container.restart_policy == "Never"

VM ์–ด์„ค์…˜

์–ด์„ค์…˜ ์œ ํ˜• ์„ค๋ช…

assertion.google_service_accounts

์ƒํ˜ธ์ž‘์šฉ:

๋ฌธ์ž์—ด ๋ฐฐ์—ด

์ง€์ •๋œ ์„œ๋น„์Šค ๊ณ„์ •์ด ์›Œํฌ๋กœ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” VM์— ์—ฐ๊ฒฐ๋˜์—ˆ๋Š”์ง€ ๋˜๋Š” VM ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์—์„œ tee-impersonate-service-accounts ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚˜์—ด๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ
workload-service-account@my-project.iam.gserviceaccount.com in assertion.google_service_accounts
assertion.hwmodel ๋ฌธ์ž์—ด

๊ธฐ๋ณธ ์ปจํ”ผ๋ด์…œ ์ปดํ“จํŒ… ๊ธฐ์ˆ ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ง€์›๋˜๋Š” ํ”Œ๋žซํผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • GCP_AMD_SEV
  • INTEL_TDX
์˜ˆ
assertion.hwmodel == "GCP_AMD_SEV"

assertion.submods.confidential_space.monitoring_enabled

์ƒํ˜ธ์ž‘์šฉ:

  • ์›Œํฌ๋กœ๋“œ ์ž‘์„ฑ์ž: monitoring_memory_allow ์‹คํ–‰ ์ •์ฑ…์ž…๋‹ˆ๋‹ค.
  • ์›Œํฌ๋กœ๋“œ ์—ฐ์‚ฐ์ž: tee-memory-monitoring-enable ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.
๋ถˆ๋ฆฌ์–ธ

์ฆ๋ช… ํ•ญ๋ชฉ์˜ ๋ชจ๋‹ˆํ„ฐ๋ง ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ
assertion.submods.confidential_space.monitoring_enabled.memory == true
assertion.submods.gce.instance_id ๋ฌธ์ž์—ด

VM ์ธ์Šคํ„ด์Šค ID๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ
assertion.submods.gce.instance_id == "0000000000000000000"
assertion.submods.gce.instance_name ๋ฌธ์ž์—ด

VM ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ
assertion.submods.gce.instance_name == "workload-vm"
assertion.submods.gce.project_id ๋ฌธ์ž์—ด

VM์ด ์ง€์ •๋œ ํ”„๋กœ์ ํŠธ ID๋กœ Google Cloud ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ
assertion.submods.gce.project_id == "project-id"
assertion.submods.gce.project_number ๋ฌธ์ž์—ด

VM์ด ์ง€์ •๋œ ํ”„๋กœ์ ํŠธ ๋ฒˆํ˜ธ๋กœ Google Cloud ํ”„๋กœ์ ํŠธ์—์„œ ์‹คํ–‰๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ
assertion.submods.gce.project_number == "00000000000"

assertion.submods.gce.zone

์ƒํ˜ธ์ž‘์šฉ:

  • ์›Œํฌ๋กœ๋“œ ์šด์˜์ž: --zone ๊ฐ’์ž…๋‹ˆ๋‹ค.
๋ฌธ์ž์—ด

VM์ด ์ง€์ •๋œ ์˜์—ญ์—์„œ ์‹คํ–‰๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ
assertion.submods.gce.zone == "us-central1-a"

assertion.submods.nvidia_gpu.cc_mode

์ƒํ˜ธ์ž‘์šฉ:

  • ์›Œํฌ๋กœ๋“œ ์—ฐ์‚ฐ์ž: tee-install-gpu-driver ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ณ€์ˆ˜
์ •์˜๋œ ๋ฌธ์ž์—ด

NVIDIA์˜ ์ปจํ”ผ๋ด์…œ ์ปดํ“จํŒ… ๋“œ๋ผ์ด๋ฒ„ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์œ ํšจํ•œ ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • OFF: NVIDIA ์ปจํ”ผ๋ด์…œ ์ปดํ“จํŒ… ๊ธฐ๋Šฅ์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ON: NVIDIA H100 ํ•˜๋“œ์›จ์–ด, ํŽŒ์›จ์–ด, ์†Œํ”„ํŠธ์›จ์–ด์—์„œ ์ปจํ”ผ๋ด์…œ ์ปดํ“จํŒ… ๊ธฐ๋Šฅ์„ ์™„์ „ํžˆ ํ™œ์„ฑํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • DEVTOOLS: GPU๊ฐ€ ON ๋ชจ๋“œ์˜ ์›Œํฌํ”Œ๋กœ์™€ ์ผ์น˜ํ•˜์ง€๋งŒ ๋ณด์•ˆ ๋ณดํ˜ธ๋ฅผ ์‚ฌ์šฉ ์ค‘์ง€ํ•˜๋Š” ๋ถ€๋ถ„ ์ปจํ”ผ๋ด์…œ ์ปดํ“จํŒ… ๋ชจ๋“œ์— ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ
assertion.submods.nvidia_gpu.cc_mode == "ON"