Google ๋ฌธ์๋ ์ ํ ๋๋ ๊ธฐ๋ฅ์ ์ค๋นํ๊ณ ์คํํ๋ ๋ฐ ๋์์ด ๋๋๋ก ์์ฑ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ง๋ง ์กฐ์ง์ด ๋ณด์ ์ ์ฝ์กฐ๊ฑด์ ์ ์ฉํ๋ฉด ์ผ๋ถ ๋ฌธ์๊ฐ ์ ๋๋ก ์๋ํ์ง ์์ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํ์ฌ๋ Cloud Foundation Toolkit, Google Cloud ๋ณด์ ์ฒญ์ฌ์ง์ ์ผ๋ถ ๋ณด์ ์ ์ฝ์กฐ๊ฑด์ ๊ตฌํํ๊ฑฐ๋ ์์ฒด์ ์ผ๋ก ๋ง๋ค ์ ์์ต๋๋ค.
์ด ๋์๋ง์ ๋ณด์ ์ ์ฝ์กฐ๊ฑด์ ์ฌ์ฉํ๋ ์กฐ์ง์์ ๋ณผ ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ ์ค๋ฅ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๋ณด์ ์ ์ฝ์กฐ๊ฑด ๋ฌธ์ ํด๊ฒฐ
IT ์ด์ํ ๋๋ ๋ณด์ํ์์ ์กฐ์ง ์ ์ฑ ์ ํตํด ๋ณด์ ์ ์ฝ์กฐ๊ฑด์ ์ฌ์ฉ ์ค์ ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ ์ฝ์กฐ๊ฑด์ ์กฐ์ง์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ํํฉ๋๋ค.
์ค๋ฅ๋ฅผ ๋ฐํํ๋ API ์์ฒญ์ ์คํํ๋ฉด API ์๋ต์ ํด๋น ์ค๋ฅ๊ฐ ์ ์ฑ ์๋ฐ์ผ๋ก ์ธํ ๊ฒ์ธ์ง ์๋ ค์ค๋๋ค. ์๋ต์ ์๋ฐ๋๋ ์ ์ฝ์กฐ๊ฑด์ ์ค๋ช ํด์ผ ํฉ๋๋ค. ๋ค์ ๋ฌธ์ ํด๊ฒฐ ๋จ๊ณ๋ฅผ ํตํด ์๋ฐ ์ฌ๋ถ๋ฅผ ํ๋จํ๊ณ ํ์ ํ ์ ์์ต๋๋ค.
API ์๋ต ์ค๋ฅ ๋ฉ์์ง๋ฅผ ๊ฒํ ํฉ๋๋ค. ๋ฐฐํฌ๊ฐ ์ด๋ค ๋ณด์ ์ ์ฝ์กฐ๊ฑด์ ์๋ฐํ๋์ง ํ์ ํ ์ ์๋์?
๋ค์ ์์์์๋
sql.restrictPublicIp
์ ์ฝ์กฐ๊ฑด์ด ๋ฌธ์ ์์ ๋ณด์ฌ์ค๋๋ค.Organization Policy check failure The external IP of this instance violates the constraints/sql.restrictPublicIp enforced
์ ์ฑ ์๋ฐ์ ์ดํดํ๋ ๊ฒฝ์ฐ ์ ์ฝ์กฐ๊ฑด ๋ด์์ ์๋ํ๋๋ก ๋ฆฌ์์ค ๋ฐฐํฌ ๊ตฌ์ฑ์ ์ ๋ฐ์ดํธํฉ๋๋ค.
์ธ๋ถ ๊ณต๊ฐ IP ์ฃผ์๋ฅผ ์ ํํ๋ ์์ ์์์์ ๋ด๋ถ ๋น๊ณต๊ฐ IP ์ฃผ์๋ฅผ ์ฌ์ฉํ๋๋ก Cloud SQL ์ธ์คํด์ค๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
์ ์ฝ์กฐ๊ฑด์ด ์ ์ฉ๋๋ ์ด์ ๋ ๋ฌด์์ ํด์ผ ํ ์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด ๋ณด์ํ๊ณผ ํ๋ ฅํ์ฌ ์กฐ์ง์ ๊ณ์ธต ๊ตฌ์กฐ์์ ์ ์ฑ ์ด ์ ์ฉ๋๋ ์์น์ ๊ถ์ฅ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์.
Terraform ํ ํ๋ฆฟ๊ณผ ๊ฐ์ ๋ฐฐํฌ ํ ํ๋ฆฟ์ด ์กฐ์ง์ ๊ณต์ ๋์๋์ง ํ์ธํฉ๋๋ค. ์ด๋ฌํ ํ ํ๋ฆฟ์ Google Cloud ์ธํ๋ผ๊ฐ ๊ตฌ์ฑ๋ ๋ฐฉ๋ฒ์ ์์ธํ ์ค๋ช ํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌ๋ฅผ ์ ํํด์ผ ํฉ๋๋ค.
์ผ๋ฐ์ ์ธ ๋ณด์ ์ ์ฝ์กฐ๊ฑด ๋ฌธ์
Google Cloud์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ ๋ ๋ค์ ์์์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
ERROR: (gcloud.alpha.sql.instances.create) HTTPError 400: Invalid request: Organization Policy check failure: the external IP of this instance violates the constraints/sql.restrictPublicIp enforced at the 123456789 project.
์ด ์์์์๋ ์ธ๋ถ ๊ณต๊ฐ IP ์ฃผ์๋ฅผ ์ฌ์ฉํ๋๋ก Cloud SQL ์ธ์คํด์ค๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ฌ์ฉ์ ํ๊ฒฝ์ ์ ์ฉ๋๋ ์ ์ฑ ์์ ๋ณด์ ์ ์ฝ์กฐ๊ฑด์ด ์ ์ฉ๋๊ณ ์์ต๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋ ๋ค์๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ๋ณด์ ์ ์ฝ์กฐ๊ฑด์ ์ฌ์ฉ ์ค์ ํ๊ณ API ์ค๋ฅ ์๋ต์์ ์์ธํ ํ์ธํ ์ ์์ต๋๋ค.
Compute Engine
์ ์ฝ์กฐ๊ฑด ์ด๋ฆ | ๊ตฌํ ์ด์ | ์ถ์ฒ ํด๊ฒฐ ๋ฐฉ๋ฒ |
---|---|---|
constraints/compute.disableNestedVirtualization | KVM ํธํ ํ์ดํผ๋ฐ์ด์ ๋ฅผ VM ๋ด์ ์ค์นํ์ง ๋ชปํ๋๋ก ํฉ๋๋ค. ์ด๋ฌํ ๋์์ ์ ์ ํ ํจ์น ์ ์ฉ ๋ฐ ๊ด๋ฆฌ ์์ด ๋ณด์ ์ํ์ ์ด๋ํ ์ ์์ต๋๋ค. | ํ๋์จ์ด ๊ฐ์ ์ค์ฒฉ ๊ฐ์ํ๋ฅผ ์ฌ์ฉํ์ง ์๋๋ก VM์ ๊ตฌ์ฑํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Intel Haswell ์ด์์ CPU ํ๋ซํผ์์ ์คํ๋๋ ๋ชจ๋ Compute Engine VM์ ์ด ๊ธฐ๋ฅ์ด ์ฌ์ฉ ์ค์ ๋ฉ๋๋ค. |
constraints/compute.requireShieldedVm | ๋ณด์ ๋ถํ , vTPM, ๋ฌด๊ฒฐ์ฑ ๋ชจ๋ํฐ๋ง ์ต์ ์ด ์ฌ์ฉ ์ค์ ๋ ์ํ๋ก ๋ณด์ ๋์คํฌ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ VM ์ธ์คํด์ค๊ฐ ํ์ํฉ๋๋ค. ์ด๋ฌํ ์ต์ ์ VM์ด ์กฐ์๋๊ฑฐ๋ ๋ฐ์ดํฐ๊ฐ ์ก์ธ์ค ๋๋ ์์ ๋๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค. | VM์ ๋ง๋ค ๋ ๋ณด์ VM์ ์ฌ์ฉ ์ค์ ํ์ง ๋ง์ธ์. GKE ํด๋ฌ์คํฐ๋ฅผ ๋ง๋ค๋ ค๋ฉด ๋ณด์ GKE ๋ ธ๋๋ฅผ ์ฌ์ฉ ์ค์ ํด์ผ ํฉ๋๋ค. Dataflow๋ ํ์ฌ ๋ณด์ VM ์์ ์๋ฅผ ์ง์ํ์ง ์์ต๋๋ค. |
constraints/compute.disableSerialPortAccess | VM๊ณผ ์ํธ์์ฉํ๊ฑฐ๋ ๊ณต๊ฒฉ์ ํ์ฑํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ง๋จ ์ถ๋ ฅ์ ๋ณด๋ ค๋ฉด ๋ณด์ ๋ฒกํฐ๋ฅผ ์ญ์ ํฉ๋๋ค. | VM์ ๋ง๋ค ๋ ์ง๋ ฌ ํฌํธ ์ก์ธ์ค๋ฅผ ์ฌ์ฉ ์ค์ ํ์ง ๋ง์ธ์. |
constraints/compute.disableGuestAttributesAccess | ์ ์ฑ ์ฑ์์ ์ ์ฉ๋ ์ ์๋ ๊ธฐ๋ณธ ํธ์คํธ ๋ฐ ํ๋ซํผ์ ๋ํ ์ ๋ณด ์์ ์ต์ํํฉ๋๋ค. | Compute Engine VM์ ๊ฒ์คํธ ์์ฑ์ ์ฝ๊ธฐ ์ํด Compute Engine API๋ฅผ ์ฌ์ฉํ์ง ๋ง์ธ์. |
constraints/compute.vmExternalIpAccess | ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ธ๋ถ IP ์ฃผ์๋ก ์คํ๋๊ณ ์ธํฐ๋ท์์ ์ก์ธ์คํ ์ ์๋๋ก ํฉ๋๋ค. | VM์ ์ธ๋ถ IP ์ก์ธ์ค๋ฅผ ์ฌ์ฉ ์ค์งํฉ๋๋ค. ๋ด๋ถ ๋น๊ณต๊ฐ IP ์ฃผ์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. GKE๋ ๊ณต๊ฐ IP ์ฃผ์ ์์ด ๋น๊ณต๊ฐ ํด๋ฌ์คํฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. Dataprep๊ณผ Dataflow๋ ํ์ฌ ๋น๊ณต๊ฐ IP ์ฃผ์๋ฅผ ์ง์ํ์ง ์์ต๋๋ค. |
๊ฐ์ ๋คํธ์ํฌ ๋ฐ IP ์ฃผ์
์ ์ฝ์กฐ๊ฑด ์ด๋ฆ | ๊ตฌํ ์ด์ | ์ถ์ฒ ํด๊ฒฐ ๋ฐฉ๋ฒ |
---|---|---|
constraints/compute.skipDefaultNetworkCreation | ํ์ฌ ๊ด๋ฆฌ Virtual Private Cloud(VPC)๋ง ๋ง๋ค ์ ์๊ณ ๋คํธ์ํฌ ํธ๋ํฝ ๋๋ ํํฐ๋ง ๊ท์น์ด ์ ์ฉ๋์๋์ง ํ์ธํฉ๋๋ค. | ์กฐ์ง์ ๊ธฐ์กด VPC์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฐ๊ฒฐํฉ๋๋ค. ์๋ ์์ฑ๋ ๊ธฐ๋ณธ VPC๋ ์ ํ๋ก์ ํธ์ ๋ฐฐํฌ๋์ง ์์ต๋๋ค. |
constraints/compute.restrictXpnProjectLienRemoval | ๋ค๋ฅธ ํ๋ก์ ํธ์ ๋ฆฌ์์ค๊ฐ ํด๋น ํ๋ก์ ํธ์ ๋คํธ์ํฌ ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ณต์ VPC๊ฐ ์ค์๋ก ์ญ์ ๋์ง ์๋๋ก ํฉ๋๋ค. | ๊ณต์ VPC๋ฅผ ์ญ์ ํ์ง ๋ง์ธ์. ์ญ์ ํ ์ฌ๋ฐ๋ฅธ ๋ฆฌ์์ค๋ฅผ ํ๊ฒํ ํ๊ณ ์๋์ง ํ์ธํ์ธ์. |
constraints/sql.restrictPublicIp | Cloud SQL ์ธ์คํด์ค๊ฐ ์ธ๋ถ IP ์ฃผ์๋ก ์คํ๋๊ณ ์ธํฐ๋ท์์ ์ก์ธ์คํ ์ ์๋๋ก ํฉ๋๋ค. | ์ธ๋ถ ๊ณต๊ฐ IP ์ฃผ์๋ฅผ ์ฌ์ฉํ๋๋ก Cloud SQL ์ธ์คํด์ค๋ฅผ ๊ตฌ์ฑํ์ง ๋ง์ธ์. ๋์ ๋ด๋ถ ๋น๊ณต๊ฐ IP ์ฃผ์๋ฅผ ์ฌ์ฉํ๋๋ก Cloud SQL ์ธ์คํด์ค๋ฅผ ๊ตฌ์ฑํ์ธ์. |
ID ๋ฐ ์ธ์ฆ
์ ์ฝ์กฐ๊ฑด ์ด๋ฆ | ๊ตฌํ ์ด์ | ์ถ์ฒ ํด๊ฒฐ ๋ฐฉ๋ฒ |
---|---|---|
constraints/iam.disableServiceAccountKeyCreation | ์๋น์ค ๊ณ์ ํค๊ฐ ๋ ธ์ถ๋๋ฉด ๋ณด์ ์ํ์ด ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก ๋ด๋ณด๋ด์ง ๋ชปํ๊ฒ ํฉ๋๋ค. | ์๋น์ค ๊ณ์ ํค์ ๋ ์์ ํ ๋์์ ์ฌ์ฉํ์ฌ ์ธ์ฆํฉ๋๋ค. |
constraints/storage.uniformBucketLevelAccess | Identity and Access Management(IAM)๋ง ์ฌ์ฉํ ์ ์๋๋ก ํ์ฉํ์ฌ ์คํ ๋ฆฌ์ง ๋ฒํท์ ์๋ชป๋๊ฑฐ๋ ์ผ๊ด์ฑ ์๋ ๊ถํ์ด ์ ์ฉ๋ ์ํ์ ์ต์ํํฉ๋๋ค. | ๊ท ์ผํ ๋ฒํท ์์ค ์ก์ธ์ค๋ฅผ ์ฌ์ฉ ์ค์ ํ์ฌ Cloud Storage ๋ฒํท์ ๋ณดํธํฉ๋๋ค. |
constraints/iam.allowedPolicyMemberDomains | Google Cloud ๋ฆฌ์์ค ์ก์ธ์ค๋ฅผ ์น์ธ๋ ๋๋ฉ์ธ์ผ๋ก๋ง ์ ํํฉ๋๋ค. | ์น์ธ๋ ๋๋ฉ์ธ ์ค ํ๋์์ ๊ณ์ ์ ์ฌ์ฉํฉ๋๋ค. ์ด ์ ์ฝ์กฐ๊ฑด์ ๋ํด ์๋ ค์ง ๋ฌธ์ ๊ฐ ์ถ๊ฐ๋ก ์์ต๋๋ค. |
API ์๋ต ์ค๋ฅ ์์
Cloud SQL๋ก ์ธ๋ถ ๊ณต๊ฐ IP ์ฃผ์๋ฅผ ์ ํํ๋ ์์ ์์์์๋ ์ ์ฑ ์๋ฐ์ผ๋ก ์ธํด API๊ฐ ์ค๋ฅ๋ฅผ ๋ฐํํฉ๋๋ค. ๋ค์ ์์ธํ ์์์์๋ ์์ฒญ์ ์คํจํ๊ฒ ํ๋ ์ ์ฝ์กฐ๊ฑด์ ์๋ ค์ฃผ๋ API ์๋ต์ ๋ณด์ฌ์ค๋๋ค. ์์ฒด API ์๋ต์ ๊ฒํ ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ๊ฐ ์คํจํ ์ด์ ๋ฅผ ํ์ ํฉ๋๋ค.
Google Cloud CLI์์ Cloud SQL ์คํจ:
$ gcloud alpha sql instances create mysql-node --project my-sql-project ERROR: (gcloud.alpha.sql.instances.create) HTTPError 400: Invalid request: Organization Policy check failure: the external IP of this instance violates the constraints/sql.restrictPublicIp enforced at the 123456789 project.
Terraform์ ์ฌ์ฉํ Cloud SQL ์คํจ:
$ terraform apply plan.out [...] module.mysql-db.google_sql_database_instance.default: Creating... Error: Error, failed to create instance backend01-db-1c81e0e3: googleapi: Error 400: Invalid request: Organization Policy check failure: the external IP of this instance violates the constraints/sql.restrictPublicIp enforced at the 123456789 project., invalid
ํ๋ก์ ํธ์ ์ ์ฉ๋ ์กฐ์ง ์ ์ฑ ๋์ด
ํ๋ก์ ํธ๋ ํด๋ ๋๋ ์กฐ์ง ์์ค์์ ์ ์ฑ ์ ์์๋ฐ์ ์ ์์ต๋๋ค. ์ก์ธ์ค ์ญํ ์ ๋ฐ๋ผ ์๋ฐ๋ ์ ์ฝ์กฐ๊ฑด์ด ์ ์ฉ๋๋ ์์น๋ฅผ ํ์ธํ๊ธฐ ์ํด ๊ณ์ธต ๊ตฌ์กฐ์ ๋ ๋์ ์์ค์์ ์ํ๋๋ ์ ์ฑ ์ ๋ณด์ง ๋ชปํ ์ ์์ต๋๋ค.
ํ๋ก์ ํธ์ ์ ์ฉ๋ ์ ์ฑ ๋๋ ์์ธ๋ฅผ ํ์ธํ๋ ค๋ฉด gcloud org-policies list ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
gcloud org-policies list --project=PROJECT_ID
PROJECT_ID๋ฅผ ์ ์ฉ๋ ์ ์ฑ ์ ํ์ธํ๋ ค๋ ํ๋ก์ ํธ๋ก ๋ฐ๊ฟ๋๋ค.
์ ์ฉ๋ ์ ์ฑ
์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ณด๋ ค๋ฉด gcloud org-policies describe ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ธ์. ์ค๋ช
ํ ์ ์ฑ
์ ์ด๋ฆ๊ณผ --project
๋งค๊ฐ๋ณ์๊ฐ ์๋ ํ๋ก์ ํธ ID๋ฅผ ์ ๊ณตํฉ๋๋ค.
gcloud org-policies describe POLICY_NAME \ --project=PROJECT_ID
๋ค์์ ๋ฐ๊ฟ๋๋ค.
POLICY_NAME: ์กฐ์ง ์ ์ฑ ์ ์ด๋ฆ
PROJECT_ID: ์ ์ฉ๋ ์ ์ฑ ์ ํ์ธํ ํ๋ก์ ํธ
๋ค์ ๋จ๊ณ
์ ์ฑ ์ด ์ ์ฉ๋๋ ์์น์ ๋ณด์ ์ ์ฝ์กฐ๊ฑด์ ํด๊ฒฐํ ๋ฐฉ๋ฒ์ ํ์ธํ ์ ์์ผ๋ฉด IT ์ด์ํ ๋๋ ๋ณด์ํ์ ๋ฌธ์ํ์ธ์. ๊ฐ ์กฐ์ง์ ๊ฐ์์ ํ๊ฒฝ์ ๋ง์ถค์ค์ ๋ ์ ์ฑ ๊ณผ ์ฒญ์ฌ์ง์ ์ ์ฉํฉ๋๋ค.
์กฐ์ง์ ์ ์ฉํ ์ ์๋ ๋ชจ๋ ์ปจํธ๋กค์ ๋ํ ์์ธํ ๋ด์ฉ์ ์กฐ์ง ์ ์ฑ ์ ์ฝ์กฐ๊ฑด ๋ชฉ๋ก์ ์ฐธ์กฐํ์ธ์.