๋ฐ์ดํฐ ๊ณต๋์์ ์๋ ์ํฌ๋ก๋์์ ์ก์ธ์คํ ์ ์๋๋ก ๊ธฐ๋ฐ ๋ฐ์ดํฐ์ ๋ํด ๋ค์ ๋ฆฌ์์ค๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค.
Google Cloud์ ์ ์ฅ๋ ์ํธํ๋ ๋ฐ์ดํฐ
์ํฌ๋ก๋๋ฅผ ์น์ธํ๋ ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ ํ (WIP) WIP์์ ์ํฌ๋ก๋๋ฅผ ์น์ธํ ํ์๋ ๋ฐ์ดํฐ ๊ณต๋์์ ์์ ๊ธฐ๋ฐ ๋ฐ์ดํฐ์ ์ก์ธ์คํ์ฌ ์ด๋ฅผ ์กฐ์ํ ์ ์์ต๋๋ค.
๋ํ ๋ฐ์ดํฐ ๊ณต๋์์ ์๋ 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 ์ ๊ณต์ ์ฒด์์ ์ํฌ๋ก๋ ์๋น์ค ๊ณ์ ์ ์ง์ ํ์ฌ ์ํฌ๋ก๋ ์๋น์ค ๊ณ์ ์ด ๋ฐ์ดํฐ ๊ณต๋์์ ์ ์๋น์ค ๊ณ์ ์ ๊ฐ์ฅํ์ฌ ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ ์กฐ์ํ ์ ์๋๋ก ํฉ๋๋ค.
์๋น์ค ๊ณ์ ๊ฐ์ฅ์ ๋ค์ ์๋๋ฆฌ์ค์์๋ง ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์์ฑ ๋งคํ๊ณผ ์๋ช ์์ ์ฌ์ฉํ๋ ๊ตฌ๋ฌธ์ด ํธํ๋์ง ์์ผ๋ฏ๋ก ์ด๋ฏธ์ง ์๋ช ์ ์ธ์ฆ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ก ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ
์ ํด ID๋ฅผ ์ง์ํ์ง ์๋ API์ ์ก์ธ์คํ๋ ๊ฒฝ์ฐ
VM ์ธ์คํด์ค์ ๋งค์ฐ ๊ธด selfLink
์์ฑ์ด ์์ผ๋ฉด ์๋น์ค ๊ณ์ ๊ฐ์ฅ ๋ฐฉ๋ฒ์ด WIP ์ ๊ณต์์ ์ธ์ฆํ์ง ๋ชปํ ์ ์์ต๋๋ค. ์ด๋ ์ฆ๋ช
ํ ํฐ์ sub
ํด๋ ์(selfLink
๊ฐ์ผ๋ก ์ค์ ๋จ)์ด WIP ๊ณต๊ธ์์์ 127๋ฐ์ดํธ ์ ํ์ด ์๋ google.subject
์์ฑ์ ๋งคํ๋๊ธฐ ๋๋ฌธ์
๋๋ค.
VM ์ธ์คํด์ค selfLink
๊ฐ์ด 127๋ฐ์ดํธ๋ฅผ ์ด๊ณผํ๋ ๊ฒฝ์ฐ VM ์ธ์คํด์ค์ ์ด๋ฆ์ ๋ฐ๊ฟ selfLink
๋ฅผ ๋จ์ถํ๊ฑฐ๋ ์ง์ ๋ฆฌ์์ค ์ก์ธ์ค ๋ฐฉ๋ฒ์ ๋์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
WIP ๋ฐ ์ ๊ณต์ ์ฒด ์ค์
์ ๊ณต์ ์ฒด ์ค์ ๋จ๊ณ๋ ์ง์ ๋ฆฌ์์ค ์ก์ธ์ค๋ฅผ ์ฌ์ฉํ๋์ง ๋๋ ์๋น์ค ๊ณ์ ๊ฐ์ฅ์ ์ฌ์ฉํ๋์ง์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
์ง์ ๋ฆฌ์์ค ์ก์ธ์ค
์ง์ ๋ฆฌ์์ค ์ก์ธ์ค ๋ฐฉ๋ฒ์๋ WIP ๋ฐ ์ ๊ณต์ ์ฒด๋ฅผ ์ค์ ํ ๋ค์ ํน์ ์ํฌ๋ก๋ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ค์ด์ ์คํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก IAM ์ญํ ์ ์ค์ ํ๋ ๊ฒ์ด ํฌํจ๋ฉ๋๋ค.
WIP ๋ฐ ์ ๊ณต์ ์ฒด ์ค์
WIP ๋ฐ ์ ๊ณต์ ์ฒด๋ฅผ ์ค์ ํ๋ ค๋ฉด ๋ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
WIP๋ฅผ ๋ง๋ญ๋๋ค.
gcloud iam workload-identity-pools create DATA_COLLABORATOR_POOL_NAME \ --location=global
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
์๋น์ค ๊ณ์ ๊ฐ์ฅ
์๋น์ค ๊ณ์ ๊ฐ์ฅ ๋ฐฉ๋ฒ์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค.
๊ฐ ๋ฐ์ดํฐ ๊ณต๋์์ ์ ํ๋ก์ ํธ์์ ์๋น์ค ๊ณ์ ์ ๋ง๋ค๊ณ ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณตํธํํ ๊ถํ์ ๋ถ์ฌํฉ๋๋ค.
๊ฐ ๋ฐ์ดํฐ ๊ณต๋์์ ์ ํ๋ก์ ํธ์์ WIP๋ฅผ ๋ง๋ ๋ค์, ๋ฐฉ๊ธ ๋ง๋ ๊ฐ ํ๋ก์ ํธ์ ์๋น์ค ๊ณ์ ์ ํด๋น WIP์ ์ฐ๊ฒฐํฉ๋๋ค.
๊ฐ WIP์์ WIP ์ ๊ณต์๋ฅผ ๋ง๋ค์ด ๋ฐ์ดํฐ ๊ณต๋์์ ์ ์๋น์ค ๊ณ์ ์ ๊ฐ์ฅํ ์ ์๋ ๊ณ์ ์ผ๋ก ์ํฌ๋ก๋ ์๋น์ค ๊ณ์ ์ ์ง์ ํฉ๋๋ค.
๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณตํธํํ ์๋น์ค ๊ณ์ ์ค์
๋ฐ์ดํฐ ๊ณต๋์์ ์ ํ๋ก์ ํธ์์ ์๋น์ค ๊ณ์ ์ ๋ง๋ญ๋๋ค.
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 ๋ฐ ์ ๊ณต์๋ฅผ ์ค์ ํ๋ ค๋ฉด ๊ฐ ๋ฐ์ดํฐ ๊ณต๋์์ ์ ํ๋ก์ ํธ์์ ๋ค์ ์๋ด๋ฅผ ์๋ฃํ์ธ์.
WIP๋ฅผ ๋ง๋ญ๋๋ค.
gcloud iam workload-identity-pools create DATA_COLLABORATOR_POOL_NAME \ --location=global
๊ฐ์ฅํ ์๋น์ค ๊ณ์ ์ 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
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 ์ธ์คํด์ค์์ ์ํํ ์ด์ค์ ์ ๊ฒ์ฆํ ์ ์์ต๋๋ค.
์ด๋ฏธ์ง ์ด์ค์
์ด์ค์ | ์ ํ | ์ค๋ช |
---|---|---|
์ํธ์์ฉ:
|
์ ์๋ ๋ฌธ์์ด |
Confidential Space ์ด๋ฏธ์ง๊ฐ ๋๋ฒ๊ทธ ๋๋ ํ๋ก๋์ ๋ฒ์ ์ธ์ง ํ์ธํฉ๋๋ค. ์ ํจํ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์์๋ค์ ์ฝ๋๋ Confidential Space ์ด๋ฏธ์ง์ ๋๋ฒ๊ทธ ๋ฒ์ ์ด ์ฌ์ฉ ์ค์ธ์ง ํ์ธํฉ๋๋ค.
๋ค์ ์ฝ๋๋ Confidential Space ์ด๋ฏธ์ง์ ํ๋ก๋์ ๋ฒ์ ์ด ์ฌ์ฉ ์ค์ธ์ง ํ์ธํฉ๋๋ค.
|
assertion.submods.confidential_space.support_attributes |
๋ฌธ์์ด ๋ฐฐ์ด |
TEE์ ๋ณด์ ๋ฒ์ ์ด ํ๋ก๋์ Confidential Space ์ด๋ฏธ์ง์ธ์ง ํ์ธํฉ๋๋ค. ๋๋ฒ๊ทธ Confidential Space ์ด๋ฏธ์ง์๋ ์ค์ ๋ ์ง์ ์์ฑ์ด ์์ต๋๋ค. ์ง์ ์์ฑ์ 3๊ฐ์ง์ ๋๋ค.
์๋ค์ ์ฝ๋๋ ์์ ์ ์ธ ๋ฒ์ ์ Confidential Space ์ด๋ฏธ์ง๊ฐ ์ฌ์ฉ ์ค์ธ์ง ํ์ธํฉ๋๋ค.
|
assertion.swname |
์ ์๋ ๋ฌธ์์ด |
์ฆ๋ช
ํญ๋ชฉ์์ ์คํ๋๋ ์ํํธ์จ์ด๋ฅผ ํ์ธํฉ๋๋ค. ์ด ๊ฐ์ ํญ์ ์
|
assertion.swversion |
๋ฌธ์์ด ๋ฐฐ์ด |
Confidential Space ์ด๋ฏธ์ง์ ์ํํธ์จ์ด ๋ฒ์ ์ ํ์ธํฉ๋๋ค. ์ด๋ฏธ์ง์ ์ต์ ๋ฒ์ ์ ํ๊ฒํ
ํ๋ ค๋ฉด ์
|
์ปจํ ์ด๋ ์ด์ค์
์ด์ค์ | ์ ํ | ์ค๋ช |
---|---|---|
์ํธ์์ฉ:
|
๋ฌธ์์ด ๋ฐฐ์ด |
์ํฌ๋ก๋ ์ด๋ฏธ์ง์ ์ฌ์ฉ๋๋ CMD ๋ช ๋ น์ด ๋ฐ ๋งค๊ฐ๋ณ์๋ฅผ ํ์ธํฉ๋๋ค. ์์๋ค์ ์ฝ๋๋ ์ํฌ๋ก๋ ์ด๋ฏธ์ง์ CMD๋ฅผ ๋ฎ์ด์ฐ์ง ์์๋์ง ํ์ธํฉ๋๋ค.
๋ค์ ์ฝ๋๋
|
์ํธ์์ฉ:
|
JSON ๊ฐ์ฒด |
ํ๊ฒฝ ๋ณ์ ๋ฐ ํด๋น ๊ฐ์ด ์ปจํ ์ด๋๋ก ๋ช ์์ ์ผ๋ก ์ ๋ฌ๋์๋์ง ํ์ธํฉ๋๋ค. ์๋ค์ ์ฝ๋๋ ํ๊ฒฝ ๋ณ์
|
์ํธ์์ฉ:
|
๋ฌธ์์ด |
์ํฌ๋ก๋ ์ฐ์ฐ์๊ฐ ์ปจํ ์ด๋์์ ํ๊ฒฝ ๋ณ์๋ฅผ ๋ฎ์ด์ผ๋์ง ํ์ธํฉ๋๋ค. ์์๋ค์ ์ฝ๋๋ ์ํฌ๋ก๋ ์ด์์๊ฐ
๋ค์ ์ฝ๋๋ ์ํฌ๋ก๋ ์ด์์๊ฐ ํ๊ฒฝ ๋ณ์๋ฅผ ๋ฎ์ด์ฐ์ง ์์๋์ง ํ์ธํฉ๋๋ค.
|
assertion.submods.container.image_digest |
๋ฌธ์์ด |
์ํฌ๋ก๋ ์ปจํ ์ด๋์ ์ด๋ฏธ์ง ๋ค์ด์ ์คํธ๋ฅผ ํ์ธํฉ๋๋ค. ์ด ์กฐ๊ฑด์ ์ง์ ํ๋ฉด ์ฌ๋ฌ ๋น์ฌ์๊ฐ ์์ ์ ๋ฐ์ดํฐ์ ์ก์ธ์คํ๋๋ก ์น์ธ๋ ์ํฌ๋ก๋์ ๋์ํ ์ ์์ต๋๋ค. ์
|
assertion.submods.container.image_id |
๋ฌธ์์ด |
์ํฌ๋ก๋ ์ปจํ ์ด๋์ ์ด๋ฏธ์ง ID๋ฅผ ํ์ธํฉ๋๋ค. ์
|
์ํธ์์ฉ:
|
๋ฌธ์์ด |
Confidential Space ์ด๋ฏธ์ง์์ ์คํ๋๋ ์ํฌ๋ก๋ ์ปจํ ์ด๋์ ์์น๋ฅผ ํ์ธํฉ๋๋ค. ์
|
์ํธ์์ฉ:
|
JSON ๊ฐ์ฒด |
์ด๋ฏธ์ง์ ํน์ ์๋ช ์ด ์๊ฑฐ๋ ๊ณต๊ฐ ํค์ ์๋ช ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์๋ช ๋์๋์ง ํ์ธํฉ๋๋ค. ์ด ์กฐ๊ฑด์ ์ง์ ํ๋ฉด ์ฌ๋ฌ ๋น์ฌ์๊ฐ ์์ ์ ๋ฐ์ดํฐ์ ์ก์ธ์คํ๋๋ก ์น์ธ๋ ์ํฌ๋ก๋์ ๋์ํ ์ ์์ต๋๋ค. ์ด์ค์ ์๋ ๋ค์ ์์๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค.
์
|
์ํธ์์ฉ:
|
์ ์๋ ๋ฌธ์์ด |
์ํฌ๋ก๋๊ฐ ์ค์ง๋ ๋ ์ปจํ ์ด๋ ๋ฐ์ฒ์ ๋ค์ ์์ ์ ์ฑ ์ ํ์ธํฉ๋๋ค. ์ ํจํ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์
|
VM ์ด์ค์
์ด์ค์ | ์ ํ | ์ค๋ช |
---|---|---|
์ํธ์์ฉ:
|
๋ฌธ์์ด ๋ฐฐ์ด |
์ง์ ๋ ์๋น์ค ๊ณ์ ์ด ์ํฌ๋ก๋๋ฅผ ์คํํ๋ VM์ ์ฐ๊ฒฐ๋์๋์ง ๋๋ VM ๋ฉํ๋ฐ์ดํฐ์์ ์
|
assertion.hwmodel |
๋ฌธ์์ด |
๊ธฐ๋ณธ ์ปจํผ๋ด์ ์ปดํจํ ๊ธฐ์ ์ ํ์ธํฉ๋๋ค. ์ง์๋๋ ํ๋ซํผ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์
|
์ํธ์์ฉ:
|
๋ถ๋ฆฌ์ธ |
์ฆ๋ช ํญ๋ชฉ์ ๋ชจ๋ํฐ๋ง ์ํ๋ฅผ ํ์ธํฉ๋๋ค. ์
|
assertion.submods.gce.instance_id |
๋ฌธ์์ด |
VM ์ธ์คํด์ค ID๋ฅผ ํ์ธํฉ๋๋ค. ์
|
assertion.submods.gce.instance_name |
๋ฌธ์์ด |
VM ์ธ์คํด์ค์ ์ด๋ฆ์ ํ์ธํฉ๋๋ค. ์
|
assertion.submods.gce.project_id |
๋ฌธ์์ด |
VM์ด ์ง์ ๋ ํ๋ก์ ํธ ID๋ก Google Cloud ํ๋ก์ ํธ๋ฅผ ์คํํ๋์ง ํ์ธํฉ๋๋ค. ์
|
assertion.submods.gce.project_number |
๋ฌธ์์ด |
VM์ด ์ง์ ๋ ํ๋ก์ ํธ ๋ฒํธ๋ก Google Cloud ํ๋ก์ ํธ์์ ์คํ๋๋์ง ํ์ธํฉ๋๋ค. ์
|
์ํธ์์ฉ:
|
๋ฌธ์์ด |
VM์ด ์ง์ ๋ ์์ญ์์ ์คํ๋๋์ง ํ์ธํฉ๋๋ค. ์
|
์ํธ์์ฉ:
|
์ ์๋ ๋ฌธ์์ด |
NVIDIA์ ์ปจํผ๋ด์ ์ปดํจํ ๋๋ผ์ด๋ฒ ์ํ๋ฅผ ํ์ธํฉ๋๋ค. ์ ํจํ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์
|