IAM ์กฐ๊ฑด์ผ๋ก ์ก์ธ์ค ์ ์ด
์ด ๋ฌธ์์์๋ IAM ์กฐ๊ฑด์ ์ฌ์ฉํ์ฌ BigQuery ๋ฆฌ์์ค์ ๋ํ ์ก์ธ์ค๋ฅผ ์ ์ดํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
IAM ์กฐ๊ฑด์ ์ฌ์ฉํ๋ฉด ์ง์ ๋ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋๋ ๊ฒฝ์ฐ์๋ง BigQuery ๋ฆฌ์์ค์ ๋ํ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ ํ๋ ๊ธฐ๊ฐ ๋์ ๋๋ ํน์ ์๊ฐ์ ์ ๊ธฐ์ ์ผ๋ก ๋ฆฌ์์ค์ ๋ํ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ ์ ์์ต๋๋ค. ๋ฆฌ์์ค์ ์กฐ์ง, ํด๋, ํ๋ก์ ํธ, ๋ฐ์ดํฐ ์ธํธ ์์ค์์ IAM ์กฐ๊ฑด์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์กฐ๊ฑด์ด ์๋ ํ์ฉ ์ ์ฑ ์ ํ์ ๋ฆฌ์์ค์ ์์๋ฉ๋๋ค. ๋ฆฌ์์ค ์์ค์ ๊ดํ ์์ธํ ๋ด์ฉ์ ๋ฆฌ์์ค ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ฐธ๊ณ ํ์ธ์.
IAM ์กฐ๊ฑด์ ์์ง ์กด์ฌํ์ง ์๋ ๋ฆฌ์์ค๋ฅผ ํฌํจํ์ฌ ์ฌ๋ฌ ๊ด๋ จ ๋ฆฌ์์ค์ ๋์์ Identity and Access Management(IAM) ๊ถํ์ ๋ถ์ฌํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค. ๊ด๋ จ ์๋ BigQuery ๋ฆฌ์์ค ๊ทธ๋ฃน์ ๊ถํ์ ๋ถ์ฌํ๋ ค๋ฉด IAM ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์์ํ๊ธฐ ์ ์
- ์ด ๋ฌธ์์ ๊ฐ ํ์คํฌ๋ฅผ ์ํํ๋ ๋ฐ ํ์ํ ๊ถํ์ด ํฌํจ๋ ์ฌ์ฉ์์๊ฒ IAM ์ญํ ์ ๋ถ์ฌํฉ๋๋ค.
- IAM API๋ฅผ ์ฌ์ฉ ์ค์ ํฉ๋๋ค.
ํ์ํ ์ญํ
BigQuery ๋ฆฌ์์ค์ IAM ์กฐ๊ฑด์ ์ ์ฉํ๋ ๋ฐ ํ์ํ ๊ถํ์ ์ป์ผ๋ ค๋ฉด ๊ด๋ฆฌ์์๊ฒ ๋ค์ IAM ์ญํ ์ ๋ถ์ฌํด ๋ฌ๋ผ๊ณ ์์ฒญํ์ธ์.
-
ํ๋ก์ ํธ์ ๊ฒฝ์ฐ:
ํ๋ก์ ํธ IAM ๊ด๋ฆฌ์ (
roles/resourcemanager.projectIamAdmin
) -
๋ฐ์ดํฐ ์ธํธ์ ๊ฒฝ์ฐ:
BigQuery ๋ฐ์ดํฐ ์์ ์(
roles/bigquery.dataOwner
)
์ญํ ๋ถ์ฌ์ ๋ํ ์์ธํ ๋ด์ฉ์ ํ๋ก์ ํธ, ํด๋, ์กฐ์ง์ ๋ํ ์ก์ธ์ค ๊ด๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ธ์.
์ด๋ฌํ ์ฌ์ ์ ์๋ ์ญํ ์๋ BigQuery ๋ฆฌ์์ค์ IAM ์กฐ๊ฑด์ ์ ์ฉํ๋ ๋ฐ ํ์ํ ๊ถํ์ด ํฌํจ๋์ด ์์ต๋๋ค. ํ์ํ ์ ํํ ๊ถํ์ ๋ณด๋ ค๋ฉด ํ์ ๊ถํ ์น์ ์ ํผ์น์ธ์.
ํ์ ๊ถํ
BigQuery ๋ฆฌ์์ค์ IAM ์กฐ๊ฑด์ ์ ์ฉํ๋ ค๋ฉด ๋ค์ ๊ถํ์ด ํ์ํฉ๋๋ค.
-
ํ๋ก์ ํธ ์์ค์์ ์กฐ๊ฑด๋ถ IAM ์ก์ธ์ค ์ค์ :
resourcemanager.projects.setIamPolicy
-
๋ฐ์ดํฐ ์ธํธ์ ์กฐ๊ฑด๋ถ IAM ์ก์ธ์ค ๊ถํ ์ค์ :
-
bigquery.datasets.setIamPolicy
-
bigquery.datasets.update
-
์ปค์คํ ์ญํ ์ด๋ ๋ค๋ฅธ ์ฌ์ ์ ์๋ ์ญํ ์ ์ฌ์ฉํ์ฌ ์ด ๊ถํ์ ๋ถ์ฌ๋ฐ์ ์๋ ์์ต๋๋ค.
์กฐ์ง ์ ์ฒด์ IAM ์กฐ๊ฑด์ ์ฌ์ฉํ๋ ค๋ฉด ์กฐ์ง ์ ์ฑ ์ ๊ด๋ฆฌํ ์ ์๋ ๊ถํ๋ ํ์ํฉ๋๋ค.BigQuery์์ IAM ์ญํ ๋ฐ ๊ถํ์ ๋ํ ์์ธํ ๋ด์ฉ์ IAM ์๊ฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
IAM API ์ฌ์ฉ ์ค์
IAM API๋ฅผ ์ฌ์ฉ ์ค์ ํ๋ ค๋ฉด ๋ค์ ์ต์ ์ค ํ๋๋ฅผ ์ ํํฉ๋๋ค.
์ฝ์
Identity and Access Management(IAM) API ํ์ด์ง๋ก ์ด๋ํ์ฌ API๋ฅผ ์ฌ์ฉ ์ค์ ํฉ๋๋ค.
gcloud
gcloud services enable
๋ช
๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
gcloud services enable iam.googleapis.com
๋ฐ์ดํฐ ์ธํธ์ ์กฐ๊ฑด๋ถ ์ก์ธ์ค ์ ์ฑ ๋ณด๊ธฐ
๋ค์ ์ต์ ์ค ํ๋๋ฅผ ์ ํํฉ๋๋ค.
์ฝ์
BigQuery ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
ํ์๊ธฐ ์ฐฝ์์ ํ๋ก์ ํธ๋ฅผ ํ์ฅํ๊ณ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ ํํฉ๋๋ค.
> ๊ถํ์ ํด๋ฆญํฉ๋๋ค.
๊ณต์์ฐ๊ฒฐ๋ ์ญํ ์์ ์๋ ์กฐ๊ฑด:
TITLE
์ ํด๋ฆญํ์ฌ ํด๋น ์ญํ ์ ์กฐ๊ฑด์ ํ์ธํฉ๋๋ค.
bq
Cloud Shell์์ ์กฐ๊ฑด๋ถ ์ก์ธ์ค ์ ์ฑ ์ ๋ณด๊ฑฐ๋ ์ ๋ฐ์ดํธํ๋ ค๋ฉด Cloud Shell ๋ฒ์ 503.0.0 ์ด์์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๊ธฐ์กด ์ก์ธ์ค ์ ์ฑ
์ ๊ฐ์ ธ์์ JSON์ ๋ก์ปฌ ํ์ผ๋ก ์ถ๋ ฅํ๋ ค๋ฉด Cloud Shell์์ bq show
๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
bq show --format=prettyjson PROJECT_ID:DATASET > PATH_TO_FILE
๋ค์์ ๋ฐ๊ฟ๋๋ค.
- PROJECT_ID: ํ๋ก์ ํธ ID
- DATASET: ๋ฐ์ดํฐ ์ธํธ์ ์ด๋ฆ
- PATH_TO_FILE: ๋ก์ปฌ ๋จธ์ ์ JSON ํ์ผ ๊ฒฝ๋ก
๋ฐ์ดํฐ ์ธํธ ๋ฆฌ์์ค JSON ํ์ผ์ access
์์ฑ์๋ ์ก์ธ์ค ์ ์ฑ
์ด ํฌํจ๋ฉ๋๋ค.
API
์กฐ๊ฑด์ด ์๋ ๋ฐ์ดํฐ ์ธํธ์ ์ก์ธ์ค ์ ์ฑ
์ ๋ณด๋ ค๋ฉด accessPolicyVersion=3
๋ฅผ ์์ฒญ ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉํ์ฌ datasets.get
์ ํธ์ถํ์ธ์.
๋ฐ์ดํฐ ์ธํธ ๋ฆฌ์์ค์ access
์์ฑ์๋ ์ก์ธ์ค ์ ์ฑ
์ด ํฌํจ๋์ด ์์ต๋๋ค.
๋ฆฌ์์ค์ ์กฐ๊ฑด๋ถ ์ก์ธ์ค ์์
๋ค์ ์น์ ์์๋ ์ฌ๋ฌ ๋ฆฌ์์ค์ ๋ํ ์กฐ๊ฑด๋ถ ์ก์ธ์ค๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
์กฐ์ง, ํด๋ ๋๋ ํ๋ก์ ํธ์ ์กฐ๊ฑด ์ถ๊ฐ
BigQuery์ ์กฐ์ง, ํด๋ ๋๋ ํ๋ก์ ํธ์ ์กฐ๊ฑด๋ถ ์ก์ธ์ค๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ์กฐ๊ฑด์ด ์๋ ์ ์ฑ ํ์ฉ์ ์ฐธ๊ณ ํ์ธ์. ์กฐ๊ฑด์ ๋น๋ํ ๋๋ ์์ฑ ํ์ ํ๋ฅผ ์ฐธ๊ณ ํ์ธ์.
๋ฐ์ดํฐ ์ธํธ์ ์กฐ๊ฑด๋ถ ์ก์ธ์ค ์ถ๊ฐ
๋ฐ์ดํฐ ์ธํธ์ ์กฐ๊ฑด์ ์ถ๊ฐํ๋ ค๋ฉด ๋ค์ ๋ฐฉ๋ฒ ์ค ํ๋๋ฅผ ์ ํํฉ๋๋ค. ์กฐ๊ฑด์ ๋น๋ํ ๋๋ ์์ฑ ํ์ ํ๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฝ์
BigQuery ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
ํ์๊ธฐ ์ฐฝ์์ ํ๋ก์ ํธ๋ฅผ ํ์ฅํ๊ณ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ ํํฉ๋๋ค.
์ธ๋ถ์ ๋ณด ํจ๋์์ > ๊ถํ์ ํด๋ฆญํฉ๋๋ค.
๊ณต์์ฃผ ๊ตฌ์ฑ์ ์ถ๊ฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
์ ์ฃผ ๊ตฌ์ฑ์ ํ๋์ ์ฃผ ๊ตฌ์ฑ์์ ์ ๋ ฅํฉ๋๋ค.
์ญํ ์ ํ ๋ชฉ๋ก์์ ์ฌ์ ์ ์๋ ์ญํ ๋๋ ์ปค์คํ ์ญํ ์ ์ ํํฉ๋๋ค.
IAM ์กฐ๊ฑด ์ถ๊ฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
์กฐ๊ฑด ์์ฑ์ ์ฌ์ฉํ์ฌ
condition
ํ๋์ ์กฐ๊ฑด์ ์ถ๊ฐํฉ๋๋ค.IAM ์กฐ๊ฑด ์ถ๊ฐ ํจ๋์์ ์ ์ฅ์ ํด๋ฆญํฉ๋๋ค.
DATASET
์ ์ก์ธ์ค ๊ถํ ๋ถ์ฌ ํจ๋์์ ์ ์ฅ์ ํด๋ฆญํฉ๋๋ค.
bq
Cloud Shell์์ ์กฐ๊ฑด๋ถ ์ก์ธ์ค ์ ์ฑ ์ ๋ณด๊ฑฐ๋ ์ ๋ฐ์ดํธํ๋ ค๋ฉด Cloud Shell ๋ฒ์ 503.0.0 ์ด์์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
Cloud Shell์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ธํธ์ ์กฐ๊ฑด๋ถ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ๋ ค๋ฉด ๋ฐ์ดํฐ ์ธํธ์ ๋ํ ์ก์ธ์ค ๊ถํ ๋ถ์ฌ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
๋ฐ์ดํฐ ์ธํธ JSON ํ์ผ์ access
์น์
์ ์กฐ๊ฑด๋ถ ์ก์ธ์ค ์กฐ๊ฑด์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋ฐ์ดํฐ ์ธํธ JSON ํ์ผ์ access
์น์
์ ๋ค์์ ์ถ๊ฐํ๋ฉด 2032๋
12์ 31์ผ๊น์ง cloudysanfrancisco@gmail.com
์ roles/bigquery.dataViewer
์ญํ ์ด ๋ถ์ฌ๋ฉ๋๋ค.
"access": [ { "role": "roles/bigquery.dataViewer", "userByEmail": "cloudysanfrancisco@gmail.com", "condition": { "title": "Grant roles/bigquery.dataViewer until 2033", "description": "Role expires on December 31, 2032.", "expression": "request.time < timestamp('2032-12-31T12:00:00Z')" } } ]
API
BigQuery API๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ธํธ์ ์กฐ๊ฑด๋ถ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ๋ ค๋ฉด ์์ฒญ ๋งค๊ฐ๋ณ์์ accessPolicyVersion=3
์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ธํธ์ ๋ํ ์ก์ธ์ค ๊ถํ ๋ถ์ฌ์ ๊ดํ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
๋ฐ์ดํฐ ์ธํธ ๋ฆฌ์์ค์ access.condition
์์ฑ์ ์ก์ธ์ค ์กฐ๊ฑด์ด ์๋ ํญ๋ชฉ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์กฐ๊ฑด๋ถ ์ก์ธ์ค ์ ์ฑ
์ด ์๋ ๋ฐ์ดํฐ ์ธํธ์ ๊ฒฝ์ฐ ์ฌ์ฉ์๋ accessPolicyVersion
์์ฒญ ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํ์ง ์๊ณ ํ์ค ์ฝ๊ธฐ, ์์ , ์
๋ฐ์ดํธ ํ๋ฆ์ ์ฌ์ฉํ์ฌ ๋ฌด์กฐ๊ฑด ์ก์ธ์ค ์ค์ ์ ์
๋ฐ์ดํธํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ ์ธํธ์์ ์กฐ๊ฑด๋ถ ์ก์ธ์ค ์ญ์ ํ๊ธฐ
๋ฐ์ดํฐ ์ธํธ์์ ์กฐ๊ฑด์ ์ญ์ ํ๋ ค๋ฉด ๋ค์ ๋ฐฉ๋ฒ ์ค ํ๋๋ฅผ ์ ํํฉ๋๋ค. ์กฐ๊ฑด์ ๋น๋ํ ๋๋ ์์ฑ ํ์ ํ๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฝ์
BigQuery ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
ํ์๊ธฐ ์ฐฝ์์ ํ๋ก์ ํธ๋ฅผ ํ์ฅํ๊ณ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ ํํฉ๋๋ค.
์ธ๋ถ์ ๋ณด ํจ๋์์ > ๊ถํ์ ํด๋ฆญํฉ๋๋ค.
๊ณต์์ก์ธ์ค ๊ถํ์ ์ทจ์ํ๋ ค๋ ์ฃผ ๊ตฌ์ฑ์์ ์ ํํฉ๋๋ค.
์ญ์ ๋ฅผ ํด๋ฆญํฉ๋๋ค.
์ฃผ ๊ตฌ์ฑ์ ์ญ์ ? ๋ํ์์์์ ์ญ์ ๋ฅผ ํด๋ฆญํฉ๋๋ค.
bq
Cloud Shell์์ ์กฐ๊ฑด๋ถ ์ก์ธ์ค ์ ์ฑ ์ ๋ณด๊ฑฐ๋ ์ ๋ฐ์ดํธํ๋ ค๋ฉด Cloud Shell ๋ฒ์ 503.0.0 ์ด์์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
Cloud Shell์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ธํธ์ ๋ํ ์กฐ๊ฑด๋ถ ์ก์ธ์ค ๊ถํ์ ์ญ์ ํ๋ ค๋ฉด ๋ฐ์ดํฐ ์ธํธ์ ๋ํ ์ก์ธ์ค ๊ถํ ์ทจ์์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
๋ฐ์ดํฐ ์ธํธ JSON ํ์ผ์ access
์น์
์์ ์กฐ๊ฑด์ด ์๋ ํญ๋ชฉ์ ์ญ์ ํ ์ ์์ต๋๋ค.
API
BigQuery API๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ธํธ์ ๋ํ ์กฐ๊ฑด๋ถ ์ก์ธ์ค ๊ถํ์ ์ทจ์ํ๋ ค๋ฉด ์์ฒญ ๋งค๊ฐ๋ณ์์ accessPolicyVersion=3
์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ธํธ์ ๋ํ ์ก์ธ์ค ๊ถํ ์ทจ์์ ๊ดํ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
๋ฐ์ดํฐ ์ธํธ ๋ฆฌ์์ค์ access
์์ฑ์์ ์กฐ๊ฑด์ด ์๋ ํญ๋ชฉ์ ์ญ์ ํ ์ ์์ต๋๋ค.
์กฐ๊ฑด๋ถ ์ก์ธ์ค ์ ์ฑ
์ด ์๋ ๋ฐ์ดํฐ ์ธํธ์ ๊ฒฝ์ฐ ์ฌ์ฉ์๋ accessPolicyVersion
์์ฒญ ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํ์ง ์๊ณ ํ์ค ์ฝ๊ธฐ, ์์ , ์
๋ฐ์ดํธ ํ๋ฆ์ ์ฌ์ฉํ์ฌ ๋ฌด์กฐ๊ฑด ์ก์ธ์ค ์ค์ ์ ์
๋ฐ์ดํธํ ์ ์์ต๋๋ค.
์กฐ๊ฑด ์์ฑ
๋ค์ ์์ฑ์ ๊ธฐ๋ฐ์ผ๋ก BigQuery ๋ฆฌ์์ค์ IAM ์กฐ๊ฑด์ ์ค์ ํ ์ ์์ต๋๋ค.
request.time
: ์ฌ์ฉ์๊ฐ BigQuery ๋ฆฌ์์ค์ ์ก์ธ์คํ๋ ค๊ณ ์๋ํ ์๊ฐ์ ๋๋ค. ์์ธํ ๋ด์ฉ๊ณผ ์์๋ ๋ ์ง/์๊ฐ ์์ฑ์ ์ฐธ์กฐํ์ธ์.resource.name
: BigQuery ๋ฆฌ์์ค์ ๊ฒฝ๋ก์ ๋๋ค. ํ์์ ์์ฑ ํ์์ ํ๋ฅผ ์ฐธ์กฐํ์ธ์.resource.type
: BigQuery ๋ฆฌ์์ค์ ์ ํ์ ๋๋ค. ํ์์ ์์ฑ ํ์์ ํ๋ฅผ ์ฐธ์กฐํ์ธ์.resource.service
: BigQuery ๋ฆฌ์์ค๊ฐ ์ฌ์ฉํ๋ ์๋น์ค์ ๋๋ค. Google Cloud ํ์์ ์์ฑ ํ์์ ํ๋ฅผ ์ฐธ์กฐํ์ธ์.resource.tags
: BigQuery ๋ฆฌ์์ค์ ์ฐ๊ฒฐ๋ ํ๊ทธ์ ๋๋ค. ํ๊ทธ๋ BigQuery ๋ฐ์ดํฐ ์ธํธ, ํ ์ด๋ธ, ๋ทฐ ๋ฆฌ์์ค์์๋ง ์ง์๋ฉ๋๋ค. ํ์์ ์์ฑ ํ์ ๋ฐ IAM ๋ฌธ์์ ํ๋ฅผ ์ฐธ์กฐํ์ธ์.
์์ฑ ํ์
BigQuery ๋ฐ์ดํฐ ์ธํธ์ ์กฐ๊ฑด์ ๋ง๋ค ๋๋ ๋ค์ ํ์์ ์ฌ์ฉํฉ๋๋ค.
์์ฑ | ๊ฐ |
---|---|
resource.type |
bigquery.googleapis.com/Dataset |
resource.name |
projects/PROJECT_ID/datasets/DATASET_ID |
resource.service |
bigquery.googleapis.com |
resource.tags |
hasTagKey , hasTagKeyId , matchTag , matchTagId ๊ฐ ์ง์๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ฆฌ์์ค ํ๊ทธ๋ฅผ ์ฐธ์กฐํ์ธ์. |
BigQuery ํ ์ด๋ธ ๋ฐ ๋ทฐ์ ์กฐ๊ฑด์ ๋ง๋ค ๋๋ ๋ค์ ํ์์ ์ฌ์ฉํฉ๋๋ค.
์์ฑ | ๊ฐ |
---|---|
resource.type |
bigquery.googleapis.com/Table |
resource.name |
projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_ID |
resource.service |
bigquery.googleapis.com |
resource.tags |
hasTagKey , hasTagKeyId , matchTag , matchTagId ๊ฐ ์ง์๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ฆฌ์์ค ํ๊ทธ๋ฅผ ์ฐธ์กฐํ์ธ์. |
BigQuery ๋ฃจํด์ ์กฐ๊ฑด์ ๋ง๋ค ๋๋ ๋ค์ ํ์์ ์ฌ์ฉํฉ๋๋ค.
์์ฑ | ๊ฐ |
---|---|
resource.type |
bigquery.googleapis.com/Routine |
resource.name |
projects/PROJECT_ID/datasets/DATASET_ID/routines/ROUTINE_ID |
resource.service |
bigquery.googleapis.com |
BigQuery ๋ชจ๋ธ์ ์กฐ๊ฑด์ ๋ง๋ค ๋๋ ๋ค์ ํ์์ ์ฌ์ฉํฉ๋๋ค.
์์ฑ | ๊ฐ |
---|---|
resource.type |
bigquery.googleapis.com/Model |
resource.name |
projects/PROJECT_ID/datasets/DATASET_ID/models/MODEL_ID |
resource.service |
bigquery.googleapis.com |
๋ค์์ ๋ฐ๊ฟ๋๋ค.
PROJECT_ID
: ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ ๋ฆฌ์์ค๊ฐ ํฌํจ๋ ํ๋ก์ ํธ์ IDDATASET_ID
: ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ ๋ฐ์ดํฐ ์ธํธ์ IDTABLE_ID
: ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ ํ ์ด๋ธ ๋๋ ๋ทฐ์ IDROUTINE_ID
: ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ ๋ฃจํด์ IDMODEL_ID
: ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ ๋ชจ๋ธ์ ID
์กฐ๊ฑด ๊ถ์ฅ์ฌํญ
BigQuery์์ ์กฐ๊ฑด์ ๋น๋ํ ๋๋ ๋ค์ ๊ถ์ฅ์ฌํญ์ ๋ฐ๋ฅด์ธ์.
- ์ ํ์ฑ์ ๋์ด๋ ค๋ฉด
resource.type
,resource.name
,resource.service
์ ์์ ์กฐ๊ฑด์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ง์๋์ง ์๋ ์ ํ์ ๋น ๋ฌธ์์ด๋ก ํ์๋๋ฏ๋ก ๋ถ์ ์กฐ๊ฑด์ด ๋ค์ํ ๋ฆฌ์์ค์ ์ผ์นํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ถ์ ์กฐ๊ฑด์ ์ฐธ๊ณ ํ์ธ์. - ๋ฐ์ดํฐ ์ธํธ ์์ค IAM ์กฐ๊ฑด์ ํ
์ด๋ธ, ๋ทฐ, ๋ชจ๋ธ, ๋ฃจํด๊ณผ ๊ฐ์ด ๋ฐ์ดํฐ ์ธํธ ๋ด ๋ฆฌ์์ค์ ์ ์ฉ๋๋ ์ญํ ์๋ง ์ฌ์ฉํด์ผ ํฉ๋๋ค.
bigquery.user
๋๋bigquery.jobUser
์ ๊ฐ์ด ๋ฐ์ดํฐ ์ธํธ ๋๋ ํ๋ก์ ํธ ์์ค์์ ์๋ํ๋ ์ญํ ์ ๋ถ์ฌํ๋ ๋ฐ ์ฌ์ฉํด์๋ ์ ๋ฉ๋๋ค. - ๋ฐ์ดํฐ ์ธํธ ์์ค ์ ์ฑ
์๋
resource.type == 'bigquery.googleapis.com/Dataset'
์กฐ๊ฑด์ ์ฌ์ฉํ์ง ๋ง์ธ์. ์ธ์ฆ์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. ์ด ์์ฑ์ ํ ์ด๋ธ, ๋ทฐ, ๋ฃจํด, ๋ชจ๋ธ๊ณผ ๊ฐ์ ํ์ ๋ฐ์ดํฐ ์ธํธ ๋ฆฌ์์ค์ ๋ํ ์ก์ธ์ค๋ฅผ ์ ์ดํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. - ๊ตฌ์ฒด์ฑ ์์ค์ด ํ์ํ์ง ์๋๋ผ๋ ์กฐ๊ฑด์
resource.type
,resource.name
,resource.service
๋ฅผ ํฌํจํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ํฌํ๋ก์ ๋ฆฌ์์ค๊ฐ ๋ณ๊ฒฝ๋ ๋ ์กฐ๊ฑด์ ์ ์งํ์ฌ ํฅํ ๋ค๋ฅธ ๋ฆฌ์์ค๊ฐ ์๋์น ์๊ฒ ํฌํจ๋์ง ์๋๋ก ํฉ๋๋ค. - ๊ถํ์ ๋ถ์ฌํ ๋๋ ์๋์น ์๊ฒ ๊ณผ๋ํ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ์ง ์๋๋ก ์ต๋ํ ์ข์ ๋ฒ์์ ๊ถํ ์งํฉ์ ํฌํจํฉ๋๋ค.
resource.name.startsWith
๋ฅผ ์ฃผ์ํด์ ์ฌ์ฉํ์ธ์. BigQuery ํ ์ด๋ธ ๋ฐ ๋ทฐ ๊ฒฝ๋ก์๋ ์์ ํ๋ก์ ํธ ID ๋ฐ ๋ฐ์ดํฐ ์ธํธ ID๊ฐ ์ ๋์ฌ๋ก ๋ถ์ต๋๋ค. ์กฐ๊ฑด์ด ์ถฉ๋ถํ ๊ตฌ์ฒด์ ์ด์ง ์์ผ๋ฉด ์ก์ธ์ค ๊ถํ์ด ๋๋ฌด ๋ง์ด ๋ถ์ฌ๋ ์ ์์ต๋๋ค. ํ์ง๋งresource.name.startsWith
์์ฑ์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์๊ฐ ํ ์ด๋ธ์์ ์์ผ๋ ์นด๋ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋๋ก ํ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ดresource.name.startsWith("projects/my_project/datasets/my_dataset/tables/table_prefix")
์กฐ๊ฑด์ ์ฌ์ฉํ์ฌ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ๋ฉด ์ฌ์ฉ์๊ฐSELECT * FROM my_dataset.table_prefix*
์ฟผ๋ฆฌ๋ฅผ ์คํํ ์ ์์ต๋๋ค.- ๋ฐ์ดํฐ ์ธํธ, ํ ์ด๋ธ, ๋ทฐ, ๋ฃจํด, ๋ชจ๋ธ ์ด์ธ์ BigQuery ๋ฆฌ์์ค์ ์กฐ๊ฑด์ ์ถ๊ฐํ์ง ๋ง์ธ์.
- ์ฌ๋ฐ๋ฅธ ๋ฆฌ์์ค์ ์ฌ๋ฐ๋ฅธ ๊ถํ์ ๋ถ์ฌํ๊ณ ์๋์ง ํ์ธํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ฆฌ์์ค(
bigquery.RESOURCE.list
)๋ฅผ ๋์ดํ ์ ์๋ ๊ถํ์ ์์ ์์ค์์ ๋ถ์ฌ๋์ด์ผ ํ์ง๋ง ๋ฆฌ์์ค(bigquery.RESOURCE.delete
)๋ฅผ ์ญ์ ํ ์ ์๋ ๊ถํ์ ๋ฆฌ์์ค ์์ค์์ ๋ถ์ฌ๋์ด์ผ ํฉ๋๋ค. ํฌํจ๋ ๋ฆฌ์์ค๊ฐ ๋ชจ๋ ์ญ์ ๋๋ ๋ฐ์ดํฐ ์ธํธ ์ญ์ ์๋ ๋ฐ์ดํฐ ์ธํธ์ ๋ํ ํ ์ด๋ธ, ๋ชจ๋ธ, ๋ฃจํด ์ญ์ ๊ถํ์ด ํ์ํฉ๋๋ค. - ํ ์ด๋ธ ์ค๋ ์ท ๋ฐ ์๊ฐ ์ด๋์ ๊ถํ์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
๋ถ์ ์กฐ๊ฑด
resource.name != resource
์ ๊ฐ์ ๋ถ์ ์กฐ๊ฑด์ ์๋์น ์๊ฒ ๊ณผ๋ํ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ ์ ์์ต๋๋ค. ์ง์๋์ง ์๋ BigQuery ๋ฆฌ์์ค์๋ ๋ฆฌ์์ค ์์ฑ์ด ๋น์ด ์์ต๋๋ค. ์ฆ, ๋ชจ๋ ๋ถ์ ์กฐ๊ฑด๊ณผ ์ผ์นํฉ๋๋ค. BigQuery ์ธ๋ถ ์๋น์ค์ ๋ฆฌ์์ค๋ ๋ถ์ ์กฐ๊ฑด๊ณผ ์ผ์นํ ์ ์์ต๋๋ค.
๋ํ ๋ถ์ ์กฐ๊ฑด์ ์ฌ์ฉ์๊ฐ ์์ผ๋ ์นด๋๋ก ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๋ ๋ฌธ์ ๋ฅผ ๋ง๋ญ๋๋ค. ์๋ฅผ ๋ค์ด ๋ถ์ ์กฐ๊ฑด resource.name != /projects/my_project/datasets/my_dataset/tables/secret
์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ด ์กฐ๊ฑด์ secret
์ด๋ผ๋ ํ
์ด๋ธ์ ์ ์ธํ ๋ชจ๋ ๋ฆฌ์์ค์ ๋ํ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ๋ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค. ํ์ง๋ง ์ฌ์ฉ์๋ ์ฌ์ ํ SELECT * from my_project.my_dataset.secre*;
์ ๊ฐ์ ์์ผ๋ ์นด๋ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ํ
์ด๋ธ์ ์ฟผ๋ฆฌํ ์ ์์ต๋๋ค.
๋ํ ํ ์ด๋ธ, ๋ฃจํด, ๋ชจ๋ธ์ ๋ํ ๋ถ์ ์กฐ๊ฑด์ผ๋ก ์ธํด ์์ ๋ฐ์ดํฐ ์ธํธ์ ๋ํ ๊ณผ๋ํ ์ก์ธ์ค ๊ถํ์ด ๋ถ์ฌ๋ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ญ์ ๊ถํ์ด ๋ฐ์ดํฐ ์ธํธ ์์ค์์ ๊ด๋ฆฌ๋๋ฏ๋ก ์ฌ์ฉ์๊ฐ ์ด๋ฌํ ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ ์ ์์ต๋๋ค.
์ ํ์ฌํญ
- IAM ์กฐ๊ฑด์ผ๋ก ์น์ธ๋ ๋ทฐ, ์น์ธ๋ ๋ฃจํด ๋๋ ์น์ธ๋ ๋ฐ์ดํฐ ์ธํธ ๊ถํ ๋ถ์ฌ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
- ์กฐ๊ฑด์ด ์๋ ๋ฆฌ์์ค๋ฅผ ๋ณด๋ ๋์ ํธํ๋์ง ์๋
accessPolicyVersion
์ด ์ฌ์ฉ๋๋ฉด ๋ฐ์ธ๋ฉ์withcond
๋ค์ ํด์ ๊ฐ์ด ํฌํจ๋ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์ ์ฑ ๋ฐ ์ญํ ๋ฐ์ธ๋ฉ์์withcond
๋ฌธ์ ํด๊ฒฐ์ ์ฐธ๊ณ ํ์ธ์. - ๋ฐ์ดํฐ ์ธํธ ๋๋ ํ ์ด๋ธ์ ๋ํ ์กฐ๊ฑด๋ถ ์ก์ธ์ค ๊ถํ์ด ์๋ ์ฌ์ฉ์๋ Google Cloud ์ฝ์์ ํตํด ํด๋น ๋ฆฌ์์ค์ ๋ํ ๊ถํ์ ์์ ํ ์ ์์ต๋๋ค. ๊ถํ ์์ ์ bq ๋๊ตฌ ๋ฐ BigQuery API๋ฅผ ํตํด์๋ง ์ง์๋ฉ๋๋ค.
- ํ ์์ค ๋ฐ ์ด ์์ค ์ก์ธ์ค ์ ์ด๋ IAM ์กฐ๊ฑด์ ํตํด ์ง์ ์ง์๋์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์กฐ๊ฑด๋ถ ์ก์ธ์ค ๊ถํ์ด ์๋ ์ฌ์ฉ์๋ ํ
์ด๋ธ์ ๋ํ BigQuery ๊ด๋ฆฌ์ ์ญํ (
roles/bigquery.admin
)์ ์์ ์๊ฒ ๋ถ์ฌํ ํ ํ ๋ฐ ์ด ์ก์ธ์ค ์ ์ฑ ์ ์์ ํ ์ ์์ต๋๋ค. - IAM ์ ์ฑ ๋ณ๊ฒฝ์ฌํญ์ด ์ ์ฉ๋๋ ค๋ฉด ์ต๋ 5๋ถ์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
- ์กฐ๊ฑด๋ถ ์ก์ธ์ค ๊ถํ์ด ์๋ ์ฌ์ฉ์๋
INFORMATION_SCHEMA
๋ทฐ๋ฅผ ์ฟผ๋ฆฌํ์ง ๋ชปํ ์ ์์ต๋๋ค. - ์กฐ๊ฑด๋ถ ํ ์ด๋ธ ์ก์ธ์ค ๊ถํ๋ง ์๋ ์ฌ์ฉ์๋ ํ ์ด๋ธ ์์ผ๋ ์นด๋ ํจ์๋ฅผ ์คํํ ์ ์์ต๋๋ค.
์์
๋ค์์ BigQuery์์ IAM ์กฐ๊ฑด์ ์ฌ์ฉ ์ฌ๋ก ์์์ ๋๋ค.
ํน์ ํ ์ด๋ธ์ ๋ํ ์ฝ๊ธฐ ์ก์ธ์ค ๊ถํ ๋ถ์ฌ
์ด ์์์์๋ cloudysanfrancisco@gmail.com
์๊ฒ dataset_1
๋ฐ์ดํฐ ์ธํธ์ table_1
ํ
์ด๋ธ์ ๋ํ BigQuery ๋ฐ์ดํฐ ๋ทฐ์ด ์ญํ ์ ๋ถ์ฌํฉ๋๋ค. ์ด ์ญํ ์ด ์๋ ์ฌ์ฉ์๋ bq ๋๊ตฌ๋ฅผ ํตํด ํ
์ด๋ธ์ ์ฟผ๋ฆฌํ๊ณ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์ฌ์ฉ์์๊ฒ ๋ฐ์ดํฐ ์ธํธ์ ๋ํ bigquery.tables.list
๊ถํ์ด ์์ผ๋ฏ๋ก Google Cloud ์ฝ์์์ ํ
์ด๋ธ์ ๋ณผ ์ ์์ต๋๋ค.
{ "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.dataViewer, "condition": { "title": "Table dataset_1.table_1", "description": "Allowed to read table with name table_1 in dataset_1 dataset", "expression": resource.name == projects/project_1/datasets/dataset_1/tables/table_1 && resource.type == bigquery.googleapis.com/Table } }
ํน์ ๋ฐ์ดํฐ ์ธํธ์ ๋ํ ๋์ด ์ก์ธ์ค ๊ถํ ๋ถ์ฌ
์ด ์์์์๋ cloudysanfrancisco@gmail.com
์๊ฒ dataset_2
๋ฐ์ดํฐ ์ธํธ์ ๋ํ BigQuery ๋ฉํ๋ฐ์ดํฐ ๋ทฐ์ด ์ญํ ์ ๋ถ์ฌํฉ๋๋ค. ์ด ์ญํ ์ด ์๋ ์ฌ์ฉ์๋ ๋ฐ์ดํฐ ์ธํธ์ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ๋์ดํ ์ ์์ง๋ง ํด๋น ๋ฆฌ์์ค์ ๋ํด ์ฟผ๋ฆฌ๋ฅผ ์คํํ ์๋ ์์ต๋๋ค.
{ "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.metadataViewer, "condition": { "title": "Dataset dataset_2", "description": "Allowed to list resources in dataset_2 dataset", "expression": resource.name == projects/project_2/datasets/dataset_2 && resource.type == bigquery.googleapis.com/Dataset } }
ํน์ ํ๋ฆฌํฝ์ค๊ฐ ์๋ ๋ชจ๋ ๋ฐ์ดํฐ ์ธํธ์ ๋ชจ๋ ํ ์ด๋ธ์ ๋ํ ์์ ์ ์ก์ธ์ค ๊ถํ ๋ถ์ฌ
์ด ์์์๋ cloudysanfrancisco@gmail.com
์๊ฒ public_
ํ๋ฆฌํฝ์ค๋ก ์์ํ๋ ๋ชจ๋ ๋ฐ์ดํฐ ์ธํธ์ ๋ชจ๋ ํ
์ด๋ธ์ ๋ํ BigQuery ๋ฐ์ดํฐ ์์ ์ ์ญํ ์ ๋ถ์ฌํฉ๋๋ค.
{ "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.dataOwner, "condition": { "title": "Tables public_", "description": "Allowed owner access to tables in datasets with public_ prefix", "expression": resource.name.startsWith("projects/project_3/datasets/public_") && resource.type == bigquery.googleapis.com/Table } }
ํน์ ํ๋ฆฌํฝ์ค๊ฐ ์๋ ๋ชจ๋ ๋ฐ์ดํฐ ์ธํธ์ ๋ชจ๋ ํ ์ด๋ธ, ๋ชจ๋ธ, ๋ฃจํด์ ๋ํ ์์ ์ ์ก์ธ์ค ๊ถํ ๋ถ์ฌ
์ด ์์์๋ cloudysanfrancisco@gmail.com
์๊ฒ general_
ํ๋ฆฌํฝ์ค๋ก ์์ํ๋ ๋ชจ๋ ๋ฐ์ดํฐ ์ธํธ์ ๋ชจ๋ ํ
์ด๋ธ, ๋ชจ๋ธ, ๋ฃจํด์ ๋ํ BigQuery ๋ฐ์ดํฐ ์์ ์ ์ญํ ์ ๋ถ์ฌํฉ๋๋ค.
{ "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.dataOwner, "condition": { "title": "Tables general_", "description": "Allowed owner access to tables in datasets with general_ prefix", "expression": resource.name.startsWith("projects/project_4/datasets/general_") && resource.type == bigquery.googleapis.com/Table } }, { "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.dataOwner, "condition": { "title": "Models general_", "description": "Allowed owner access to models in datasets with general_ prefix", "expression": resource.name.startsWith("projects/project_4/datasets/general_") && resource.type == bigquery.googleapis.com/Model } }, { "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.dataOwner, "condition": { "title": "Routines general_", "description": "Allowed owner access to routines in datasets with general_ prefix", "expression": resource.name.startsWith("projects/project_4/datasets/general_") && resource.type == bigquery.googleapis.com/Routine } }
๋ค์ ๋จ๊ณ
- IAM ์กฐ๊ฑด์ ์ฌ์ฉํ์ฌ ์์ ์ก์ธ์ค๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ ์์ธํ ์์๋ณด๊ธฐ
- IAM ์กฐ๊ฑด์ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค ๊ธฐ๋ฐ ์ก์ธ์ค๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ ์์ธํ ์์๋ณด๊ธฐ