역할 권장사항 개요

역할 권장사항을 사용하면 주 구성원의 초과 권한을 식별하고 삭제하여 리소스의 보안 구성을 개선할 수 있습니다.

역할 권장사항 개요

역할 권장사항은 IAM 추천자에 의해 생성됩니다. IAM 추천자는 추천자가 제공하는 추천자 중 하나입니다.

각 역할 권장사항은 주 구성원에게 초과 권한을 부여하는 역할을 삭제하거나 대체할 것을 제안합니다. 규모에 맞게 이러한 권장사항은 주 구성원에 실제로 필요한 권한만 부여하여 최소 권한의 원칙을 적용하는 데 도움이 됩니다.

IAM 추천자는 정책 통계를 사용하여 초과 권한을 식별합니다. 정책 통계는 주 구성원의 권한 사용에 대한 ML 기반 발견 항목입니다.

일부 권장사항은 측면 이동 통계와도 연결됩니다. 이러한 통계는 프로젝트의 서비스 계정이 다른 프로젝트의 서비스 계정을 가장할 수 있게 해주는 역할을 식별합니다. 자세한 내용은 측면 이동 통계 생성 방법을 참조하세요.

정책 통계 생성 방법

정책 통계는 주 구성원이 사용하지 않는 주 구성원 역할의 권한을 강조 표시합니다.

IAM 추천자는 주 구성원의 총 권한 수를 주 구성원이 최근 90일 동안 사용한 권한과 비교하여 정책 통계를 생성합니다. 역할이 부여된 지 90일이 지나지 않은 경우 IAM 추천자는 주 구성원에게 역할이 부여된 시점부터 주 구성원 권한 사용 현황을 살펴봅니다.

다음은 주 구성원이 권한을 사용할 수 있는 몇 가지 방법입니다.

  • 직접: 권한이 필요한 API 호출

    예를 들어 IAM REST API의 roles.list 메서드에는 iam.roles.list 권한이 필요합니다. roles.list 메서드를 호출할 때 iam.roles.list 권한을 사용합니다.

    마찬가지로 리소스의 testIamPermissions 메서드를 호출하면 테스트 중인 모든 권한이 효과적으로 사용됩니다.

  • 간접: Google Cloud 콘솔을 사용하여 Google Cloud 리소스와 연동

    예를 들어 Google Cloud 콘솔에서 변경하는 설정에 따라 다른 권한이 필요한 Compute Engine 가상 머신(VM) 인스턴스를 수정할 수 있습니다. 하지만 Google Cloud 콘솔에는 기존 설정도 표시되어 compute.instances.get 권한을 필요로 합니다.

    따라서 Google Cloud 콘솔에서 VM 인스턴스를 편집할 때 compute.instances.get 권한을 사용합니다.

또한 IAM 추천자는 주 구성원이 최근에 해당 권한을 사용하지 않았더라도 머신러닝을 사용하여 주 구성원의 현재 역할에서 향후 필요한 권한을 식별합니다. 자세한 내용은 이 페이지의 정책 통계용 머신러닝을 참조하세요.

주 구성원에게 부여된 모든 IAM 역할에 대해 정책 통계가 생성되지는 않습니다. 역할에 정책 통계가 없을 수 있는 이유에 대한 자세한 내용은 이 페이지의 가용성을 참조하세요.

정책 통계 관리 방법은 프로젝트, 폴더, 조직의 정책 통계 관리 또는 Cloud Storage 버킷의 정책 통계 관리를 참조하세요.

정책 통계용 머신러닝

일부 경우에 주 구성원은 현재 역할에 포함되어 있지만 최근에 사용하지 않은 특정 권한이 필요할 수 있습니다. IAM 추천자는 이러한 권한을 식별하기 위해 정책 통계를 생성할 때 머신러닝(ML) 모델을 사용합니다.

이 머신러닝 모델은 여러 신호 세트에 대해 학습합니다.

  • 관찰된 내역의 동시발생 패턴: 이전에 사용자가 A, B, C 권한을 사용했다는 것은 A, B, C가 어떤 식으로든 관련이 있을 수 있다는 힌트를 제공하며 Google Cloud에서 작업을 수행하는 데 필요하다는 의미입니다. ML 모델이 이 패턴을 자주 관찰하게 되면 다른 사용자가 A와 B 권한을 사용할 때 모델이 사용자에게 C 권한 또한 필요할 것이라고 제안합니다.

  • 역할 정의에 인코딩된 도메인 지식: IAM은 서비스별로 수백 가지의 사전 정의된 역할을 제공합니다. 사전 정의된 역할에 일련의 권한이 포함된다는 것은 이러한 권한들이 함께 부여되어야 한다는 강력한 신호입니다.

이러한 신호 외에도 모델은 단어 임베딩을 사용하여 권한이 어떻게 의미상 유사한지 계산합니다. 의미상 비슷한 권한은 임베딩 후에 서로 '가까워'지고 함께 부여될 가능성이 높습니다. 예를 들어 bigquery.datasets.getbigquery.tables.list는 임베딩 후 서로 매우 가까워집니다.

IAM 추천자 머신러닝 파이프라인에 사용된 모든 데이터는 k-익명성을 가집니다. 이는 익명화된 데이터 세트의 개인을 다시 식별할 수 없음을 의미합니다. 이러한 익명성 수준을 달성하기 위해 각 권한 사용 패턴과 관련된 사용자 ID 등의 개인 식별 정보(PII)를 모두 삭제합니다. 그런 다음 Google Cloud 전체에 자주 표시되지 않는 사용 패턴을 모두 삭제합니다. 전역 모델은 이 익명화된 데이터를 대상으로 학습되어 있습니다.

데이터를 내보내지 않고 머신러닝 모델을 학습시키는 머신러닝 프로세스인 제휴 학습을 사용하여 조직마다 전역 모델을 맞춤설정할 수 있습니다.

역할 권장사항 생성 방법

정책 통계에서 주 구성원에게 역할의 모든 권한이 필요하지 않다고 표시되는 경우 IAM 추천자는 역할을 평가하여 역할을 취소할 수 있는지 또는 더 적합한 다른 역할이 있는지 확인합니다. 역할을 취소할 수 있으면 IAM 추천자는 역할을 취소하는 역할 권장사항을 생성합니다. 더 적합한 다른 역할이 있으면 IAM 추천자는 역할을 추천된 역할로 대체할 역할 권장사항을 생성합니다. 새 커스텀 역할, 기존 커스텀 역할 또는 사전 정의된 역할 1개 이상이 역할로 추천될 수 있습니다. Google 관리 서비스 계정에 대한 권장사항의 경우를 제외하면 역할 권장사항은 주 구성원의 액세스 수준을 높이는 변경사항을 제안하지 않습니다.

역할 권장사항은 IAM 액세스 제어를 기반으로 생성됩니다. 액세스 제어 목록(ACL) 및 Kubernetes 역할 기반 액세스 제어(RBAC)와 같은 다른 종류의 액세스 제어를 고려하지 않습니다. 다른 유형의 액세스 제어를 사용하는 경우 권장사항을 검토할 때 특히 주의하고 이러한 액세스 제어가 허용 정책과 어떤 관련이 있는지 고려합니다.

또한 주 구성원에게 부여된 모든 IAM 역할에 대한 역할 권장사항이 생성되지 않습니다. 역할에 역할 권장사항이 없을 수 있는 이유에 대한 자세한 내용은 이 페이지의 가용성을 참조하세요.

관찰 기간

역할 권장사항의 관찰 기간은 권장사항의 기반이 되는 권한 사용 데이터의 일수입니다.

역할 권장사항의 최대 관찰 기간은 90일입니다. 즉, IAM 추천자는 최근 90일 동안의 권한 사용 데이터를 사용하여 역할 권장사항을 생성합니다.

또한 IAM 추천자는 특정 일수의 권한 사용 데이터가 있어야 역할 권장사항을 생성하기 시작합니다. 이 기간을 최소 관찰 기간이라고 합니다. 기본적으로 최소 관찰 기간은 90일이지만 프로젝트 수준 역할 권장사항의 경우 수동으로 30일 또는 60일로 설정할 수 있습니다. 자세한 내용은 역할 권장사항 생성 구성을 참조하세요. 최소 관찰 기간을 90일 미만으로 설정하면 권장사항이 더 빨리 표시되지만 권장사항의 정확도가 영향을 받을 수 있습니다.

최소 관찰 기간보다 오래되었지만 역할이 생성된지 90일 미만인 경우 관찰 기간은 역할이 부여된 이후의 기간입니다.

역할 권장사항의 새 커스텀 역할

IAM 추천자가 특정 역할의 대체 역할을 제안할 때는 언제나 주 구성원의 요구사항에 더 적합한 것으로 보이는 기존 커스텀 역할 또는 사전 정의된 역할 1개 이상을 제안합니다.

IAM 추천자가 조직에서 기존의 사전 정의된 역할 또는 커스텀 역할에 매핑되지 않는 일반적인 권한 사용 패턴을 식별하면 새 프로젝트 수준 커스텀 역할을 만드는 것이 좋습니다. 이 커스텀 역할에는 권장 권한 포함됩니다. 권한을 추가하거나 삭제하여 커스텀 역할 권장사항을 수정할 수 있습니다.

최소 권한 원칙을 최대한 엄격히 적용하려면 새 커스텀 역할을 선택합니다. IAM 추천자는 프로젝트 수준에서 커스텀 역할을 만듭니다. 사용자는 프로젝트의 커스텀 역할을 유지하고 업데이트해야 합니다.

Google 관리 역할을 사용하려면 사전 정의된 역할을 선택합니다. Google Cloud는 권한을 추가하거나 삭제하여 이러한 역할을 정기적으로 업데이트합니다. 이러한 업데이트에 대한 알림을 받으려면 권한 변경 로그에 대한 뉴스 피드를 구독하세요. 사전 정의된 역할을 선택하면 주 구성원이 적어도 몇 가지 권한은 계속 보유하게 되고 아직까지 사용한 적이 없었던 다수의 권한을 보유하게 될 수도 있습니다.

IAM 추천자는 다음과 같은 경우 새 커스텀 역할을 권장하지 않습니다.

  • 폴더 수준 또는 조직 수준 역할에 대한 권장사항입니다.
  • 조직에 이미 100개 이상의 커스텀 역할이 있습니다.
  • 프로젝트에 이미 25개 이상의 커스텀 역할이 있습니다.

또한 IAM 추천자에서는 새 커스텀 역할을 프로젝트당 하루 5개 이하, 전체 조직에는 15개 이하로 할 것을 권장합니다.

측면 이동 통계 생성 방법

측면 이동은 한 프로젝트의 서비스 계정에 다른 프로젝트의 서비스 계정을 가장할 수 있는 권한이 있는 경우입니다. 예를 들어 프로젝트 A에서 만든 서비스 계정이 프로젝트 B의 서비스 계정을 가장할 수 있는 권한을 보유할 수 있습니다.

이러한 권한은 주 구성원에 의도하지 않은 리소스 액세스 권한을 부여하는 프로젝트 간의 일련의 가장을 일으킬 수 있습니다. 예를 들어 주 구성원이 프로젝트 A의 서비스 계정을 가장하는 경우 이 서비스 계정을 사용하여 프로젝트 B의 서비스 계정을 가장할 수 있습니다. 프로젝트 B의 서비스 계정에 조직 내 다른 프로젝트의 다른 서비스 계정을 가장할 수 있는 권한이 있으면 주 구성원이 계속해서 서비스 계정 가장을 사용하여 프로젝트 간에 이동하며 권한을 계속 얻을 수 있습니다.

IAM 추천자는 다음 기준에 맞는 역할을 식별하여 측면 이동 통계를 생성합니다.

  • 역할이 부여된 주 구성원은 해당 프로젝트에서 생성되지 않은 서비스 계정입니다.
  • 이 역할에는 주 구성원이 서비스 계정을 가장하도록 허용하는 다음 권한 중 하나가 포함됩니다.

    • iam.serviceAccounts.actAs
    • iam.serviceAccounts.getAccessToken
    • iam.serviceAccounts.getOpenIdToken
    • iam.serviceAccounts.implicitDelegation
    • iam.serviceAccounts.signBlob
    • iam.serviceAccounts.signJwt

역할이 이러한 기준에 부합하면 IAM 추천자가 역할의 측면 이동 통계를 생성합니다. 이 통계에는 가장할 수 있는 서비스 계정과 지난 90일 동안 가장 권한을 사용했는지 여부 등 서비스 계정의 가장 권한에 대한 정보가 포함됩니다.

IAM 추천자가 자체적으로 측면 이동 통계를 사용하여 새 역할 권장사항을 생성하지는 않습니다. 서비스 계정이 가장 권한을 사용 중인 경우 IAM 추천자가 안전하게 삭제를 제안할 수 없기 때문입니다. 그러나 역할 권장사항에서 사용되지 않는 권한을 삭제하도록 제안하는 경우 IAM 추천자가 측면 이동 통계를 해당 권장사항에 연결합니다. 이러한 연결을 통해 프로젝트에서 사용되지 않는 강력한 가장 권한을 보유한 서비스 계정의 역할 권장사항에 대한 우선순위를 정할 수 있습니다.

측면 이동 통계를 관리하는 방법은 측면 이동 통계 관리를 참조하세요.

가용성

주 구성원에게 부여된 모든 역할에 대해 정책 통계, 측면 이동 통계, 역할 권장사항이 생성되지는 않습니다. 다음 섹션을 읽고 정책 통계, 측면 이동 통계, 권장사항이 생성되는 역할을 이해합니다.

정책 통계 가용성

IAM 추천자가 역할에 대한 정책 통계를 생성하려면 다음 조건을 충족해야 합니다.

  • 역할을 부여하는 IAM 허용 정책은 다음 리소스 중 하나에 연결되어야 합니다.

    • Cloud Storage 버킷
    • BigQuery 데이터 세트
    • 프로젝트
    • 폴더
    • 조직

    IAM 추천자는 이러한 리소스에 부여된 역할에 대해서만 정책 통계를 생성합니다.

  • 역할을 부여하는 역할 결합에 조건이 없어야 합니다. IAM 추천자는 조건부 역할 바인딩의 정책 통계를 생성하지 않습니다.

  • 역할이 부여된 주 구성원은 다음 주 구성원 유형 중 하나여야 합니다.

    주 구성원 유형에 대한 자세한 내용은 주 구성원 식별자를 참조하세요.

IAM 추천자가 새로 부여된 역할에 대한 정책 통계를 생성하는 데 최대 10일이 걸릴 수 있습니다.

기존 정책 통계는 최근 권한 사용에 따라 매일 새로고침됩니다. 하지만 정책 통계의 기반이 되는 데이터는 일반적으로 실제 사용량보다 최대 2일 지연됩니다.

측면 이동 통계 가용성

측면 이동 통계는 다음 리소스에 부여된 역할에 대해 생성됩니다.

  • 조직
  • 폴더
  • 프로젝트
  • 서비스 계정

역할 권장사항 가용성

IAM 추천자가 역할에 대한 역할 권장사항을 생성하려면 다음 조건을 충족해야 합니다.

  • 역할에 연결된 정책 통계가 있어야 합니다. 이 정책은 권장사항의 기준으로 사용됩니다.
  • 역할이 부여된 이후 최소 관찰 기간보다 길어야 합니다. 이렇게 하면 IAM 추천자는 권장사항을 제공할 만큼 충분한 사용 데이터를 확보할 수 있습니다. 기본적으로 최소 관찰 기간은 90일이지만 수동으로 30일 또는 60일로 설정할 수 있습니다. 자세한 내용은 역할 권장사항 생성 구성을 참조하세요.
  • 역할이 부여된 주 구성원이 Google 관리 서비스 계정인 경우 역할은 소유자, 편집자 또는 뷰어여야 합니다. IAM 추천자는 다른 역할이 있는 Google 관리 서비스 계정의 역할 권장사항을 생성하지 않습니다. 자세한 내용은 Google 관리 서비스 계정의 역할 권장사항을 참조하세요.

역할이 너무 최근에 부여되었거나 통계가 없는 경우 Google Cloud 콘솔의 분석된 권한 열 아이콘이 표시됩니다.

시간이 충분히 경과하고 역할에 연결된 통계가 있더라도 IAM 추천자가 역할에 대한 역할 권장사항을 생성하지 않는 경우가 있습니다. 이는 다음과 같은 이유로 발생할 수 있습니다.

  • 현재 역할보다 적절한 사전 정의된 IAM 역할이 없습니다. 주 구성원에게 이미 권한이 최소화된 사전 정의된 역할이 부여되었거나 다른 사전 정의된 역할보다 권한이 적은 경우 IAM 추천자는 다른 사전 정의된 역할을 추천할 수 없습니다.

    주 구성원을 위한 커스텀 역할을 만들어 주 구성원의 권한을 줄일 수 있습니다.

  • 주 구성원은 Google 관리 서비스 계정이며 기본 역할이 아닙니다. IAM 추천자는 서비스 계정에 기본 역할(소유자, 편집자, 뷰어)이 있는 경우에만 Google 관리 서비스 계정의 역할 권장사항을 생성합니다. 자세한 내용은 Google 관리 서비스 계정의 역할 권장사항을 참조하세요.

  • 프로젝트의 소유자 기본 역할을 가진 다른 주 구성원이 없습니다. 프로젝트마다 주 구성원 최소 한 명 이상에게 소유자 역할(roles/owner)이 있어야 합니다. 이 역할이 있는 주 구성원이 단 한 명이면 IAM 추천자는 역할을 취소하거나 대체하는 것을 추천하지 않습니다.

이러한 경우 Google Cloud 콘솔의 분석된 권한 열에 주 구성원의 권한 사용량이 표시되지만 권장사항 사용 가능 아이콘은 없습니다.

기존 역할 권장사항은 최근 권한 사용을 기준으로 매일 새로고침됩니다. 그러나 역할 권장사항을 기반으로 하는 데이터는 일반적으로 실제 사용량보다 최대 2일 지연됩니다.

우선순위 및 심각도

권장사항 우선순위 및 통계 심각도는 권장사항 또는 통계의 긴급성을 이해하고 그에 따라 우선순위를 지정하는 데 도움이 됩니다.

역할 권장사항 우선순위

권장사항은 인식되는 긴급한 수준에 따라 우선순위 수준이 할당됩니다. 우선순위 수준 범위는 P0(가장 높은 우선순위)에서 P4(가장 낮은 우선순위)까지입니다.

역할 권장사항의 우선순위는 권장사항의 역할에 따라 다릅니다.

권장사항 세부정보 우선순위 설명
Cloud Storage 버킷에 대한 공개 액세스 권한을 부여하는 역할의 권장사항 P1 공개적으로 액세스할 수 있는 버킷에는 인터넷상의 누구나 액세스할 수 있습니다. 공개 액세스를 삭제하면 데이터를 더 세밀하게 관리할 수 있습니다.
BigQuery 데이터 세트에 대한 공개 액세스 권한을 부여하는 역할의 권장사항 P1 공개적으로 액세스할 수 있는 데이터 세트에는 인터넷상의 누구나 액세스할 수 있습니다. 공개 액세스를 삭제하면 데이터를 더 세밀하게 관리할 수 있습니다.
프로젝트, 폴더 또는 조직에 부여되는 기본 역할(소유자, 편집자, 뷰어)에 대한 권장사항 P2 기본 역할은 권한이 높으며 이러한 역할에 권장사항을 적용하면 초과 권한을 크게 줄일 수 있습니다.
공개 액세스 또는 기본 역할을 부여하지 않는 권장사항 P4 이러한 권장사항을 통해 과도한 권한을 줄일 수 있지만 공개 액세스 또는 높은 권한이 있는 기본 역할은 삭제되지 않으므로 우선순위가 낮습니다.

통계 심각도

통계에는 인식되는 긴급한 수준에 따라 심각도 수준이 할당됩니다. 심각도 수준은 LOW, MEDIUM, HIGH, CRITICAL일 수 있습니다.

정책 통계의 심각도는 통계의 역할에 따라 다릅니다.

통계 세부정보 심각도 설명
Cloud Storage 버킷에 대한 공개 액세스 권한을 부여하는 역할에 대한 통계 CRITICAL 공개적으로 액세스할 수 있는 버킷에는 인터넷상의 누구나 액세스할 수 있습니다. 공개 액세스를 삭제하면 데이터를 더 세밀하게 관리할 수 있습니다.
BigQuery 데이터 세트에 공개 액세스 권한을 부여하는 역할에 대한 통계 CRITICAL 공개적으로 액세스할 수 있는 데이터 세트에는 인터넷상의 누구나 액세스할 수 있습니다. 공개 액세스를 삭제하면 데이터를 더 세밀하게 관리할 수 있습니다.
프로젝트, 폴더 또는 조직에 부여된 기본 역할(소유자, 편집자, 뷰어)에 대한 통계 HIGH 기본 역할은 권한이 높으며, 이러한 역할에 대한 통계를 처리하면 과도한 권한을 크게 줄일 수 있습니다.
공개 액세스 또는 기본 역할을 부여하지 않는 통계 LOW 이러한 통계는 과도한 권한을 강조하지만 공개 액세스 또는 권한이 높은 기본 역할은 포함되지 않으므로 우선순위가 낮습니다.

모든 측면 이동 통계의 심각도는 LOW입니다.

역할 권장사항 적용 방법

IAM 추천자는 자동으로 권장사항을 적용하지 않습니다. 대신 사용자가 권장사항을 검토하고 적용하기 또는 닫기를 결정해야 합니다. 역할 권장사항을 검토 및 적용하고 닫는 방법은 다음 가이드 중 하나를 참조하세요.

감사 로깅

권장사항을 적용하거나 닫으면 IAM 추천자가 로그 항목을 만듭니다. 추천 기록에서 항목을 확인하거나 Google Cloud 감사 로그에서 항목을 확인할 수 있습니다.

역할 권장사항 하위유형

역할 권장사항은 권장 작업에 따라 여러 하위유형으로 나뉩니다. gcloud CLI 또는 REST API를 사용하는 경우 이러한 하위유형으로 권장사항을 필터링할 수 있습니다.

하위유형 설명
REMOVE_ROLE 주 구성원의 프로젝트 수준, 폴더 수준, 조직 수준 역할을 삭제하기 위한 권장사항입니다.
REMOVE_ROLE_BIGQUERY_DATASET 주 구성원의 데이터 세트 수준 역할을 삭제하기 위한 권장사항입니다.
REMOVE_ROLE_STORAGE_BUCKET 주 구성원의 버킷 수준 역할을 삭제하기 위한 권장사항입니다.
REPLACE_ROLE 주 구성원의 프로젝트 수준, 폴더 수준 또는 조직 수준 역할을 권한이 더 낮은 역할로 대체하기 위한 권장사항입니다. 권장되는 대체 역할은 기존 커스텀 역할 또는 하나 이상의 사전 정의된 역할일 수 있습니다.
REPLACE_ROLE_CUSTOMIZABLE 주 구성원의 역할을 현재 역할보다 권한이 더 낮은 새 커스텀 역할로 대체하기 위한 권장사항입니다.
REPLACE_ROLE_BIGQUERY_DATASET 주 구성원의 데이터 세트 수준 역할을 권한이 더 낮은 역할로 대체하기 위한 권장사항입니다. 권장되는 대체 역할은 기존 커스텀 역할 또는 하나 이상의 사전 정의된 역할일 수 있습니다.
REPLACE_ROLE_STORAGE_BUCKET 주 구성원의 버킷 수준 역할을 권한이 더 낮은 역할로 대체하기 위한 권장사항입니다. 권장되는 대체 역할은 기존 커스텀 역할 또는 하나 이상의 사전 정의된 역할일 수 있습니다.
SERVICE_AGENT_WITH_DEFAULT_ROLE Google 관리 서비스 계정의 소유자, 편집자 또는 뷰어 역할을 서비스 계정에 자동으로 부여된 역할로 교체하기 위한 권장사항입니다. 자세한 내용은 Google 관리 서비스 계정에 대한 권장사항을 참조하세요.
SERVICE_AGENT_WITHOUT_DEFAULT_ROLE 권한이 낮은 역할로 Google 관리 서비스 계정의 소유자, 편집자 또는 뷰어 역할을 교체하기 위한 권장사항입니다. 자세한 내용은 Google 관리 서비스 계정 권장사항을 참조하세요.

Google 관리 서비스 계정의 역할 권장사항

Google 관리 서비스 계정의 경우, IAM 추천자는 기본 역할(소유자, 편집자, 뷰어)에 대한 권장사항만 제공합니다.

Google 관리 서비스 계정의 권장사항은 권장사항 하위유형 2가지로 나뉩니다.

SERVICE_AGENT_WITH_DEFAULT_ROLE

일부 Google 관리 서비스 계정은 생성 시 Google Cloud 서비스가 제대로 작동하도록 서비스 에이전트 역할이 자동으로 부여됩니다. 이 역할을 기본 역할(소유자, 편집자, 뷰어)로 바꾸면 추천자는 서비스 에이전트 역할이 기본 역할에 없는 권한을 가진 경우에도 원래 서비스 에이전트 역할을 복원하여 초과 권한을 삭제하도록 제안할 수 있습니다. 이러한 권장사항에는 SERVICE_AGENT_WITH_DEFAULT_ROLE 하위유형이 있습니다. 이는 모든 Google Cloud 서비스가 제대로 작동하면서 초과 권한을 안전하게 삭제하는 데 도움이 됩니다.

SERVICE_AGENT_WITH_DEFAULT_ROLE 권장사항은 현재 역할에 없는 권한을 가진 역할을 제안할 수 있는 유일한 권장사항 유형입니다.

SERVICE_AGENT_WITHOUT_DEFAULT_ROLE

생성 시 Google 관리 서비스 계정에 자동으로 역할이 부여되지 않은 경우 서비스 계정의 권장사항은 서비스 계정이 사용하는 권한을 기반으로만 결정됩니다. 이러한 권장사항에는 SERVICE_AGENT_WITHOUT_DEFAULT_ROLE 하위유형이 있습니다.

Security Command Center의 역할 추천

프리미엄 등급의 Security Command Center를 사용하는 경우 Security Command Center에서 역할 추천의 일부 하위유형을 발견 항목으로 볼 수 있습니다. 각 하위 유형은 감지기와 연결됩니다.

권장사항 하위유형 발견 항목 카테고리
REMOVE_ROLE Unused IAM role
REPLACE_ROLE IAM role has excessive permissions
SERVICE_AGENT_WITH_DEFAULT_ROLE Service agent role replaced with basic role
SERVICE_AGENT_WITHOUT_DEFAULT_ROLE Service agent granted basic role

Security Command Center에서 역할 추천을 보는 방법에 대한 자세한 내용은 Security Command Center 문서의 IAM 추천자를 참조하세요.

역할 권장사항 예시

다음 예시는 사용자에 대한 권장사항 유형을 보여줍니다.

기존 역할 취소

사용자 my-user@example.com에게 프로젝트에 대한 브라우저 역할이 부여되었습니다. 브라우저 역할에는 사용자가 프로젝트의 리소스를 볼 수 있게 하는 6개의 권한이 있습니다. 그러나 지난 90일 동안 my-user@example.com은 어떤 리소스도 보지 못했습니다.

따라서 IAM 추천자는 my-user@example.com에서 브라우저 역할을 취소할 것을 제안하는 역할 권장사항을 생성합니다.

콘솔

gcloud

{
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/86c14538-dcfd-4326-afe5-ee8ac921e06a"
    }
  ],
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "remove",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/browser"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project"
          }
        ]
      }
    ],
    "overview": {
      "member": "user:my-user@example.com",
      "removedRole": "roles/browser",
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012"
    }
  },
  "description": "This role has not been used during the observation window.",
  "etag": "\"9fc3241da8bfab51\"",
  "lastRefreshTime": "2022-05-20T07:00:00Z",
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fe512038-5455-49g1-8f9c-752e31c8c154",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 6
      }
    }
  },
  "priority": "P4",
  "recommenderSubtype": "REMOVE_ROLE",
  "stateInfo": {
    "state": "ACTIVE"
  }
}

REST

{
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fe512038-5455-49g1-8f9c-752e31c8c154",
  "description": "This role has not been used during the observation window.",
  "lastRefreshTime": "2022-05-20T07:00:00Z",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 6
      }
    }
  },
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "remove",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/browser"
            }
          }
        ]
      }
    ],
    "overview": {
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
      "member": "user:my-user@example.com",
      "removedRole": "roles/browser"
    }
  },
  "stateInfo": {
    "state": "ACTIVE"
  },
  "etag": "\"9fc3241da8bfab51\"",
  "recommenderSubtype": "REMOVE_ROLE",
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/86c14538-dcfd-4326-afe5-ee8ac921e06a"
    }
  ],
  "priority": "P4"
}

기존 역할 바꾸기

서비스 계정에 프로젝트에 대한 편집자 역할(roles/editor)이 부여되었습니다. 이 기본 역할에는 3,000개가 넘는 권한이 포함되며 프로젝트에 대한 광범위한 액세스 권한을 부여합니다. 그러나 지난 90일 동안 서비스 계정은 이러한 권한 중 일부만 사용했습니다.

따라서 IAM 추천자는 편집자 역할을 취소하고 2개의 다른 역할 조합으로 대체하여 수천 개의 초과 권한을 삭제할 것을 제안하는 역할 권장사항을 생성합니다.

콘솔

gcloud

{
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/3d4ef3d6-bdf0-4330-975d-c65cb929c44d"
    }
  ],
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "add",
            "path": "/iamPolicy/bindings/*/members/-",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/iam.serviceAccountUser"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "value": "user:my-user@example.com"
          },
          {
            "action": "add",
            "path": "/iamPolicy/bindings/*/members/-",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/storage.objectAdmin"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "value": "user:my-user@example.com"
          },
          {
            "action": "remove",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/editor"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project"
          }
        ]
      }
    ],
    "overview": {
      "addedRoles": [
        "roles/iam.serviceAccountUser",
        "roles/storage.objectAdmin"
      ],
      "member": "user:my-user@example.com",
      "minimumObservationPeriodInDays": "0",
      "removedRole": "roles/editor",
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012"
    }
  },
  "description": "Replace the current role with smaller predefined roles to cover the permissions needed.",
  "etag": "\"0da9a354c2a83d96\"",
  "lastRefreshTime": "2022-06-22T07:00:00Z",
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/4637db3d-dba5-45eb-95ac-b4ee4b4cd14e",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 2998
      }
    }
  },
  "priority": "P2",
  "recommenderSubtype": "REPLACE_ROLE",
  "stateInfo": {
    "state": "ACTIVE"
  }
}

REST

{
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/4637db3d-dba5-45eb-95ac-b4ee4b4cd14e",
  "description": "Replace the current role with smaller predefined roles to cover the permissions needed.",
  "lastRefreshTime": "2022-06-22T07:00:00Z",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 2998
      }
    }
  },
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "add",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/-",
            "value": "user:my-user@example.com",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/iam.serviceAccountOwner"
            }
          },
          {
            "action": "add",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/-",
            "value": "user:my-user@example.com",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/storage.objectAdmin"
            }
          },
          {
            "action": "remove",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/editor"
            }
          }
        ]
      }
    ],
    "overview": {
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
      "member": "user:my-user@example.com",
      "removedRole": "roles/editor",
      "addedRoles": [
        "roles/iam.serviceAccountUser",
        "roles/storage.objectAdmin"
      ],
      "minimumObservationPeriodInDays": "0"
    }
  },
  "stateInfo": {
    "state": "ACTIVE"
  },
  "etag": "\"0da9a354c2a83d96\"",
  "recommenderSubtype": "REPLACE_ROLE",
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/3d4ef3d6-bdf0-4330-975d-c65cb929c44d"
    }
  ],
  "priority": "P2"
}

맞춤 역할 만들기

사용자 my-user@example.com에게 프로젝트에 대한 Cloud Trace 관리자 역할(roles/cloudtrace.admin)이 부여되었습니다. 이 역할에는 10개가 넘는 권한이 포함되어 있지만 정책 통계는 지난 90일 동안 my-user@example.com이 이러한 권한 중 4개만 사용했음을 나타냅니다.

따라서 IAM 추천자는 my-user@example.com이 실제로 사용한 권한만 포함하는 커스텀 역할을 만들도록 제안하는 역할 권장사항을 생성합니다.

콘솔

gcloud

REPLACE_ROLE_CUSTOMIZABLE 하위유형은 IAM 추천자가 사용된 권한으로 커스텀 역할을 만드는 것을 권장함을 나타냅니다. 사용된 권한을 확인하려면 관련 정책 통계를 가져옵니다.

{
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/2799dc04-b12e-4cf6-86aa-d81907d31f58"
    }
  ],
  "associatedResourceNames": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "add",
            "path": "/iamPolicy/bindings/*/members/-",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/cloudtrace.user"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "value": "user:my-user@example.com"
          },
          {
            "action": "remove",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/cloudtrace.admin"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project"
          }
        ]
      }
    ],
    "overview": {
      "minimumObservationPeriodInDays": "0"
    }
  },
  "description": "Replace the current role with a smaller role to cover the permissions needed.",
  "etag": "\"c7f57a4725d32d66\"",
  "lastRefreshTime": "2022-06-22T07:00:00Z",
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/ba1fc977-fddd-3856-a829-f69649ae8075",
  "originalContent": {},
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {},
      "revokedIamPermissionsCount": 1
    }
  },
  "priority": "P4",
  "recommenderSubtype": "REPLACE_ROLE_CUSTOMIZABLE",
  "stateInfo": {
    "state": "ACTIVE"
  },
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ]
}

REST

REPLACE_ROLE_CUSTOMIZABLE 하위유형은 IAM 추천자가 사용된 권한으로 커스텀 역할을 만드는 것을 권장함을 나타냅니다. 사용된 권한을 확인하려면 관련 정책 통계를 가져옵니다.

{
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/ba1fc977-fddd-3856-a829-f69649ae8075",
  "description": "Replace the current role with a smaller role to cover the permissions needed.",
  "lastRefreshTime": "2022-06-22T07:00:00Z",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 1
      }
    }
  },
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "add",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/-",
            "value": "user:my-user@example.com",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/cloudtrace.user"
            }
          },
          {
            "action": "remove",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/cloudtrace.admin"
            }
          }
        ]
      }
    ],
    "overview": {
      "minimumObservationPeriodInDays": "0"
    }
  },
  "stateInfo": {
    "state": "ACTIVE"
  },
  "etag": "\"c7f57a4725d32d66\"",
  "recommenderSubtype": "REPLACE_ROLE_CUSTOMIZABLE",
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/2799dc04-b12e-4cf6-86aa-d81907d31f58"
    }
  ],
  "priority": "P4"
}

역할 권장사항은 기존 역할을 Cloud Trace 사용자 역할(roles/cloudtrace.user)로 대체하는 다른 옵션도 제안합니다. 이 사전 정의된 역할에는 Cloud Trace 관리자 역할보다 약간 적은 권한이 포함됩니다.

머신러닝에서 제안하는 권한으로 역할 대체

서비스 계정에 프로젝트에 대한 편집자 역할(roles/editor)이 부여되었습니다. 이 기본 역할에는 3,000개가 넘는 권한이 포함되며 프로젝트에 대한 광범위한 액세스 권한을 부여합니다. 그러나 정책 통계에서는 서비스 계정이 지난 90일 동안 10개 미만의 권한을 사용한 것으로 나타납니다.

정책 통계는 향후 서비스 계정에 필요할 수 있는 몇 가지 권한을 강조표시합니다. IAM 추천자는 머신러닝을 사용하여 이러한 권한을 식별했습니다.

IAM 추천자는 편집자 역할을 취소하고 스토리지 객체 관리자 역할(roles/storage.objectAdmin)로 대체할 것을 제안하는 역할 권장사항을 생성합니다. 스토리지 객체 관리자 역할은 Cloud Storage 버킷에서 객체를 관리할 수 있는 전체 권한을 부여합니다. 이렇게 변경하면 수천 개의 초과 권한이 삭제되지만, 서비스 계정에서 사용한 권한 및 향후 서비스 계정에 필요할 수 있는 권한도 모두 포함됩니다.

콘솔

IAM 추천자는 권한 사용이 아닌 IAM 추천자의 머신러닝을 기반으로 추가된 권한을 식별하도록 머신러닝 아이콘을 사용합니다. 이 예시에서는 머신러닝을 기반으로 resourcemanager.projects.get 권한이 추천되었습니다.

gcloud

권한 사용이 아닌 IAM 추천자의 머신러닝을 기반으로 추가된 권한은 권장사항 자체에 나열되지 않습니다. 대신 권장사항과 연결된 정책 통계에 나열됩니다. 모든 ML 기반 권한은 통계의 inferredPermissions 필드에 나열됩니다. 이 예시에서는 머신러닝을 기반으로 resourcemanager.projects.get 권한이 추천되었습니다.

associatedRecommendations:
- recommendation: projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/0573b702-96a5-4622-a916-c762e7b0731f
category: SECURITY
content:
  condition:
    description: ''
    expression: ''
    location: ''
    title: ''
  currentTotalPermissionsCount: '5069'
  exercisedPermissions:
  - permission: storage.objects.create
  - permission: storage.objects.delete
  - permission: storage.objects.get
  - permission: storage.objects.list
  inferredPermissions:
  - permission: resourcemanager.projects.get
  member: serviceAccount:my-service-account@my-project.iam.gserviceaccount.com
  role: roles/editor
description: 4 of the permissions in this role binding were used in the past 90 days.
etag: '"d3cdec23cc712bd0"'
insightSubtype: PERMISSIONS_USAGE
lastRefreshTime: '2020-07-11T07:00:00Z'
name: projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/0d3ce433-f067-4e78-b6ae-03d7d1f6f040
observationPeriod: 7776000s
stateInfo:
  state: ACTIVE
targetResources:
- //cloudresourcemanager.googleapis.com/projects/123456789012
severity: HIGH

정책 통계를 가져오는 방법은 정책 통계 검토를 참조하세요.

REST

권한 사용이 아닌 IAM 추천자의 머신러닝을 기반으로 추가된 권한은 권장사항 자체에 나열되지 않습니다. 대신 권장사항과 연결된 정책 통계에 나열됩니다. 모든 ML 기반 권한은 통계의 inferredPermissions 필드에 나열됩니다. 이 예시에서는 머신러닝을 기반으로 resourcemanager.projects.get 권한이 추천되었습니다.

{
  "name": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/07841f74-02ce-4de8-bbe6-fc4eabb68568",
  "description": "4 of the permissions in this role binding were used in the past 90 days.",
  "content": {
    "role": "roles/editor",
    "member": "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com",
    "condition": {
      "expression": "",
      "title": "",
      "description": "",
      "location": ""
    },
    "exercisedPermissions": [
      {
        "permission": "storage.objects.create"
      },
      {
        "permission": "storage.objects.delete"
      },
      {
        "permission": "storage.objects.get"
      },
      {
        "permission": "storage.objects.list"
      }
    ],
    "inferredPermissions": [
      {
        "permission": "resourcemanager.projects.get"
      }
    ],
    "currentTotalPermissionsCount": "5069"
  },
  "lastRefreshTime": "2020-07-12T07:00:00Z",
  "observationPeriod": "7776000s",
  "stateInfo": {
    "state": "ACTIVE"
  },
  "category": "SECURITY",
  "associatedRecommendations": [
    {
      "recommendation": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/b1932220-867d-43d1-bd74-fb95876ab656"
    }
  ],
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "insightSubtype": "PERMISSIONS_USAGE",
  "etag": "\"d3cdec23cc712bd0\"",
  "severity": "HIGH"
}

정책 통계를 가져오는 방법은 정책 통계 검토를 참조하세요.

다음 단계