์ด ํ์ด์ง์์๋ ํ์ฉ ์ ์ฑ ์์ ์กฐ๊ฑด๋ถ ์ญํ ๊ฒฐํฉ์ ์ฌ์ฉํ์ฌ ํน์ ๋ฆฌ์์ค์ ๋ํด ์ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. ์กฐ๊ฑด ํํ์์์ ๋ฆฌ์์ค ์์ฑ์ ์ฌ์ฉํ๋ฉด ์ฃผ ๊ตฌ์ฑ์์ด ๊ถํ์ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค ์ด๋ฆ, ์ ํ, Google Cloud ์๋น์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฆฌ์์ค์ ์ก์ธ์คํ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค.
์์ํ๊ธฐ ์ ์
- IAM ์กฐ๊ฑด๋ถ ์ญํ ๊ฒฐํฉ์ ๊ธฐ๋ณธ ์ฌํญ์ ์ดํดํ๊ธฐ ์ํด์๋ Identity and Access Management(IAM) ์กฐ๊ฑด ๊ฐ์๋ฅผ ์ฐธ์กฐํ์ธ์.
- ์กฐ๊ฑด ํํ์์์ ์ฌ์ฉํ ์ ์๋ ๋ฆฌ์์ค ์์ฑ์ ๊ฒํ ํ์ธ์.
- ๋ฆฌ์์ค ์ด๋ฆ ์์ฑ์ ๋ค์ Google Cloud ์๋น์ค์ ๋ํ ์ก์ธ์ค๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค.
- Apigee
- Application Integration
- Apigee API ํ๋ธ
- ๋ฐฑ์ ๋ฐ DR ์๋น์ค
- BigQuery
- BigQuery Reservation API
- Bigtable
- Binary Authorization
- Cloud Deploy
- Cloud Key Management Service
- Cloud Logging
- Cloud SQL
- Cloud Storage
- Compute Engine
- Dataform
- Google Kubernetes Engine
- Firestore
- Integration Connectors
- Apache Kafka์ฉ Google Cloud ๊ด๋ฆฌํ ์๋น์ค
- Pub/Sub ๋ผ์ดํธ
- Secret Manager
- Spanner
ํ์ํ ์ญํ
์กฐ๊ฑด๋ถ ์ญํ ๋ฐ์ธ๋ฉ์ ๊ด๋ฆฌํ๋ ๋ฐ ํ์ํ ๊ถํ์ ์ป์ผ๋ ค๋ฉด ๊ด๋ฆฌ์์๊ฒ ๋ค์ IAM ์ญํ ์ ๋ถ์ฌํด ๋ฌ๋ผ๊ณ ์์ฒญํ์ธ์.
-
ํ๋ก์ ํธ์ ๋ํ ์ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๋ ค๋ ๊ฒฝ์ฐ: ํ๋ก์ ํธ์ ๋ํ ํ๋ก์ ํธ IAM ๊ด๋ฆฌ์(
roles/resourcemanager.projectIamAdmin
) -
ํด๋์ ๋ํ ์ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๋ ค๋ ๊ฒฝ์ฐ: ํด๋์ ๋ํ ํด๋ ๊ด๋ฆฌ์(
roles/resourcemanager.folderAdmin
) -
ํ๋ก์ ํธ, ํด๋, ์กฐ์ง์ ๋ํ ์ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๋ ค๋ ๊ฒฝ์ฐ: ์กฐ์ง์ ๋ํ ์กฐ์ง ๊ด๋ฆฌ์(
roles/resourcemanager.organizationAdmin
) -
๊ฑฐ์ ๋ชจ๋ Google Cloud ๋ฆฌ์์ค์ ๋ํ ์ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๋ ค๋ ๊ฒฝ์ฐ: ์ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๋ ค๋ ๋ฆฌ์์ค๊ฐ ์๋ ํ๋ก์ ํธ, ํด๋ ๋๋ ์กฐ์ง์ ๋ํ ๋ณด์ ๊ด๋ฆฌ์(
roles/iam.securityAdmin
)
์ญํ ๋ถ์ฌ์ ๋ํ ์์ธํ ๋ด์ฉ์ ํ๋ก์ ํธ, ํด๋, ์กฐ์ง์ ๋ํ ์ก์ธ์ค ๊ด๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฌ์ ์ ์๋ ์ญํ ์๋ ์กฐ๊ฑด๋ถ ์ญํ ๋ฐ์ธ๋ฉ์ ๊ด๋ฆฌํ๋ ๋ฐ ํ์ํ ๊ถํ์ด ํฌํจ๋์ด ์์ต๋๋ค. ํ์ํ ์ ํํ ๊ถํ์ ๋ณด๋ ค๋ฉด ํ์ ๊ถํ ์น์ ์ ํผ์น์ธ์.
ํ์ ๊ถํ
์กฐ๊ฑด๋ถ ์ญํ ๋ฐ์ธ๋ฉ์ ๊ด๋ฆฌํ๋ ค๋ฉด ๋ค์ ๊ถํ์ด ํ์ํฉ๋๋ค.
-
ํ๋ก์ ํธ์ ๋ํ ์ก์ธ์ค ๊ถํ ๊ด๋ฆฌ:
- ํ๋ก์ ํธ์ ๋ํ
resourcemanager.projects.getIamPolicy
๊ถํ - ํ๋ก์ ํธ์ ๋ํ
resourcemanager.projects.setIamPolicy
๊ถํ
- ํ๋ก์ ํธ์ ๋ํ
-
ํด๋์ ๋ํ ์ก์ธ์ค ๊ด๋ฆฌ:
-
ํด๋์ ๋ํ
resourcemanager.folders.getIamPolicy
๊ถํ -
ํด๋์ ๋ํ
resourcemanager.folders.setIamPolicy
๊ถํ
-
ํด๋์ ๋ํ
-
์กฐ์ง์ ๋ํ ์ก์ธ์ค ๊ถํ ๊ด๋ฆฌ:
-
์กฐ์ง์ ๋ํ
resourcemanager.organizations.getIamPolicy
๊ถํ -
์กฐ์ง์ ๋ํ
resourcemanager.organizations.setIamPolicy
๊ถํ
-
์กฐ์ง์ ๋ํ
์ปค์คํ ์ญํ ์ด๋ ๋ค๋ฅธ ์ฌ์ ์ ์๋ ์ญํ ์ ์ฌ์ฉํ์ฌ ์ด ๊ถํ์ ๋ถ์ฌ๋ฐ์ ์๋ ์์ต๋๋ค.
๋ฆฌ์์ค ์ด๋ฆ ํ๋ฆฌํฝ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฆฌ์์ค ๊ทธ๋ฃน์ ์ก์ธ์ค ๊ถํ ๋ถ์ฌ
์กฐ๊ฑด๋ถ ์ญํ ๋ฐ์ธ๋ฉ์ ์ฌ์ฉํ๋ฉด ์ด๋ฆ์ด ํน์ ๋ฌธ์์ด๋ก ์์ํ๋ Compute Engine ๊ฐ์ ๋จธ์ (VM) ์ธ์คํด์ค์ ๊ฐ์ด ๋ฆฌ์์ค ์ด๋ฆ์ด ํ๋ฆฌํฝ์ค์ ์ผ์นํ๋ ๋ฆฌ์์ค ์ฃผ ๊ตฌ์ฑ์์๊ฒ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ ์ ์์ต๋๋ค. ๋ฆฌ์์ค ์ด๋ฆ ํ๋ฆฌํฝ์ค๋ ์ผ๋ฐ์ ์ผ๋ก ํน์ ๋ชฉ์ ์ ์ํ ๋ฆฌ์์ค ๋๋ ํน์ ์์ฑ์ด ์๋ ๋ฆฌ์์ค๋ฅผ ๊ทธ๋ฃนํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ฏผ๊ฐํ ์๋ฃ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ํน์ VM ์ธ์คํด์ค์์ ์ํฌ๋ก๋๋ฅผ ์คํํ๋ค๊ณ ๊ฐ์ ํด๋ณด์ธ์. ๋ฏผ๊ฐํ์ง ์์ ๋ค๋ฅธ ์ํฌ๋ก๋๋ ๋์ผํ ํ๋ก์ ํธ์์ ์คํ๋์ด์ผ ํ๋ฉฐ ๊ฐ๋ฐ์๊ฐ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์ฌ์ฉํ๋ VM ์ธ์คํด์ค์ ์ ํ์ ์ผ๋ก ์ก์ธ์คํ๋๋ก ์ค์ ํ๋ ค๊ณ ํฉ๋๋ค. ์ด ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ VM ์ธ์คํด์ค์๋ sensitiveAccess
ํ๋ฆฌํฝ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฆ์ ์ง์ ํ๊ณ ๋ค๋ฅธ VM ์ธ์คํด์ค์๋ devAccess
ํ๋ฆฌํฝ์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฐ ํ ์กฐ๊ฑด๋ถ ์ญํ ๋ฐ์ธ๋ฉ์ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ผ๋ฐ์ ์ธ devAccess
VM ์ธ์คํด์ค๋ ๊ณ์ ์ฌ์ฉํ ์ ์์ง๋ง sensitiveAccess
VM ์ธ์คํด์ค์๋ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ์ง ์๋๋ก ํฉ๋๋ค.
resource.name
์กฐ๊ฑด ์์ฑ๋ง ์ฌ์ฉํ์ฌ ์ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ ์๋ ์์ง๋ง resource.type
์์ฑ๊ณผ resource.service
์์ฑ๋ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์
๋๋ค. ์ด๋ฌํ ์ถ๊ฐ ์์ฑ์ ์ฌ์ฉํ๋ฉด ์ ์ฌํ ์ด๋ฆ์ ๋ค๋ฅธ ๋ฆฌ์์ค ์ ํ์ ๋ํ ์ก์ธ์ค์ ์กฐ๊ฑด์ด ์ํฅ์ ๋ฏธ์น ๊ฐ๋ฅ์ฑ์ด ๋ฎ์์ง๋๋ค.
์ด ์น์
์ ์์์์๋ resource.name
์์ฑ๊ณผ resource.type
์์ฑ์ ๋ชจ๋ ์ฌ์ฉํ์ฌ ์ก์ธ์ค๋ฅผ ์ ์ดํฉ๋๋ค.
ํ๋ก์ ํธ์ Compute Engine ๋์คํฌ ๋ฐ ์ธ์คํด์ค์ ์ด๋ฆ ํ๋ฆฌํฝ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ๋ ค๋ฉด ๋ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
์ฝ์
Google Cloud ์ฝ์์์ IAM ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
์ฃผ ๊ตฌ์ฑ์ ๋ชฉ๋ก์์ ์ํ๋ ์ฃผ ๊ตฌ์ฑ์์ ์ฐพ๊ณ
๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.๊ถํ ์์ ํจ๋์์ ์กฐ๊ฑด์ ๊ตฌ์ฑํ ์ญํ ์ ์ฐพ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ IAM ์กฐ๊ฑด(์ ํ์ฌํญ)์์ IAM ์กฐ๊ฑด ์ถ๊ฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
์กฐ๊ฑด ์์ ํจ๋์์ ์กฐ๊ฑด์ ์ ๋ชฉ ๋ฐ ์ค๋ช (์ ํ์ฌํญ)์ ์ ๋ ฅํฉ๋๋ค.
์กฐ๊ฑด ์์ฑ ๋๊ตฌ ๋๋ ์กฐ๊ฑด ํธ์ง๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์กฐ๊ฑด ํํ์์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์กฐ๊ฑด ๋น๋์์๋ ํํ์์ ๋ํด ์ํ๋ ์กฐ๊ฑด ์ ํ, ์ฐ์ฐ์, ๊ธฐํ ์ ์ฉ ๊ฐ๋ฅํ ์ธ๋ถ์ ๋ณด๋ฅผ ์ ํํ ์ ์๋ ๋ํํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ์กฐ๊ฑด ํธ์ง๊ธฐ์์๋ CEL ๋ฌธ๋ฒ์ ์ฌ์ฉํ์ฌ ํํ์์ ์๋์ผ๋ก ์ ๋ ฅํ๋ ํ ์คํธ ๊ธฐ๋ฐ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
์กฐ๊ฑด ์์ฑ ๋๊ตฌ:
- ์กฐ๊ฑด ์์ฑ ๋๊ตฌ์์ ๊ธฐ์กด ์กฐ๊ฑด ํ๋๋ฅผ ์ญ์ ํฉ๋๋ค. ์กฐ๊ฑด ์์ฑ ๋๊ตฌ์์ ์ ์ผํ ํํฐ๋ ์ถ๊ฐ ๋ฒํผ์ ๋๋ค.
- ๋ฆฌ์์ค๊ฐ ์ง์ ๋ ํ๋ฆฌํฝ์ค๋ก ์์ํ๋ ๋์คํฌ์ธ ๊ฒฝ์ฐ
true
๋ก ํ๊ฐ๋๋ ๊ทธ๋ฃนํ๋ ์กฐ๊ฑด ํํ์์ ๋ง๋ญ๋๋ค.- ์ถ๊ฐ ๋๋กญ๋ค์ด ๋ฉ๋ด๋ฅผ ํด๋ฆญํ ํ ๊ทธ๋ฃนํ๋ ์กฐ๊ฑด์ ํด๋ฆญํฉ๋๋ค.
- ์กฐ๊ฑด ์ ํ ๋๋กญ๋ค์ด์์ ๋ฆฌ์์ค > ์ ํ์ ์ ํํฉ๋๋ค.
- ์ฐ์ฐ์ ๋๋กญ๋ค์ด์์ ์ผ์น๋ฅผ ์ ํํฉ๋๋ค.
- ๋ฆฌ์์ค ์ ํ ๋๋กญ๋ค์ด์์ compute.googleapis.com/Disk๋ฅผ ์ ํํฉ๋๋ค.
- ๋ฐฉ๊ธ ์ ๋ ฅํ ์กฐ๊ฑด ๋ฐ๋ก ์๋ ์ฒซ ๋ฒ์งธ ์ถ๊ฐ ๋ฒํผ์ ํด๋ฆญํ์ฌ ํํ์์ ๋ค๋ฅธ ์ ์ ์ถ๊ฐํฉ๋๋ค.
- ์กฐ๊ฑด ์ ํ ๋๋กญ๋ค์ด์์ ๋ฆฌ์์ค > ์ด๋ฆ์ ์ ํํฉ๋๋ค.
- ์ฐ์ฐ์ ๋๋กญ๋ค์ด์์ ๋ค์์ผ๋ก ์์์ ์ ํํฉ๋๋ค.
- ๊ฐ ํ๋์ ์ํ๋ ํ๋ฆฌํฝ์ค๋ฅผ ํฌํจํ์ฌ ์ ํฉํ ํ์์ผ๋ก ๋ฆฌ์์ค ์ด๋ฆ์ ์
๋ ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด
projects/PROJECT_ID/region/ZONE_ID/disks/PREFIX
๋ฅผ ์ฌ์ฉํ์ฌPROJECT_ID
ํ๋ก์ ํธ ๋ฐ ์ด๋ฆ์ดPREFIX
๋ก ์์ํ๋ZONE_ID
์์ญ์ ๋์คํฌ๋ฅผ ์๋ณํฉ๋๋ค. - ๊ฐ ์กฐ๊ฑด ์ ํ์ ์ผ์ชฝ์์ And๋ฅผ ํด๋ฆญํ์ฌ ๋ ์ ์ด ๋ชจ๋ true์ธ์ง ํ์ธํฉ๋๋ค.
- ๋ฆฌ์์ค๊ฐ ์ง์ ๋ ํ๋ฆฌํฝ์ค๋ก ์์ํ๋ ์ธ์คํด์ค์ธ ๊ฒฝ์ฐ
true
๋ก ํ๊ฐ๋๋ ๊ทธ๋ฃนํ๋ ์กฐ๊ฑด ํํ์์ ๋ง๋ญ๋๋ค.- ๊ธฐ์กด ์กฐ๊ฑด ๊ทธ๋ฃน ์ธ๋ถ์์ ์ถ๊ฐ ๋ฒํผ์ ํด๋ฆญํ ํ ๊ทธ๋ฃนํ๋ ์กฐ๊ฑด์ ํด๋ฆญํฉ๋๋ค.
- ์กฐ๊ฑด ์ ํ ๋๋กญ๋ค์ด์์ ๋ฆฌ์์ค > ์ ํ์ ์ ํํฉ๋๋ค.
- ์ฐ์ฐ์ ๋๋กญ๋ค์ด์์ ์ผ์น๋ฅผ ์ ํํฉ๋๋ค.
- ๋ฆฌ์์ค ์ ํ ๋๋กญ๋ค์ด์์ compute.googleapis.com/Instance๋ฅผ ์ ํํฉ๋๋ค.
- ๋์ผํ ์กฐ๊ฑด ๊ทธ๋ฃน์์ ์ถ๊ฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ์กฐ๊ฑด ์ ํ ๋๋กญ๋ค์ด์์ ๋ฆฌ์์ค > ์ด๋ฆ์ ์ ํํฉ๋๋ค.
- ์ฐ์ฐ์ ๋๋กญ๋ค์ด์์ ๋ค์์ผ๋ก ์์์ ์ ํํฉ๋๋ค.
- ๊ฐ ํ๋์ ์ํ๋ ํ๋ฆฌํฝ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ ํฉํ ํ์์ผ๋ก ๋ฆฌ์์ค ์ด๋ฆ์ ์
๋ ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด
projects/PROJECT_ID/zones/ZONE_ID/instances/PREFIX
๋ฅผ ์ฌ์ฉํ์ฌPROJECT_ID
ํ๋ก์ ํธ ๋ฐ ์ด๋ฆ์ดPREFIX
๋ก ์์ํ๋ZONE_ID
์์ญ์ ์ธ์คํด์ค๋ฅผ ์๋ณํฉ๋๋ค. - ๊ทธ๋ฃน์ ์กฐ๊ฑด์ ์ฐ๊ฒฐํ๋ ๋ ผ๋ฆฌ ์ฐ์ฐ์๊ฐ And๋ก ์ค์ ๋์๋์ง ํ์ธํฉ๋๋ค.
- ๋ฆฌ์์ค๊ฐ ๋์คํฌ ๋๋ ์ธ์คํด์ค๊ฐ ์๋๋ฉด
true
๋ก ํ๊ฐ๋๋ ๊ทธ๋ฃนํ๋ ์กฐ๊ฑด ํํ์์ ๋ง๋ญ๋๋ค.- ๊ธฐ์กด ์กฐ๊ฑด ๊ทธ๋ฃน ์ธ๋ถ์์ ์ถ๊ฐ ๋ฒํผ์ ํด๋ฆญํ ํ ๊ทธ๋ฃนํ๋ ์กฐ๊ฑด์ ํด๋ฆญํฉ๋๋ค.
- ์กฐ๊ฑด ์ ํ ๋๋กญ๋ค์ด์์ ๋ฆฌ์์ค > ์ ํ์ ์ ํํฉ๋๋ค.
- ์ฐ์ฐ์ ๋๋กญ๋ค์ด์์ ๋ค๋ฆ์ ์ ํํฉ๋๋ค.
- ๋ฆฌ์์ค ์ ํ ๋๋กญ๋ค์ด์์ compute.googleapis.com/Disk๋ฅผ ์ ํํฉ๋๋ค.
- ๋์ผํ ์กฐ๊ฑด ๊ทธ๋ฃน์์ ์ถ๊ฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ์กฐ๊ฑด ์ ํ ๋๋กญ๋ค์ด์์ ๋ฆฌ์์ค > ์ ํ์ ์ ํํฉ๋๋ค.
- ์ฐ์ฐ์ ๋๋กญ๋ค์ด์์ ๋ค๋ฆ์ ์ ํํฉ๋๋ค.
- ๋ฆฌ์์ค ์ ํ ๋๋กญ๋ค์ด์์ compute.googleapis.com/Instance๋ฅผ ์ ํํฉ๋๋ค.
- ๊ทธ๋ฃน์ ์กฐ๊ฑด์ ์ฐ๊ฒฐํ๋ ๋ ผ๋ฆฌ ์ฐ์ฐ์๊ฐ And๋ก ์ค์ ๋์๋์ง ํ์ธํฉ๋๋ค.
์กฐ๊ฑด ํํ์์ ๋ชจ๋ ๊ทธ๋ฃน์ ์ฐ๊ฒฐํ๋ ๋ ผ๋ฆฌ ์ฐ์ฐ์๊ฐ Or์ธ์ง ํ์ธํฉ๋๋ค.
์์ ์ด ์๋ฃ๋๋ฉด ์กฐ๊ฑด ์์ฑ ๋๊ตฌ๊ฐ ๋ค์๊ณผ ์ ์ฌํ๊ฒ ํ์๋ฉ๋๋ค.
์ ์ฅ์ ํด๋ฆญํ์ฌ ์กฐ๊ฑด์ ์ ์ฉํฉ๋๋ค.
์กฐ๊ฑด ์์ ํจ๋์ด ๋ซํ๋ฉด ๊ถํ ์์ ํจ๋์์ ์ ์ฅ์ ๋ค์ ํด๋ฆญํ์ฌ ํ์ฉ ์ ์ฑ ์ ์ ๋ฐ์ดํธํฉ๋๋ค.
์กฐ๊ฑด ํธ์ง๊ธฐ:
์กฐ๊ฑด ํธ์ง๊ธฐ ํญ์ ํด๋ฆญํ๊ณ ๋ค์ ํํ์์ ์ ๋ ฅํฉ๋๋ค.
(resource.type == "compute.googleapis.com/Disk" && resource.name.startsWith("projects/PROJECT_ID/zones/ZONE_ID/disks/PREFIX")) || (resource.type == "compute.googleapis.com/Instance" && resource.name.startsWith("projects/PROJECT_ID/zones/ZONE_ID/instances/PREFIX")) || (resource.type != "compute.googleapis.com/Disk" && resource.type != "compute.googleapis.com/Instance")
ํํ์์ ์ ๋ ฅํ ํ ์ค๋ฅธ์ชฝ ์๋จ ํ ์คํธ ์์ ์์ ์๋ ๋ฆฐํฐ ์คํ์ ํด๋ฆญํ์ฌ CEL ๋ฌธ๋ฒ์ ๋ฆฐํธํ ์๋ ์์ต๋๋ค.
์ ์ฅ์ ํด๋ฆญํ์ฌ ์กฐ๊ฑด์ ์ ์ฉํฉ๋๋ค.
์กฐ๊ฑด ์์ ํจ๋์ด ๋ซํ๋ฉด ๊ถํ ์์ ํจ๋์์ ์ ์ฅ์ ๋ค์ ํด๋ฆญํ์ฌ ํ์ฉ ์ ์ฑ ์ ์ ๋ฐ์ดํธํฉ๋๋ค.
gcloud
ํ์ฉ ์ ์ฑ ์ ์ฝ๊ธฐ-์์ -์ฐ๊ธฐ ํจํด์ ํตํด ์ค์ ๋ฉ๋๋ค.
gcloud projects get-iam-policy
๋ช
๋ น์ด๋ฅผ ์คํํ์ฌ ํ๋ก์ ํธ์ ํ์ฌ ํ์ฉ ์ ์ฑ
์ ๊ฐ์ ธ์ต๋๋ค. ๋ค์ ์์์์๋ ํ์ฉ ์ ์ฑ
์ JSON ๋ฒ์ ์ด ๋์คํฌ์ ๊ฒฝ๋ก๋ก ๋ค์ด๋ก๋๋ฉ๋๋ค.
๋ช ๋ น์ด:
gcloud projects get-iam-policy project-id --format=json > filepath
ํ์ฉ ์ ์ฑ ์ JSON ํ์์ด ๋ค์ด๋ก๋๋ฉ๋๋ค.
{
"bindings": [
{
"members": [
"user:my-user@example.com"
],
"role": "roles/owner"
},
{
"members": [
"group:my-group@example.com"
],
"role": "roles/compute.instanceAdmin"
}
],
"etag": "BwWKmjvelug=",
"version": 1
}
๋ฆฌ์์ค ์ด๋ฆ ํ๋ฆฌํฝ์ค ์กฐ๊ฑด์ผ๋ก ํ์ฉ ์ ์ฑ ์ ๊ตฌ์ฑํ๋ ค๋ฉด ๋ค์ ๊ฐ์กฐํ์๋ ์กฐ๊ฑด ํํ์์ ์ถ๊ฐํฉ๋๋ค. gcloud CLI์์ ๋ฒ์ ์ ์๋์ผ๋ก ์ ๋ฐ์ดํธํฉ๋๋ค.
{ "bindings": [ { "members": [ "user:my-user@example.com" ], "role": "roles/owner" }, { "members": [ "group:my-group@example.com" ], "role": "roles/compute.instanceAdmin", "condition": { "title": "PREFIX_only", "description": "Only gives access to VMs with the PREFIX prefix", "expression": "(resource.type == 'compute.googleapis.com/Disk' && resource.name.startsWith('projects/PROJECT_ID/zones/ZONE_ID/disks/PREFIX')) || (resource.type == 'compute.googleapis.com/Instance' && resource.name.startsWith('projects/PROJECT_ID/zones/ZONE_ID/instances/PREFIX')) || (resource.type != 'compute.googleapis.com/Instance' && resource.type != 'compute.googleapis.com/Disk')" } } ], "etag": "BwWKmjvelug=", "version": 3 }
๋ค์์ผ๋ก gcloud projects set-iam-policy
๋ช
๋ น์ด๋ฅผ ์คํํ์ฌ ์ ํ์ฉ ์ ์ฑ
์ ์ค์ ํฉ๋๋ค.
gcloud projects set-iam-policy project-id filepath
์ ์กฐ๊ฑด๋ถ ์ญํ ๋ฐ์ธ๋ฉ์ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ทธ๋ฃน์ ๊ถํ์ ๋ถ์ฌํฉ๋๋ค.
- ์ญํ ๋ฐ์ธ๋ฉ์ ๊ตฌ์ฑ์์ด ๋์คํฌ ๋ฐ ์ธ์คํด์ค ๊ถํ๋ง ์ฌ์ฉํ์ฌ ํด๋น ์ด๋ฆ์ด ์ง์ ๋ ํ๋ฆฌํฝ์ค๋ก ์์ํ๋ ๋์คํฌ ๋ฐ ์ธ์คํด์ค์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
- ์ญํ ๋ฐ์ธ๋ฉ์ ๊ตฌ์ฑ์์ด ์ธ์คํด์ค ๊ด๋ฆฌ์ ์ญํ (
roles/compute.instanceAdmin
)์ ๋ค๋ฅธ ๋ชจ๋ ๊ถํ์ ์ฌ์ฉํ์ฌ ๋์คํฌ ๋ฐ ์ธ์คํด์ค ์ธ์ ๋ชจ๋ ๋ฆฌ์์ค์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
REST
์ฝ๊ธฐ-์์ -์ฐ๊ธฐ ํจํด์ ์ฌ์ฉํ์ฌ ํน์ ๋ฆฌ์์ค์ ๋ํด ์ก์ธ์ค๋ฅผ ํ์ฉํฉ๋๋ค.
๋จผ์ ํ๋ก์ ํธ์ ํ์ฉ ์ ์ฑ ์ ์ฝ์ต๋๋ค.
Resource Manager API์ projects.getIamPolicy
๋ฉ์๋๊ฐ ํ๋ก์ ํธ์ ํ์ฉ ์ ์ฑ
์ ๊ฐ์ ธ์ต๋๋ค.
์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ค์์ ๋ฐ๊ฟ๋๋ค.
PROJECT_ID
: Google Cloud ํ๋ก์ ํธ ID์ ๋๋ค. ํ๋ก์ ํธ ID๋my-project
์ ๊ฐ์ ์์ซ์ ๋ฌธ์์ด์ ๋๋ค.POLICY_VERSION
: ๋ฐํํ ์ ์ฑ ๋ฒ์ ์ ๋๋ค. ์์ฒญ์๋ ์ ์ฑ ๋ฒ์ 3์ธ ์ต์ ์ ์ฑ ๋ฒ์ ์ด ์ง์ ๋์ด์ผ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ ์ฑ ์ ๊ฐ์ ธ์ฌ ๋ ์ ์ฑ ๋ฒ์ ์ง์ ์ ์ฐธ์กฐํ์ธ์.
HTTP ๋ฉ์๋ ๋ฐ URL:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
JSON ์์ฒญ ๋ณธ๋ฌธ:
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }
์์ฒญ์ ๋ณด๋ด๋ ค๋ฉด ๋ค์ ์ต์ ์ค ํ๋๋ฅผ ํผ์นฉ๋๋ค.
๋ค์๊ณผ ๋น์ทํ JSON ์๋ต์ด ํ์๋ฉ๋๋ค.
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/owner", "members": [ "user:my-user@example.com ] }, { "members": [ "group:my-group@example.com" ], "role": "roles/compute.instanceAdmin" } ] }
๋ค์์ผ๋ก ํน์ ๋ฆฌ์์ค์ ๋ํด ์ก์ธ์ค๋ฅผ ํ์ฉํ๋๋ก ์ ์ฑ
์ ์์ ํฉ๋๋ค. version
ํ๋๋ฅผ 3
๊ฐ์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค.
{ "version": 3, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/owner", "members": [ "user:my-user@example.com" ] }, { "role": "roles/compute.instanceAdmin", "members": [ "group:my-group@example.com" ], "condition": { "title": "PREFIX_only", "description": "Only gives access to VMs with the PREFIX prefix", "expression": "(resource.type == 'compute.googleapis.com/Disk' && resource.name.startsWith('projects/PROJECT_ID/zones/ZONE_ID/disks/PREFIX')) || (resource.type == 'compute.googleapis.com/Instance' && resource.name.startsWith('projects/PROJECT_ID/zones/ZONE_ID/instances/PREFIX')) || (resource.type != 'compute.googleapis.com/Instance' && resource.type != 'compute.googleapis.com/Disk')" } } ] }
๋ง์ง๋ง์ผ๋ก ์ ๋ฐ์ดํธ๋ ํ์ฉ ์ ์ฑ ์ ์์ฑํฉ๋๋ค.
Resource Manager API์ projects.setIamPolicy
๋ฉ์๋๋ ์์ฒญ์ ํ์ฉ ์ ์ฑ
์ ํ๋ก์ ํธ์ ์ ํ์ฉ ์ ์ฑ
์ผ๋ก ์ค์ ํฉ๋๋ค.
์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ค์์ ๋ฐ๊ฟ๋๋ค.
PROJECT_ID
: Google Cloud ํ๋ก์ ํธ ID์ ๋๋ค. ํ๋ก์ ํธ ID๋my-project
์ ๊ฐ์ ์์ซ์ ๋ฌธ์์ด์ ๋๋ค.
HTTP ๋ฉ์๋ ๋ฐ URL:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
JSON ์์ฒญ ๋ณธ๋ฌธ:
{ "policy": { "version": 3, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/owner", "members": [ "user:my-user@example.com" ] }, { "role": "roles/compute.instanceAdmin", "members": [ "group:my-group@example.com" ], "condition": { "title": "Dev_access_only", "description": "Only access to devAccess* VMs", "expression": "(resource.type == 'compute.googleapis.com/Disk' && resource.name.startsWith('projects/PROJECT_ID/zones/ZONE_ID/disks/PREFIX')) || (resource.type == 'compute.googleapis.com/Instance' && resource.name.startsWith('projects/PROJECT_ID/zones/ZONE_ID/instances/PREFIX')) || (resource.type != 'compute.googleapis.com/Instance' && resource.type != 'compute.googleapis.com/Disk')" } } ] } }
์์ฒญ์ ๋ณด๋ด๋ ค๋ฉด ๋ค์ ์ต์ ์ค ํ๋๋ฅผ ํผ์นฉ๋๋ค.
์๋ต์๋ ์ ๋ฐ์ดํธ๋ ํ์ฉ ์ ์ฑ ์ด ํฌํจ๋ฉ๋๋ค.
๋ฆฌ์์ค ์ด๋ฆ์์ ๊ฐ ์ถ์ถ
์ด์ ์์๋ ๋ฆฌ์์ค ์ด๋ฆ ๋๋ ๋ฆฌ์์ค ์ด๋ฆ์ ์์๊ณผ ๋ค๋ฅธ ๊ฐ ๊ฐ์ ๋ถ์ธ ๋น๊ต๋ฅผ ๋ณด์ฌ์ค๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ์ ๋ฆฌ์์ค ์ด๋ฆ์ ์์ ๋ถ๋ถ์ด ์๋ ํน์ ๋ถ๋ถ๊ณผ ๋น๊ตํด์ผ ํ๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
extract()
ํจ์๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ถ ํ
ํ๋ฆฟ์ ์ง์ ํ์ฌ ๋ฆฌ์์ค ์ด๋ฆ์ ๊ด๋ จ ๋ถ๋ถ์ ๋ฌธ์์ด๋ก ์ถ์ถํ ์ ์์ต๋๋ค. ํ์ํ๋ค๋ฉด ์ถ์ถ๋ ๋ฌธ์์ด์ ํ์์คํฌํ์ ๊ฐ์ ๋ค๋ฅธ ์ ํ์ผ๋ก ๋ณํํ ์ ์์ต๋๋ค. ๋ฆฌ์์ค ์ด๋ฆ์์ ๊ฐ์ ์ถ์ถํ ๋ค์ ํด๋น ๊ฐ์ ๋ค๋ฅธ ๊ฐ๊ณผ ๋น๊ตํ ์ ์์ต๋๋ค.
๋ค์ ์์์์๋ extract()
ํจ์๋ฅผ ์ฌ์ฉํ๋ ์กฐ๊ฑด ํํ์์ ๋ณด์ฌ์ค๋๋ค. extract()
ํจ์์ ๋ํ ์์ธํ ๋ด์ฉ์ IAM ์กฐ๊ฑด ์์ฑ ์ฐธ์กฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
์์: ์ง๋ 30์ผ ๋์์ ์ฃผ๋ฌธ ์ผ์น
์ฃผ๋ฌธ ์ ๋ณด๋ฅผ ์ฌ๋ฌ Cloud Storage ๋ฒํท์ ์ ์ฅํ๊ณ ๊ฐ ๋ฒํท์ ๊ฐ์ฒด๋ฅผ ๋ ์ง๋ณ๋ก ์ ๋ฆฌํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ๊ฐ์ฒด ์ด๋ฆ์ ๋ค์ ์์์ ๋น์ทํ ์ ์์ต๋๋ค.
projects/_/buckets/acme-orders-aaa/objects/data_lake/orders/order_date=2019-11-03/aef87g87ae0876
์ฃผ ๊ตฌ์ฑ์์ด ์ง๋ 30์ผ ๋์์ ๋ชจ๋ ์ฃผ๋ฌธ์ ์ก์ธ์คํ ์ ์๊ฒ ํ๋ ค๊ณ ํฉ๋๋ค. ๋ค์ ์กฐ๊ฑด์ ์ด๋ฌํ ์ฃผ๋ฌธ์ Cloud Storage ๊ฐ์ฒด์ ์ผ์นํฉ๋๋ค. duration()
๋ฐ date()
ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญ ์๊ฐ์์ 30์ผ(2,592,000์ด)์ ๋บ ํ ํ์์คํฌํ๋ฅผ ์ฃผ๋ฌธ ๋ ์ง์ ๋น๊ตํฉ๋๋ค.
resource.type == 'storage.googleapis.com/Object' &&
request.time - duration('2592000s') < date(resource.name.extract('/order_date={date_str}/'))
date()
๋ฐ duration()
ํจ์์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ ์ง/์๊ฐ ์์ฑ ์ฐธ์กฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
์์: ๋ชจ๋ ์์น์์ Compute Engine VM ์ผ์น
VM ์์น์ ๊ด๊ณ์์ด ์ด๋ฆ์ด dev-
๋ก ์์ํ๋ ๋ชจ๋ Compute Engine VM์ ์ฃผ ๊ตฌ์ฑ์์๊ฒ ํ๋ก์ ํธ ์์ค ์ญํ ์ ๋ถ์ฌํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๋ํ ์ฃผ ๊ตฌ์ฑ์์ด ๋ค๋ฅธ ๋ชจ๋ ๋ฆฌ์์ค ์ ํ์์ ํด๋น ์ญํ ์ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ ค๊ณ ํฉ๋๋ค.
VM์ ๋ฆฌ์์ค ์ด๋ฆ์์๋ projects/PROJECT_ID/zones/ZONE_ID/instances/INSTANCE_ID
๊ณผ ์ ์ฌํ ํ์์ ์ฌ์ฉํฉ๋๋ค.
๋ค์ ์กฐ๊ฑด์ dev-
๋ฌธ์์ด๋ก ์์ํ๋ ์ธ์คํด์ค ์ด๋ฆ๊ณผ VM ์ด์ธ์ ๋ชจ๋ ๋ฆฌ์์ค ์ ํ์ ์ฌ์ฉํ์ฌ VM์ true
๋ฅผ ํ๊ฐํฉ๋๋ค.
resource.type != 'compute.googleapis.com/Instance' ||
resource.name.extract('/instances/{name}').startsWith('dev-')
์ค๊ดํธ ์์ ํ
์คํธ๋ ๋น๊ต๋ฅผ ์ํด ์ถ์ถ๋๋ ๋ฆฌ์์ค ์ด๋ฆ์ ์ผ๋ถ๋ฅผ ์๋ณํฉ๋๋ค. ์ด ์์์์ ์ถ์ถ ํ
ํ๋ฆฟ์ ๋ฌธ์์ด /instances/
์ ์ฒซ ๋ฒ์งธ ์ผ์นํ๋ ํญ๋ชฉ ๋ค์์ ๋ชจ๋ ๋ฌธ์๋ฅผ ์ถ์ถํฉ๋๋ค.
๋ฆฌ์์ค ๊ธฐ๋ฐ ์กฐ๊ฑด์ ์ค์ํ ์ฌ์ฉ ๊ณ ๋ ค์ฌํญ
๋ฆฌ์์ค ๊ธฐ๋ฐ ์กฐ๊ฑด์ ์ถ๊ฐํ ๋๋ ์กฐ๊ฑด์ด ์ฃผ ๊ตฌ์ฑ์์ ๊ถํ์ ์ด๋ค ์ํฅ์ ๋ฏธ์น๋์ง ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
์ปค์คํ ์ญํ
์ปค์คํ
์ญํ ์ด ํฌํจ๋ ๋ค์ ์์๋ฅผ ์ฐธ์กฐํฉ๋๋ค. ๊ด๋ฆฌ์๊ฐ VM ์ธ์คํด์ค ์์ฑ์ ์ํ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ์ง๋ง ์ด๋ฆ ํ๋ฆฌํฝ์ค๊ฐ ๊ฐ์ ๋์คํฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค ์ด๋ฆ์ด ์ด๋ฆ ํ๋ฆฌํฝ์ค staging
์ผ๋ก ์์ํ๋ ํ๋ก์ ํธ์์๋ง ์ฌ์ฉ์๊ฐ VM ์ธ์คํด์ค๋ฅผ ๋ง๋ค ์ ์๋ ์ปค์คํ
์ญํ ์ ๋ง๋ค๋ ค๊ณ ํฉ๋๋ค.
์ด ์์ ์ ์ํํ๋ ค๋ฉด ๋ถ์ฌ๋ ์ญํ ์ ๋์คํฌ ๋ฐ ์ธ์คํด์ค ๋ฆฌ์์ค ์ ํ์ ๋ํ ๊ถํ์ ์๋ฏธํ๋ VM ์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํ ํ์ ๊ถํ์ด ํฌํจ๋๋์ง ํ์ธํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์กฐ๊ฑด ํํ์์์ ๋ฆฌ์์ค ์ด๋ฆ์ ๋์คํฌ์ ์ธ์คํด์ค๊ฐ ๋ชจ๋ ์๋์ง ํ์ธํฉ๋๋ค. ์ด ๋ ์ ํ์ด ์๋๋ผ๋ฉด ์ญํ ์ ๋ค๋ฅธ ๊ถํ์ด ๋ถ์ฌ๋์ง ์์ต๋๋ค.
๋ค์ ์กฐ๊ฑด ํํ์์ ์๊ธฐ์น ์์ ๋์์ ์ด๋ํฉ๋๋ค. Compute Engine VM์์ ์๋ํ๋ ๊ถํ์ด ์ฐจ๋จ๋ฉ๋๋ค.
resource.type == 'compute.googleapis.com/Disk' && resource.name.startsWith('projects/PROJECT_ID/zones/ZONE_ID/disks/staging')
๋ค์ ์กฐ๊ฑด ํํ์์ ๋์คํฌ์ ์ธ์คํด์ค๋ฅผ ๋ชจ๋ ํฌํจํ๋ฉฐ ๋ ์ ํ์ ๋ฆฌ์์ค ์ด๋ฆ์ ๊ธฐ๋ฐ์ผ๋ก ์ก์ธ์ค๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
(resource.type == 'compute.googleapis.com/Disk' && resource.name.startsWith('projects/PROJECT_ID/zones/ZONE_ID/disks/staging')) || (resource.type == 'compute.googleapis.com/Instance' && resource.name.startsWith('projects/PROJECT_ID/zones/ZONE_ID/instances/staging'))
๋ค์ ์กฐ๊ฑด ํํ์์ ๋์คํฌ์ ์ธ์คํด์ค๋ฅผ ๋ชจ๋ ํฌํจํ๋ฉฐ ๋ ์ ํ์ ๋ฆฌ์์ค ์ด๋ฆ์ ๊ธฐ๋ฐ์ผ๋ก ์ก์ธ์ค๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ๋ค๋ฅธ ๋ฆฌ์์ค ์ ํ์ ๊ฒฝ์ฐ ์กฐ๊ฑด ํํ์์ ๋ฆฌ์์ค ์ด๋ฆ์ ๊ด๊ณ์์ด ์ญํ ์ ๋ถ์ฌํฉ๋๋ค.
(resource.type == 'compute.googleapis.com/Disk' && resource.name.startsWith('projects/PROJECT_ID/zones/ZONE_ID/disks/staging')) || (resource.type == 'compute.googleapis.com/Instance' && resource.name.startsWith('projects/PROJECT_ID/zones/ZONE_ID/instances/staging')) || (resource.type != 'compute.googleapis.com/Disk' && resource.type != 'compute.googleapis.com/Instance')
์์ ์์ ์ ์ฉ ๊ถํ
Google Cloud์ ๋ฆฌ์์ค ๊ณ์ธต ๊ตฌ์กฐ์์ ํ์ ๋ฆฌ์์ค์ ์ํฅ์ ๋ฏธ์น๋ ์ญํ ์ ์ผ๋ถ ๊ถํ์ ์์ ์์ค์์๋ง ์ ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ํ ์กฐ์ง์ ํ๋ก์ ํธ๋ฅผ ๋์ดํ๋ ค๋ฉด ์ฌ์ฉ์์๊ฒ ํ๋ก์ ํธ ์์ฒด๊ฐ ์๋๋ผ ๋์ดํ๋ ค๋ ํ๋ก์ ํธ๊ฐ ํฌํจ๋ ์กฐ์ง์ ๋ํ resourcemanager.projects.list
๊ถํ์ ๋ถ์ฌํด์ผ ํฉ๋๋ค. ์ด๋ฌํ ์ข
๋ฅ์ ๊ถํ์ ์์ ์์ ์ ์ฉ ๊ถํ์ด๋ผ ํ๋ฉฐ list
์์
์๋ง ์ ์ฉ๋ฉ๋๋ค.
์กฐ๊ฑด์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ *.*.list
๊ถํ์ ๋ํ ์ก์ธ์ค ๊ถํ์ ์ฌ๋ฐ๋ฅด๊ฒ ๋ถ์ฌํ๋ ค๋ฉด ์กฐ๊ฑด ํํ์์ ๋์ดํ ๋์ ๋ฆฌ์์ค์ ์์ ๋ฆฌ์์ค ์ ํ์ ๋ฐ๋ผ resource.service
๋ฐ resource.type
์์ฑ์ ์ค์ ํด์ผ ํฉ๋๋ค.
๋ค์ ์์๋ฅผ ๊ณ ๋ คํ์ธ์. ์ด์ ์น์
์ Compute Engine ์์๋ฅผ ์ฌ์ฉํ๋ฉด, ๋ค์ ํํ์์ ๊ถํ์ ๊ฒ์ฌํ๋ ๋ฆฌ์์ค์ resource.type
์์ฑ ๊ฐ์ด cloudresourcemanager.googleapis.com/Project
์ด๊ธฐ ๋๋ฌธ์ compute.disks.list
๋ฐ compute.instances.list
๊ถํ์ ์ก์ธ์คํ์ง ๋ชปํ๊ฒ ํฉ๋๋ค.
(resource.type == 'compute.googleapis.com/Disk' && resource.name.startsWith('projects/PROJECT_ID/zones/ZONE_ID/disks/PREFIX')) || (resource.type == 'compute.googleapis.com/Instance' && resource.name.startsWith('projects/PROJECT_ID/zones/ZONE_ID/instances/PREFIX'))
์ผ๋ฐ์ ์ผ๋ก ์ด list
๊ถํ์ ๋ฆฌ์์ค์ ๋ํ ์ผ๋ฐ ์์
์ ๋ค๋ฅธ ๊ถํ๊ณผ ํจ๊ป ๋ถ์ฌ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ ๋ถ์ฌ ๋ฒ์๋ฅผ ๋๋ฆฌ๋ ค๋ฉด cloudresourcemanager.googleapis.com/Project
์ ํ์ ๋ฒ์๋ง ํ์ฅํ๊ฑฐ๋ ์ธ์คํด์ค ๋๋ ๋์คํฌ ์ ํ์ด ์๋ ๋ค๋ฅธ ๋ชจ๋ ๊ถํ์ผ๋ก ๋ฒ์๋ฅผ ํ์ฅํ ์ ์์ต๋๋ค.
(resource.type == 'compute.googleapis.com/Disk' && resource.name.startsWith('projects/PROJECT_ID/zones/ZONE_ID/disks/PREFIX')) || (resource.type == 'compute.googleapis.com/Instance' && resource.name.startsWith('projects/PROJECT_ID/zones/ZONE_ID/instances/PREFIX')) || resource.type == 'cloudresourcemanager.googleapis.com/Project'
๋๋
(resource.type == 'compute.googleapis.com/Disk' && resource.name.startsWith('projects/PROJECT_ID/zones/ZONE_ID/disks/PREFIX')) || (resource.type == 'compute.googleapis.com/Instance' && resource.name.startsWith('projects/PROJECT_ID/zones/ZONE_ID/instances/PREFIX')) || (resource.type != 'compute.googleapis.com/Disk' && resource.type != 'compute.googleapis.com/Instance')