통계 관리

추천자는 권장사항 제공 외에 머신러닝(ML)을 사용하여 자세한 통계를 제공합니다. 통계는 리소스 사용량에서 눈에 띄는 패턴을 강조표시한 발견 항목입니다. 예를 들어 프로젝트에서 권한 사용에 대한 추가 정보를 수집하거나 사용하지 않는 서비스 계정을 식별할 수 있습니다. 통계는 권장사항의 증거를 제공하므로 일부 통계는 권장사항으로도 연결됩니다.

ID 및 액세스 관리(IAM)는 다음과 같은 통계 유형을 제공합니다.

  • 정책 통계: 프로젝트 내 권한 사용에 대한 ML 기반 발견 항목입니다.
  • 서비스 계정 통계: 프로젝트의 서비스 계정에 대한 발견 항목(지난 90일 동안 사용되지 않은 서비스 계정 등)입니다.

시작하기 전에

필수 권한

통계를 사용하는 데 필요한 권한은 수행하려는 작업에 따라 다릅니다.

통계 보기 권한

통계를 보려면 다음 권한이 포함된 역할이 필요합니다. 여기서 insight-typeiamPolicyInsights 또는 iamServiceAccountInsights입니다.

  • recommender.insight-type.get
  • recommender.insight-type.list

최소 권한 원칙을 준수하면서 이러한 권한을 얻으려면 관리자에게 다음 역할 중 하나를 부여해 달라고 요청하세요.

  • IAM 추천자 뷰어(roles/recommender.iamViewer)
  • IAM 보안 검토자(roles/iam.securityReviewer)

또는 관리자가 필요한 권한(커스텀 역할 또는 더 많은 권한이 있는 사전 정의된 역할 등)을 포함하는 다른 역할을 부여할 수 있습니다.

통계 수정 권한

통계를 수정하려면 다음 권한이 포함된 역할이 필요합니다. 여기서 insight-typeiamPolicyInsights 또는 iamServiceAccountInsights입니다.

  • recommender.insight-type.get
  • recommender.insight-type.list
  • recommender.insight-type.update

최소 권한 원칙을 준수하면서 이러한 권한을 얻으려면 관리자에게 IAM 추천자 관리자 역할(roles/recommender.iamAdmin)을 부여해 달라고 요청하세요.

또는 관리자가 필요한 권한(커스텀 역할 또는 더 많은 권한이 있는 사전 정의된 역할 등)을 포함하는 다른 역할을 부여할 수 있습니다.

통계 나열

프로젝트에 대한 특정 유형의 모든 통계를 나열하려면 다음 메서드 중 하나를 사용합니다.

gcloud

gcloud recommender insights list 명령어를 사용하여 프로젝트에 대한 특정 유형의 모든 통계를 봅니다.

insight-type-id를 나열하려는 통계 유형으로 바꿉니다. 정책 통계의 경우 google.iam.policy.Insight를 사용하고 서비스 계정 통계의 경우 google.iam.serviceAccount.Insight를 사용합니다.

gcloud recommender insights list --insight-type=insight-type-id \
    --location=global

프로젝트에 대한 특정 유형의 모든 통계가 출력에 나열됩니다. 예를 들어 프로젝트에 대한 모든 정책 통계를 나열하면 다음과 같은 결과가 출력됩니다.

INSIGHT_ID                            LOCATION  INSIGHT_TYPE               CATEGORY  INSIGHT_STATE  LAST_REFRESH_TIME
07841f74-02ce-4de8-bbe6-fc4eabb68568  global    google.iam.policy.Insight  SECURITY  ACCEPTED       2020-07-12T07:00:00Z
0d3ce433-f067-4e78-b6ae-03d7d1f6f040  global    google.iam.policy.Insight  SECURITY  ACTIVE         2020-07-13T07:00:00Z
0e2cc488-38fb-4b9b-942c-cfe06a0ab88f  global    google.iam.policy.Insight  SECURITY  ACTIVE         2020-07-13T07:00:00Z
12b557be-d48f-49cf-a0b0-b3b73a178edf  global    google.iam.policy.Insight  SECURITY  ACTIVE         2020-07-13T07:00:00Z
279ef748-408f-44db-9a4a-1ff8865b9839  global    google.iam.policy.Insight  SECURITY  ACTIVE         2020-07-13T07:00:00Z
29a4553d-9ffb-4508-9f13-77f40fc4e8b6  global    google.iam.policy.Insight  SECURITY  ACTIVE         2020-07-13T07:00:00Z
2a00a91a-3e37-4dca-81f7-fb607d18053f  global    google.iam.policy.Insight  SECURITY  ACTIVE         2020-07-13T07:00:00Z
2baea818-df89-4ab3-8a48-0e752459d816  global    google.iam.policy.Insight  SECURITY  ACTIVE         2020-07-13T07:00:00Z
4a59da9d-cde8-46cc-9c68-6980487175fb  global    google.iam.policy.Insight  SECURITY  ACTIVE         2020-07-13T07:00:00Z
78fee8d9-c25c-4070-9f1b-ae5e4a4a164b  global    google.iam.policy.Insight  SECURITY  ACTIVE         2020-07-13T07:00:00Z

REST

Recommender API의 insights.list 메서드는 프로젝트의 특정 유형 통계를 모두 나열합니다.

아래의 요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • project-id: Google Cloud 프로젝트 ID입니다.
  • insight-type-id: 나열하려는 통계의 유형입니다. 정책 통계의 경우 google.iam.policy.Insight를 사용하고 서비스 계정 통계의 경우 google.iam.serviceAccount.Insight를 사용합니다.

HTTP 메서드 및 URL:

GET https://recommender.googleapis.com/v1/projects/project-id/locations/global/insightTypes/insight-type-id/insights

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

프로젝트에 대한 특정 유형의 모든 통계가 나열됩니다. 예를 들어 프로젝트의 모든 정책 통계가 나열될 수 있습니다.

{
  "insights": [
    {
      "name": "projects/1234567890/locations/global/insightTypes/google.iam.policy.Insight/insights/07841f74-02ce-4de8-bbe6-fc4eabb68568",
      "description": "0 permission checks were authorized by this policy binding tuple.",
      "content": {
        "role": "roles/viewer",
        "member": "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com",
        "condition": {
          "expression": "",
          "title": "",
          "description": "",
          "location": ""
        },
        "exercisedPermissions": [],
        "inferredPermissions": []
      },
      "lastRefreshTime": "2020-07-12T07:00:00Z",
      "observationPeriod": "7776000s",
      "stateInfo": {
        "state": "ACTIVE"
      },
      "category": "SECURITY",
      "associatedRecommendations": [
        {
          "recommendation": "projects/1234567890/locations/global/recommenders/google.iam.policy.Recommender/recommendations/b1932220-867d-43d1-bd74-fb95876ab656"
        }
      ],
      "targetResources": [
        "//cloudresourcemanager.googleapis.com/projects/1234567890"
      ],
      "insightSubtype": "PERMISSIONS_USAGE",
      "etag": "\"b153ab487e4ae100\""
    },
    {
      "name": "projects/1234567890/locations/global/insightTypes/google.iam.policy.Insight/insights/f4292f55-105b-4744-9dc3-fcacf59685bb",
      "description": "4 permission checks were authorized by this policy binding tuple.",
      "content": {
        "role": "roles/owner",
        "member": "serviceAccount:my-service-account2@my-project.iam.gserviceaccount.com",
        "condition": {
          "expression": "",
          "title": "",
          "description": "",
          "location": ""
        },
        "exercisedPermissions": [
          {
            "permission": "iam.roles.create"
          },
          {
            "permission": "iam.roles.delete"
          },
          {
            "permission": "iam.roles.list"
          },
          {
            "permission": "iam.roles.update"
          }
        ],
        "inferredPermissions": []
      },
      "lastRefreshTime": "2020-07-12T07:00:00Z",
      "observationPeriod": "7776000s",
      "stateInfo": {
        "state": "ACTIVE"
      },
      "category": "SECURITY",
      "associatedRecommendations": [
        {
          "recommendation": "projects/1234567890/locations/global/recommenders/google.iam.policy.Recommender/recommendations/6ab16c1d-edce-45e5-8d82-570fdd49892a"
        }
      ],
      "targetResources": [
        "//cloudresourcemanager.googleapis.com/projects/1234567890"
      ],
      "insightSubtype": "PERMISSIONS_USAGE",
      "etag": "\"49bb705553338fc3\""
    }
  ]
}

통계 구성요소에 대한 자세한 내용은 이 페이지의 통계 검토를 참조하세요.

단일 통계 가져오기

통계 설명, 상태, 관련 권장사항을 포함하여 단일 통계에 대한 자세한 내용을 보려면 다음 메서드 중 하나를 사용하세요.

gcloud

통계 ID와 함께 gcloud recommender insights describe 명령어를 사용하여 단일 IAM 통계에 대한 정보를 확인합니다.

이 샘플을 사용하기 전에 다음과 같이 바꿉니다.

  • insight-id: 보려는 통계의 ID입니다. ID를 찾으려면 프로젝트의 통계를 나열합니다.

  • insight-type-id: 보려는 통계 유형입니다. 정책 통계의 경우 google.iam.policy.Insight를 사용하고 서비스 계정 통계의 경우 google.iam.serviceAccount.Insight를 사용합니다.

gcloud recommender insights describe insight-id \
    --insight-type=insight-type-id --location=global

출력에 통계가 자세히 표시됩니다. 예를 들어 다음 통계는 my-service-account@my-project.iam.gserviceaccount.com이 지난 90일 동안 뷰어 역할(roles/viewer)의 권한을 사용하지 않았음을 나타냅니다.

associatedRecommendations:
- recommendation: projects/1234567890/locations/global/recommenders/google.iam.policy.Recommender/recommendations/0573b702-96a5-4622-a916-c762e7b0731f
category: SECURITY
content:
  condition:
    description: ''
    expression: ''
    location: ''
    title: ''
  exercisedPermissions: []
  inferredPermissions: []
  member: serviceAccount:my-service-account@my-project.iam.gserviceaccount.com
  role: roles/viewer
description: 0 permission checks were authorized by this policy binding tuple.
etag: '"d3cdec23cc712bd0"'
insightSubtype: PERMISSIONS_USAGE
lastRefreshTime: '2020-07-11T07:00:00Z'
name: projects/1234567890/locations/global/insightTypes/google.iam.policy.Insight/insights/0d3ce433-f067-4e78-b6ae-03d7d1f6f040
observationPeriod: 7776000s
stateInfo:
  state: ACTIVE
targetResources:
- //cloudresourcemanager.googleapis.com/projects/1234567890

통계 구성요소에 대한 자세한 내용은 이 페이지의 통계 검토를 참조하세요.

REST

Recommender API의 insights.get 메서드는 단일 통계를 가져옵니다.

아래의 요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • project-id: Google Cloud 프로젝트 ID입니다.
  • insight-type-id: 보려는 통계의 유형입니다. 정책 통계의 경우 google.iam.policy.Insight를 사용하고 서비스 계정 통계의 경우 google.iam.serviceAccount.Insight를 사용합니다.
  • insight-id: 보려는 통계의 ID. ID를 찾으려면 프로젝트의 통계 목록을 나열합니다. 통계 ID는 통계의 name 필드에서 insights/ 다음에 오는 모든 문자입니다.

HTTP 메서드 및 URL:

GET https://recommender.googleapis.com/v1/projects/project-id/locations/global/insightTypes/insight-type-id/insights/insight-id

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

응답에 통계가 포함됩니다. 예를 들면 다음과 같습니다.

{
  "name": "projects/1234567890/locations/global/insightTypes/google.iam.policy.Insight/insights/07841f74-02ce-4de8-bbe6-fc4eabb68568",
  "description": "0 permission checks were authorized by this policy binding tuple.",
  "content": {
    "role": "roles/viewer",
    "member": "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com",
    "condition": {
      "expression": "",
      "title": "",
      "description": "",
      "location": ""
    },
    "exercisedPermissions": [],
    "inferredPermissions": []
  },
  "lastRefreshTime": "2020-07-12T07:00:00Z",
  "observationPeriod": "7776000s",
  "stateInfo": {
    "state": "ACTIVE"
  },
  "category": "SECURITY",
  "associatedRecommendations": [
    {
      "recommendation": "projects/1234567890/locations/global/recommenders/google.iam.policy.Recommender/recommendations/b1932220-867d-43d1-bd74-fb95876ab656"
    }
  ],
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/1234567890"
  ],
  "insightSubtype": "PERMISSIONS_USAGE",
  "etag": "\"b153ab487e4ae100\""
}

통계 구성요소에 대한 자세한 내용은 이 페이지의 통계 검토를 참조하세요.

통계 검토

통계는 통계 유형과 통계 하위 유형으로 나뉩니다. 통계 유형으로 어느 리소스 유형에 대한 통계인지 알 수 있습니다. 통계 하위 유형으로 통계에 어느 종류의 정보가 포함되는지 알 수 있습니다.

IAM에서 제공하는 통계 유형과 하위 유형은 다음과 같습니다.

통계 유형 통계 하위유형
정책 통계 PERMISSION_USAGE: 프로젝트 내 권한 사용에 대한 ML 기반 발견 항목입니다.
서비스 계정 통계 SERVICE_ACCOUNT_USAGE: 지난 90일 동안 프로젝트에서 사용되지 않은 서비스 계정에 대한 발견 항목입니다.

통계의 내용은 하위유형에 따라 결정됩니다. 앞의 표에 나열된 통계 하위유형에는 다음과 같은 구성요소가 있습니다.

  • associatedRecommendations: 통계와 연결된 모든 권장사항의 식별자입니다. 통계와 연결된 권장사항이 없으면 이 필드는 비어 있습니다.
  • category: PERMISSION_USAGESERVICE_ACCOUNT_USAGE 통계의 카테고리는 항상 SECURITY입니다.
  • content: content 필드의 정보는 통계 하위 유형에 따라 결정됩니다.

    통계 하위유형 콘텐츠
    PERMISSION_USAGE

    특정 역할에 대한 구성원의 권한 사용 보고를 보고합니다. 이 필드에는 다음 구성요소가 포함됩니다.

    • member: 권한 사용이 분석된 구성원입니다.
    • role: 권한 사용이 분석된 역할입니다.
    • condition: 구성원에게 역할을 부여하는 binding에 연결된 모든 조건입니다. 조건이 없는 경우 이 필드에는 빈 조건이 포함됩니다.
    • exercisedPermissions: 구성원이 관찰 기간 동안 사용한 역할의 권한입니다.
    • inferredPermissions: IAM 추천자가 ML을 통해 사용된 권한을 기반으로 구성원에게 필요할 것으로 판단한 역할의 권한입니다.
    SERVICE_ACCOUNT_USAGE

    서비스 계정이 마지막으로 인증된 시간을 보고합니다. 이 필드에는 다음 구성요소가 포함됩니다.

    • serviceAccountId: 서비스 계정의 고유 숫자 ID입니다.
    • email: 서비스 계정의 이메일 주소입니다.
    • lastAuthenticatedTime: 서비스 계정이 인증된 가장 최근 시간입니다. 서비스 계정에 기록된 인증이 없으면 이 필드가 포함되지 않습니다.
  • description: 사람이 읽을 수 있는 통계 요약입니다.

  • etag: 통계의 현재 상태를 식별하는 고유 지문입니다. 통계가 변경될 때마다 새 etag 값이 할당됩니다.

    통계 상태를 변경하려면 기존 통계의 etag를 제공해야 합니다. etag를 사용하면 마지막으로 검색한 후 통계가 변경되지 않은 경우에만 작업이 수행됩니다.

  • insightSubtype: 통계 하위 유형으로, PERMISSION_USAGE 또는 SERVICE_ACCOUNT_USAGE입니다.

  • lastRefreshTime: 통계가 마지막으로 갱신된 날짜로, 통계를 생성하는 데 사용된 데이터의 최신 상태를 나타냅니다.

  • name: 다음 형식의 통계 이름입니다.

    projects/project-id/locations/global/insightTypes/insight-type-id/insights/insight-id

    자리표시자의 값은 다음과 같습니다.

    • project-id: 통계가 생성된 프로젝트의 ID입니다.
    • insight-type-id: 통계의 유형입니다. 정책 통계의 유형은 google.iam.policy.Insight입니다. 서비스 계정 통계의 유형은 google.iam.serviceAccount.Insight입니다.
    • insight-id: 통계의 고유 ID입니다.
  • observationPeriod: 통계까지 이어지는 기간입니다. 통계를 생성하는 데 사용되는 소스 데이터는 lastRefreshTime에 종료되며 lastRefreshTime에서 observationPeriod를 뺀 시간에 시작합니다.

  • stateInfo: 통계는 제안된 후 여러 상태로 전환됩니다.

    • ACTIVE: 통계가 생성되지만 작업이 수행되지 않았거나 통계의 상태를 업데이트하지 않고 작업이 수행되었습니다. 활성 통계는 기본 데이터가 변경되면 업데이트됩니다.
    • ACCEPTED: 통계를 기반으로 몇몇 작업이 실행되었습니다. 관련 권장사항이 CLAIMED, SUCCEEDED 또는 FAILED로 표시되었거나 통계가 직접 수락되면 통계가 수락됩니다. 통계 상태가 ACCEPTED일 때는 통계 내용을 변경할 수 없습니다. 수락된 통계는 수락된 날로부터 90일 동안 보관됩니다.
  • targetResources: 통계의 대상인 Google Cloud 프로젝트의 전체 리소스 이름입니다. 예를 들면 //cloudresourcemanager.googleapis.com/projects/1234567890입니다.

통계를 ACCEPTED로 표시

활성 통계를 기반으로 작업을 수행하는 경우 통계를 ACCEPTED로 표시할 수 있습니다. ACCEPTED 상태는 이 통계를 기반으로 작업을 수행했음을 추천자 API에 알려주므로 권장사항을 개선하는 데 도움이 됩니다.

허용된 통계는 ACCEPTED로 표시된 후 90일 동안 보관됩니다.

gcloud

통계 ID와 함께 gcloud recommender insights mark-accepted 명령어를 사용하여 통계를 ACCEPTED로 표시합니다.

샘플 명령어를 사용하기 전에 다음 값을 바꿉니다.

  • insight-id: ACCEPTED로 표시할 통계의 ID입니다. ID를 찾으려면 프로젝트의 통계를 나열합니다.

  • insight-type-id: ACCEPTED로 표시하려는 통계 유형입니다. 정책 통계의 경우 google.iam.policy.Insight를 사용하고 서비스 계정 통계의 경우 google.iam.serviceAccount.Insight를 사용합니다.

  • etag: 통계 버전의 식별자입니다. etag를 가져오려면 다음 안내를 따르세요.

    1. gcloud recommender insights describe 명령어를 사용하여 통계를 가져옵니다.
    2. 출력에서 etag 값(큰따옴표 포함)을 찾아 복사합니다. 예를 들면 "d3cdec23cc712bd0"입니다.
gcloud recommender insights mark-accepted insight-id \
    --insight-type=insight-type-id --location=global \
    --etag=etag

출력에 ACCEPTED 상태와 함께 통계가 표시됩니다.

associatedRecommendations:
- recommendation: projects/1234567890/locations/global/recommenders/google.iam.policy.Recommender/recommendations/0573b702-96a5-4622-a916-c762e7b0731f
category: SECURITY
content:
  condition:
    description: ''
    expression: ''
    location: ''
    title: ''
  exercisedPermissions: []
  inferredPermissions: []
  member: serviceAccount:my-service-account@my-project.iam.gserviceaccount.com
  role: roles/viewer
description: 0 permission checks were authorized by this policy binding tuple.
etag: '"d3cdec23cc712bd0"'
insightSubtype: PERMISSIONS_USAGE
lastRefreshTime: '2020-07-11T07:00:00Z'
name: projects/1234567890/locations/global/insightTypes/google.iam.policy.Insight/insights/0d3ce433-f067-4e78-b6ae-03d7d1f6f040
observationPeriod: 7776000s
stateInfo:
  state: ACCEPTED
targetResources:
- //cloudresourcemanager.googleapis.com/projects/1234567890

통계의 상태 정보에 대한 자세한 내용은 이 페이지의 통계 검토를 참조하세요.

REST

Recommender API의 insights.markAccepted 메서드는 통계를 ACCEPTED로 표시합니다.

아래의 요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • project-id: Google Cloud 프로젝트 ID입니다.
  • insight-type-id: ACCEPTED로 표시하려는 통계 유형입니다. 정책 통계의 경우 google.iam.policy.Insight를 사용하고 서비스 계정 통계의 경우 google.iam.serviceAccount.Insight를 사용합니다.
  • insight-id: ACCEPTED로 표시할 통계의 ID. ID를 찾으려면 프로젝트의 통계 목록을 나열합니다. 통계 ID는 통계의 name 필드에서 insights/ 다음에 오는 모든 문자입니다.
  • etag: 통계 버전의 식별자입니다. etag를 가져오려면 다음을 실행합니다.
    1. insights.get 메서드를 사용하여 통계를 가져옵니다.
    2. 응답에서 etag 값을 찾아서 복사합니다.

HTTP 메서드 및 URL:

POST https://recommender.googleapis.com/v1/projects/project-id/locations/global/insightTypes/insight-type-id/insights/insight-id:markAccepted

JSON 요청 본문:

{
  "etag": "etag"
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

응답에 통계가 포함됩니다. 이제 상태가 ACCEPTED입니다.

{
  "name": "projects/1234567890/locations/global/insightTypes/google.iam.policy.Insight/insights/07841f74-02ce-4de8-bbe6-fc4eabb68568",
  "description": "0 permission checks were authorized by this policy binding tuple.",
  "content": {
    "role": "roles/viewer",
    "member": "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com",
    "condition": {
      "expression": "",
      "title": "",
      "description": "",
      "location": ""
    },
    "exercisedPermissions": [],
    "inferredPermissions": []
  },
  "lastRefreshTime": "2020-07-12T07:00:00Z",
  "observationPeriod": "7776000s",
  "stateInfo": {
    "state": "ACCEPTED"
    },
  "category": "SECURITY",
  "associatedRecommendations": [
    {
      "recommendation": "projects/1234567890/locations/global/recommenders/google.iam.policy.Recommender/recommendations/b1932220-867d-43d1-bd74-fb95876ab656"
    }
  ],
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/1234567890"
  ],
  "insightSubtype": "PERMISSIONS_USAGE",
  "etag": "\"b153ab487e4ae100\""
}

통계의 상태 정보에 대한 자세한 내용은 이 페이지의 통계 검토를 참조하세요.

다음 단계