이 페이지에서는 BigQuery 데이터 세트에 대한 IAM 역할 권장사항을 보고, 이해하고, 적용하는 방법을 설명합니다. 역할 권장사항은 주 구성원에게 실제로 필요한 권한만 부여하여 최소 권한의 원칙을 적용하는 데 도움이 됩니다.
시작하기 전에
Enable the IAM and Recommender APIs.
역할 권장사항 이해하기
필요한 IAM 역할
데이터 세트 수준 역할 권장사항을 관리하는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.
-
프로젝트의 역할 뷰어(
roles/iam.roleViewer
) -
프로젝트의 IAM 추천자 관리자(
roles/recommender.iamAdmin
) -
데이터 세트의 BigQuery 데이터 소유자(
roles/bigquery.dataOwner
)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
이러한 사전 정의된 역할에는 데이터 세트 수준 역할 권장사항을 관리하는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.
필수 권한
데이터 세트 수준 역할 권장사항을 관리하려면 다음 권한이 필요합니다.
-
권장사항을 보려면 다음 안내를 따르세요.
-
프로젝트에 대한
iam.roles.get
권한 -
프로젝트에 대한
iam.roles.list
권한 -
프로젝트에 대한
recommender.iamPolicyRecommendations.get
권한 -
프로젝트에 대한
recommender.iamPolicyRecommendations.list
권한 -
프로젝트에 대한
recommender.iamPolicyInsights.get
권한 -
프로젝트에 대한
recommender.iamPolicyInsights.list
권한 -
데이터 세트에 대한
bigquery.datasets.getIamPolicy
권한
-
프로젝트에 대한
-
권장사항을 적용하거나 닫으려면 다음 안내를 따르세요.
-
프로젝트에 대한
recommender.iamPolicyRecommendations.update
권한 -
데이터 세트에 대한
bigquery.datasets.setIamPolicy
권한
-
프로젝트에 대한
커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.
권장사항 검토 및 적용하기
Google Cloud CLI 및 Recommender API를 사용하여 데이터 세트 수준 역할 권장사항을 검토하고 적용할 수 있습니다.
gcloud
권장사항 검토:
데이터 세트 수준의 권장사항을 나열하려면 gcloud recommender recommendations list
명령어를 실행하여 BigQuery 데이터 세트 권장사항만 필터링합니다.
gcloud recommender recommendations list \
--location=LOCATION \
--recommender=google.iam.policy.Recommender \
--project=PROJECT_ID \
--format=json \
--filter="recommenderSubtype:REMOVE_ROLE_BIGQUERY_DATASET OR recommenderSubtype:REPLACE_ROLE_BIGQUERY_DATASET"
다음 값을 바꿉니다.
LOCATION
: Cloud Storage 데이터 세트가 위치한 리전입니다(예:us
또는us-central1
).PROJECT_ID
: BigQuery 데이터 세트가 포함된 Google Cloud 프로젝트의 ID입니다. 프로젝트 ID는my-project
같은 영숫자 문자열입니다.
응답은 다음 예시와 유사합니다. 이 예시에서는 my-project
(projectEditor:my-project
) 프로젝트에 대해 편집자 역할을 가진 모든 사용자에게 dataset-1
데이터 세트에 대한 BigQuery 데이터 편집자 역할(roles/bigquery.dataEditor
)이 있습니다.
그러나 이 역할은 지난 90일 동안 사용되지 않았습니다. 따라서 역할 권장사항은 역할을 취소할 것을 제안합니다.
[ { "associatedInsights": [ { "insight": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/984eccca-0241-472f-baab-2557dd0d7282" } ], "content": { "operationGroups": [ { "operations": [ { "action": "remove", "path": "/iamPolicy/bindings/*/members/*", "pathFilters": { "/iamPolicy/bindings/*/condition/expression": "", "/iamPolicy/bindings/*/members/*": "projectEditor:my-project", "/iamPolicy/bindings/*/role": "roles/bigquery.dataEditor" }, "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1", "resourceType": "bigquery.googleapis.com/Dataset" } ] } ], "overview": { "addedRoles": [], "member": "projectEditor:my-project", "minimumObservationPeriodInDays": "0", "removedRole": "roles/bigquery.dataEditor", "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1" } }, "description": "This role has not been used during the observation window.", "etag": "\"3b123bc08d028128\"", "lastRefreshTime": "2024-02-04T08:00:00Z", "name": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/0e9831fe-6810-476b-b14d-2b64bda17288", "primaryImpact": { "category": "SECURITY", "securityProjection": { "details": { "revokedIamPermissionsCount": 37 } } }, "priority": "P4", "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET", "stateInfo": { "state": "ACTIVE" }, "targetResources": [ "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1" ] }, { "associatedInsights": [ { "insight": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/9d11057e-9c71-410f-ad55-fc82d87761d0" } ], "content": { "operationGroups": [ { "operations": [ { "action": "remove", "path": "/iamPolicy/bindings/*/members/*", "pathFilters": { "/iamPolicy/bindings/*/condition/expression": "", "/iamPolicy/bindings/*/members/*": "user:alicexz@google.com", "/iamPolicy/bindings/*/role": "roles/bigquery.dataOwner" }, "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1", "resourceType": "bigquery.googleapis.com/Dataset" } ] } ], "overview": { "addedRoles": [], "member": "user:alicexz@google.com", "minimumObservationPeriodInDays": "0", "removedRole": "roles/bigquery.dataOwner", "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1" } }, "description": "This role has not been used during the observation window.", "etag": "\"1da285f7aa6438f1\"", "lastRefreshTime": "2024-02-04T08:00:00Z", "name": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/56013294-cf81-402a-8cde-25489545777c", "primaryImpact": { "category": "SECURITY", "securityProjection": { "details": { "revokedIamPermissionsCount": 64 } } }, "priority": "P4", "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET", "stateInfo": { "state": "ACTIVE" }, "targetResources": [ "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1" ] } ]
각 권장사항을 신중하게 검토하고 주 구성원의 Google Cloud 리소스에 대한 액세스 권한을 변경하는 방법을 고려합니다. gcloud CLI에서 권장사항을 검토하는 방법은 이 페이지의 권장사항 검토를 참조하세요.
권장사항을 적용하려면 다음 안내를 따르세요.
gcloud recommender recommendations mark-claimed
명령어를 사용하여 권장사항 상태를CLAIMED,
로 변경하면 권장사항이 적용되는 동안 변경되지 않습니다.gcloud recommender recommendations mark-claimed \ RECOMMENDATION_ID \ --location=LOCATION \ --recommender=google.iam.policy.Recommender \ --project=PROJECT_ID \ --format=FORMAT \ --etag=ETAG \ --state-metadata=STATE_METADATA
다음 값을 바꿉니다.
-
RECOMMENDATION_ID
: 권장사항의 고유 식별자입니다. 이 값은 권장사항의name
필드 끝에 표시됩니다. 예를 들어name
필드가projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f
인 경우 권장사항 ID는fb927dc1-9695-4436-0000-f0f285007c0f
입니다. -
LOCATION
: BigQuery 데이터 세트가 있는 리전입니다(예:us
또는us-central1
). -
PROJECT_ID
: BigQuery 데이터 세트가 포함된 Google Cloud 프로젝트의 ID입니다. 프로젝트 ID는my-project
같은 영숫자 문자열입니다. -
FORMAT
: 응답 형식입니다.json
또는yaml
을 사용합니다. -
ETAG
: 권장사항의etag
필드 값입니다(예:"dd0686e7136a4cbb"
). 이 값에는 따옴표가 포함될 수 있습니다. -
STATE_METADATA
: 선택사항. 권장사항에 대한 메타데이터 선택사항이 포함된 쉼표로 구분된 키-값 쌍입니다. 예를 들면--state-metadata=reviewedBy=alice,priority=high
입니다. 메타데이터는 권장사항의stateInfo.stateMetadata
필드를 대체합니다.
명령어가 성공하면 다음 예시와 같이 응답은 권장사항을
CLAIMED
상태로 표시합니다. 명확하게 이해되도록 이 예시에서는 대부분의 필드를 생략합니다.... "priority": "P1", "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET", "stateInfo": { "state": "CLAIMED" } ...
-
데이터 세트에 대해 허용 정책을 가져오고 권장사항이 반영되도록 허용 정책을 수정하고 설정합니다.
권장사항을 적용할 수 있으면 권장사항 상태를
SUCCEEDED
로, 권장사항을 적용할 수 없으면FAILED
로 업데이트합니다.gcloud recommender recommendations COMMAND \ RECOMMENDATION_ID \ --location=LOCATION \ --recommender=google.iam.policy.Recommender \ --project=PROJECT_ID \ --format=FORMAT \ --etag=ETAG \ --state-metadata=STATE_METADATA
다음 값을 바꿉니다.
-
COMMAND
: 권장사항을 적용할 수 있으면mark-succeeded
를, 권장사항을 적용할 수 없으면mark-failed
를 사용합니다. -
RECOMMENDATION_ID
: 권장사항의 고유 식별자입니다. 이 값은 권장사항의name
필드 끝에 표시됩니다. 예를 들어name
필드가projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f
인 경우 권장사항 ID는fb927dc1-9695-4436-0000-f0f285007c0f
입니다. -
LOCATION
: BigQuery 데이터 세트가 있는 리전입니다(예:us
또는us-central1
). -
PROJECT_ID
: BigQuery 데이터 세트가 포함된 Google Cloud 프로젝트의 ID입니다. 프로젝트 ID는my-project
같은 영숫자 문자열입니다. -
FORMAT
: 응답 형식입니다.json
또는yaml
을 사용합니다. -
ETAG
: 권장사항의etag
필드 값입니다(예:"dd0686e7136a4cbb"
). 이 값에는 따옴표가 포함될 수 있습니다. -
STATE_METADATA
: 선택사항. 권장사항에 대한 메타데이터 선택사항이 포함된 쉼표로 구분된 키-값 쌍입니다. 예를 들면--state-metadata=reviewedBy=alice,priority=high
입니다. 메타데이터는 권장사항의stateInfo.stateMetadata
필드를 대체합니다.
예를 들어 권장사항을 성공으로 표시하면 응답은 권장사항을
SUCCEEDED
상태로 표시합니다. 명확하게 이해되도록 이 예시에서는 대부분의 필드를 생략합니다.... "priority": "P1", "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET", "stateInfo": { "state": "SUCCEEDED" } ...
-
REST
이 안내에서는 GOOGLE_APPLICATION_CREDENTIALS
환경 변수를 인증 및 설정했다고 가정합니다.
권장사항 검토:
BigQuery 데이터 세트에 사용 가능한 모든 권장사항을 나열하려면 Recommender API의 recommendations.list
메서드를 사용합니다.
요청 데이터를 사용하기 전에 다음을 바꿉니다.
PROJECT_ID
: BigQuery 데이터 세트가 포함된 Google Cloud 프로젝트의 ID입니다. 프로젝트 ID는my-project
같은 영숫자 문자열입니다.LOCATION
: BigQuery 데이터 세트가 있는 리전입니다(예:us
또는us-central1
).-
PAGE_SIZE
: (선택사항) 이 요청에서 반환할 최대 결과 수입니다. 지정하지 않으면 서버에서 반환할 결과 수를 결정합니다. 권장사항 수가 페이지 크기보다 크면 응답에 다음 결과 페이지를 검색하는 데 사용할 수 있는 페이지 나누기 토큰이 포함됩니다. -
PAGE_TOKEN
: 선택사항. 이 메서드의 이전 응답에서 반환된 페이지 나누기 토큰입니다. 지정하면 권장사항이 이전 요청이 끝나는 위치에서 시작됩니다. PROJECT_ID
: Google Cloud 프로젝트 ID. 프로젝트 ID는my-project
같은 영숫자 문자열입니다.
HTTP 메서드 및 URL:
GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations?filter=recommenderSubtype%20%3D%20REMOVE_ROLE_BIGQUERY_DATASET%20OR%20recommenderSubtype%20%3D%20REPLACE_ROLE_BIGQUERY_DATASET&pageSize=PAGE_SIZE&pageToken=PAGE_TOKEN
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
응답은 다음 예시와 유사합니다. 이 예시에서는 `my-project`(projectEditor:my-project
) 프로젝트에 대한 편집자 역할을 가진 모든 사용자에게 dataset-1
데이터 세트에 대한 BigQuery 데이터 편집자 역할(roles/bigquery.dataEditor
)이 있습니다.
그러나 이 역할은 지난 90일 동안 사용되지 않았습니다. 따라서 역할 권장사항은 역할을 취소할 것을 제안합니다.
{ "recommendations": [ { "name": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/0e9831fe-6810-476b-b14d-2b64bda17288", "description": "This role has not been used during the observation window.", "lastRefreshTime": "2024-02-02T08:00:00Z", "primaryImpact": { "category": "SECURITY", "securityProjection": { "details": { "revokedIamPermissionsCount": 37 } } }, "content": { "operationGroups": [ { "operations": [ { "action": "remove", "resourceType": "bigquery.googleapis.com/Dataset", "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1", "path": "/iamPolicy/bindings/*/members/*", "pathFilters": { "/iamPolicy/bindings/*/condition/expression": "", "/iamPolicy/bindings/*/members/*": "projectEditor:my-project", "/iamPolicy/bindings/*/role": "roles/bigquery.dataEditor" } } ] } ], "overview": { "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1", "member": "projectEditor:my-project", "removedRole": "roles/bigquery.dataEditor", "addedRoles": [], "minimumObservationPeriodInDays": "0" } }, "stateInfo": { "state": "ACTIVE" }, "etag": "\"d008ad3780bad5e0\"", "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET", "associatedInsights": [ { "insight": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/984eccca-0241-472f-baab-2557dd0d7282" } ], "priority": "P4", "targetResources": [ "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1" ] } ] }
각 권장사항을 신중하게 검토하고 주 구성원의 Google Cloud 리소스에 대한 액세스 권한을 변경하는 방법을 고려합니다. REST API에서 권장사항을 검토하는 방법은 이 페이지에서 권장사항 검토를 참조하세요.
권장사항을 적용하려면 다음 안내를 따르세요.
권장사항을
CLAIMED
로 표시합니다.권장사항을
CLAIMED
로 표시해서 적용 중에 변경되지 않도록 방지하려면 Recommender API의recommendations.markClaimed
메서드를 사용합니다.요청 데이터를 사용하기 전에 다음을 바꿉니다.
PROJECT_ID
: BigQuery 데이터 세트가 포함된 Google Cloud 프로젝트의 ID입니다. 프로젝트 ID는my-project
같은 영숫자 문자열입니다.LOCATION
: BigQuery 데이터 세트가 있는 리전입니다(예:us
또는us-central1
).RECOMMENDATION_ID
: 권장사항의 고유 식별자. 이 값은 권장사항의name
필드 끝에 표시됩니다. 예를 들어name
필드가projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f
인 경우 권장사항 ID는fb927dc1-9695-4436-0000-f0f285007c0f
입니다.ETAG
: 권장사항의etag
필드 값(예:"dd0686e7136a4cbb"
). 백슬래시를 사용하여 따옴표를 이스케이프 처리합니다(예:"\"df7308cca9719dcc\""
).STATE_METADATA
: 선택사항. 키-값 쌍이 포함된 객체로, 권장사항에 대한 메타데이터 선택사항이 포함되어 있습니다. 예를 들면{"reviewedBy": "alice", "priority": "high"}
입니다. 메타데이터는 권장사항의stateInfo.stateMetadata
필드를 대체합니다.
HTTP 메서드 및 URL:
POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations/RECOMMENDATION_ID:markClaimed
JSON 요청 본문:
{ "etag": "ETAG", "stateMetadata": { "STATE_METADATA" } }
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
다음 예시와 같이 응답에
CLAIMED
상태의 권장사항이 표시됩니다. 명확하게 이해되도록 이 예시에서는 대부분의 필드를 생략합니다.... "stateInfo": { "state": "CLAIMED" }, "etag": "\"7caf4103d7669e12\"", "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET", ...
프로젝트에 대해 허용 정책을 가져오고 권장사항이 반영되도록 허용 규칙을 수정합니다.
권장사항을 적용할 수 있으면 권장사항 상태를
SUCCEEDED
로, 권장사항을 적용할 수 없으면FAILED
로 업데이트합니다.SUCCEEDED
권장사항을
SUCCEEDED
로 표시해서 적용할 수 있음을 나타내려면 Recommender API의recommendations.markSucceeded
메서드를 사용합니다.요청 데이터를 사용하기 전에 다음을 바꿉니다.
PROJECT_ID
: BigQuery 데이터 세트가 포함된 Google Cloud 프로젝트의 ID입니다. 프로젝트 ID는my-project
같은 영숫자 문자열입니다.LOCATION
: BigQuery 데이터 세트가 있는 리전입니다(예:us
또는us-central1
).RECOMMENDATION_ID
: 권장사항의 고유 식별자. 이 값은 권장사항의name
필드 끝에 표시됩니다. 예를 들어name
필드가projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f
인 경우 권장사항 ID는fb927dc1-9695-4436-0000-f0f285007c0f
입니다.ETAG
: 권장사항의etag
필드 값(예:"dd0686e7136a4cbb"
). 백슬래시를 사용하여 따옴표를 이스케이프 처리합니다(예:"\"df7308cca9719dcc\""
).STATE_METADATA
: 선택사항. 키-값 쌍이 포함된 객체로, 권장사항에 대한 메타데이터 선택사항이 포함되어 있습니다. 예를 들면{"reviewedBy": "alice", "priority": "high"}
입니다. 메타데이터는 권장사항의stateInfo.stateMetadata
필드를 대체합니다.
HTTP 메서드 및 URL:
POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations/RECOMMENDATION_ID:markSucceeded
JSON 요청 본문:
{ "etag": "ETAG", "stateMetadata": { "STATE_METADATA" } }
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
다음 예시와 같이 응답에
SUCCEEDED
상태의 권장사항이 표시됩니다. 명확하게 이해되도록 이 예시에서는 대부분의 필드를 생략합니다.... "stateInfo": { "state": "SUCCEEDED" }, "etag": "\"7caf4103d7669e12\"", "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET", ...
FAILED
권장사항을
FAILED
로 표시해서 적용할 수 없음을 나타내려면 Recommender API의recommendations.markFailed
메서드를 사용합니다.요청 데이터를 사용하기 전에 다음을 바꿉니다.
PROJECT_ID
: BigQuery 데이터 세트가 포함된 Google Cloud 프로젝트의 ID입니다. 프로젝트 ID는my-project
같은 영숫자 문자열입니다.LOCATION
: BigQuery 데이터 세트가 있는 리전입니다(예:us
또는us-central1
).RECOMMENDATION_ID
: 권장사항의 고유 식별자. 이 값은 권장사항의name
필드 끝에 표시됩니다. 예를 들어name
필드가projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f
인 경우 권장사항 ID는fb927dc1-9695-4436-0000-f0f285007c0f
입니다.ETAG
: 권장사항의etag
필드 값(예:"dd0686e7136a4cbb"
). 백슬래시를 사용하여 따옴표를 이스케이프 처리합니다(예:"\"df7308cca9719dcc\""
).STATE_METADATA
: 선택사항. 키-값 쌍이 포함된 객체로, 권장사항에 대한 메타데이터 선택사항이 포함되어 있습니다. 예를 들면{"reviewedBy": "alice", "priority": "high"}
입니다. 메타데이터는 권장사항의stateInfo.stateMetadata
필드를 대체합니다.
HTTP 메서드 및 URL:
POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations/RECOMMENDATION_ID:markFailed
JSON 요청 본문:
{ "etag": "ETAG", "stateMetadata": { "STATE_METADATA" } }
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
다음 예시와 같이 응답에
FAILED
상태의 권장사항이 표시됩니다. 명확하게 이해되도록 이 예시에서는 대부분의 필드를 생략합니다.... "stateInfo": { "state": "FAILED" }, "etag": "\"7caf4103d7669e12\"", "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET", ...
권장사항 이해
각 권장사항에는 권장사항이 제공된 이유를 설명하는 정보가 포함됩니다.
권장사항 필드에 대한 자세한 내용은 Recommendation
참조를 확인하세요.
이 권장사항에 따른 권한 사용을 보려면 권장사항과 연결된 정책 통계를 참조하세요.
이러한 통계는 associatedInsights
필드에 나열됩니다. 권장사항과 연결된 정책 통계를 보려면 다음 안내를 따르세요.
- 관련 통계의 ID를 복사합니다. ID는
insight
필드에서insights/
다음에 오는 모든 문자입니다. 예를 들어insight
필드가projects/123456789012/locations/us/insightTypes/google.iam.policy.Insight/insights/7849add9-73c0-419e-b169-42b3671173fb
로 표시되는 경우 통계 ID는7849add9-73c0-419e-b169-42b3671173fb
입니다. - 안내에 따라 복사한 통계 ID를 사용하여 정책 통계를 가져옵니다.
다음 단계
- 추천자 자세히 알아보기
- BigQuery 데이터 세트에 허용 정책 통계를 사용하는 방법 알아보기