측면 이동 통계 관리

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

IAM은 여러 가지 유형의 통계를 제공합니다. 이 페이지에서는 측면 이동 통계(google.iam.policy.LateralMovementInsight)를 관리하는 방법을 보여줍니다. 이 통계는 한 프로젝트의 서비스 계정이 다른 프로젝트의 서비스 계정을 가장하도록 허용하는 역할을 식별합니다. 측면 이동 통계에 대한 자세한 내용은 측면 이동 통계 생성 방법을 참조하세요.

시작하기 전에

필수 권한

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

통계 보기 권한

측면 이동 통계를 보려면 다음 권한이 포함된 역할이 필요합니다.

  • recommender.iamPolicyLateralMovementInsights.get
  • recommender.iamPolicyLateralMovementInsights.list

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

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

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

통계 수정 권한

측면 이동 통계를 수정하려면 다음 권한이 포함된 역할이 필요합니다.

  • recommender.iamPolicyLateralMovementInsights.get
  • recommender.iamPolicyLateralMovementInsights.list
  • recommender.iamPolicyLateralMovementInsights.update

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

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

측면 이동 통계 나열

프로젝트의 모든 측면 이동 통계를 나열하려면 다음 메서드 중 하나를 사용합니다.

gcloud

gcloud recommender insights list 명령어를 사용하여 프로젝트의 모든 측면 이동 통계를 확인합니다.

명령어를 실행하기 전에 다음 값을 바꿉니다.

  • PROJECT_ID: 통계를 나열하려는 프로젝트의 ID입니다. 이 목록에는 프로젝트에 포함된 서비스 계정 수준 역할 binding에 대한 측면 이동 통계도 포함됩니다.
gcloud recommender insights list --insight-type=google.iam.policy.LateralMovementInsight \
    --project=PROJECT_ID \
    --location=global

출력에 프로젝트의 모든 측면 이동 통계가 나열됩니다. 예를 들면 다음과 같습니다.

INSIGHT_ID                            LOCATION  INSIGHT_TYPE                              CATEGORY  INSIGHT_STATE  LAST_REFRESH_TIME
0bd428af-d16c-4ac0-83eb-826dbce8c9bb  global    google.iam.policy.LateralMovementInsight  SECURITY  ACTIVE         2021-03-13T08:00:00Z
13088eec-9573-415f-81a7-46e1a260e860  global    google.iam.policy.LateralMovementInsight  SECURITY  ACTIVE         2021-03-13T08:00:00Z
1343077a-c1fe-409f-a7d5-3d01349e7651  global    google.iam.policy.LateralMovementInsight  SECURITY  ACTIVE         2021-03-13T08:00:00Z
31cc14c0-8c9d-4713-a6e5-de6976b0d778  global    google.iam.policy.LateralMovementInsight  SECURITY  ACTIVE         2021-03-13T08:00:00Z
4f0fd42b-5637-47af-9200-e0e55adbf321  global    google.iam.policy.LateralMovementInsight  SECURITY  ACTIVE         2021-03-13T08:00:00Z

REST

Recommender API의 insights.list 메서드는 프로젝트의 모든 측면 이동 통계를 나열합니다.

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

  • PROJECT_ID: 통계를 나열하려는 프로젝트의 ID입니다.

HTTP 메서드 및 URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/global/insightTypes/google.iam.policy.LateralMovementInsight/insights

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

응답에 프로젝트의 모든 측면 이동 통계가 나열됩니다. 예를 들면 다음과 같습니다.

{
  "insights": [
    {
      "name": "projects/123456789012/locations/global/insightTypes/google.iam.policy.LateralMovementInsight/insights/13088eec-9573-415f-81a7-46e1a260e860",
      "description": "Service account service-account@another-project.iam.gserviceaccount.com from another project can impersonate 2 service account(s) under this project.",
      "content": {
        "impersonator": {
          "serviceAccount": "service-account@another-project.iam.gserviceaccount.com",
          "serviceAccountOwner": "//cloudresourcemanager.googleapis.com/projects/987654321098",
          "isGoogleManaged": false
        },
        "targetServiceAccounts": [
          "target-service-account-1@this-project.iam.gserviceaccount.com",
          "target-service-account-2@this-project.iam.gserviceaccount.com"
        ],
        "impersonationPolicy": {
          "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
          "role": "roles/editor",
          "member": "serviceAccount:service-account@another-project.iam.gserviceaccount.com",
          "condition": {
            "expression": "",
            "title": "",
            "description": "",
            "location": ""
          }
        },
        "impersonationPermissionUsage": [
          {
            "permission": "iam.serviceAccounts.actAs"
            "used": false
          }
        ],
        "hasPermissionUsageData": true
      },
      "lastRefreshTime": "2021-03-13T08:00:00Z",
      "observationPeriod": "7776000s",
      "stateInfo": {
        "state": "ACTIVE"
      },
      "category": "SECURITY",
      "associatedRecommendations": [
        {
          "recommendation": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/03f3dc20-f9e7-4502-95ab-bf7d3164846f"
        }
      ],
      "targetResources": [
        "//cloudresourcemanager.googleapis.com/projects/123456789012"
      ],
      "insightSubtype": "CROSS_PROJECT_IMPERSONATION",
      "etag": "\"f48fa6a1b15c7741\""
    }
  ]
}

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

단일 측면 이동 통계 가져오기

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

gcloud

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

  • INSIGHT_ID: 보려는 통계의 ID입니다. ID를 찾으려면 프로젝트의 통계를 나열하세요.
  • PROJECT_ID: 통계를 관리하려는 프로젝트의 ID입니다.
gcloud recommender insights describe INSIGHT_ID \
    --insight-type=google.iam.policy.LateralMovementInsight \
    --project=PROJECT_ID \
    --location=global

출력에 통계가 자세히 표시됩니다. 예를 들어 다음 통계는 123456789012 프로젝트의 IAM 정책에서 service-account@another-project.iam.gserviceaccount.comtarget-service-account-1@this-project.iam.gserviceaccount.comtarget-service-account-2@this-project.iam.gserviceaccount.com을 가장하도록 허용함을 나타냅니다.

associatedRecommendations:
- recommendation: projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/03f3dc20-f9e7-4502-95ab-bf7d3164846f
category: SECURITY
content:
  hasPermissionUsageData: true
  impersonationPermissionUsage:
  - permission: iam.serviceAccounts.actAs
    used: false
  impersonationPolicy:
    condition:
      description: ''
      expression: ''
      location: ''
      title: ''
    member: serviceAccount:service-account@another-project.iam.gserviceaccount.com
    resource: //cloudresourcemanager.googleapis.com/projects/123456789012
    role: roles/editor
  impersonator:
    isGoogleManaged: false
    serviceAccount: service-account@another-project.iam.gserviceaccount.com
    serviceAccountOwner: //cloudresourcemanager.googleapis.com/projects/987654321098
  targetServiceAccounts:
  - target-service-account-1@this-project.iam.gserviceaccount.com
  - target-service-account-2@this-project.iam.gserviceaccount.com
description: Service account service-account@another-project.iam.gserviceaccount.com from another project can impersonate 2 service account(s) under this project.
etag: '"f48fa6a1b15c7741"'
insightSubtype: CROSS_PROJECT_IMPERSONATION
lastRefreshTime: '2021-03-13T08:00:00Z'
name: projects/123456789012/locations/global/insightTypes/google.iam.policy.LateralMovementInsight/insights/13088eec-9573-415f-81a7-46e1a260e860
observationPeriod: 7776000s
stateInfo:
  state: ACTIVE
targetResources:
- //cloudresourcemanager.googleapis.com/projects/123456789012

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

REST

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

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

  • PROJECT_ID: 통계를 관리하려는 프로젝트의 ID입니다.
  • INSIGHT_ID: 보려는 통계의 ID입니다. 통계 ID를 모르는 경우 프로젝트의 통계를 나열하여 찾을 수 있습니다. 통계 ID는 통계의 name 필드에서 insights/ 다음에 오는 모든 문자입니다.

HTTP 메서드 및 URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/global/insightTypes/google.iam.policy.LateralMovementInsight/insights/INSIGHT_ID

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

응답에 통계가 포함됩니다. 예를 들어 다음 통계는 123456789012 프로젝트의 IAM 정책에서 service-account@another-project.iam.gserviceaccount.comtarget-service-account-1@this-project.iam.gserviceaccount.comtarget-service-account-2@this-project.iam.gserviceaccount.com을 가장하도록 허용함을 나타냅니다.

{
  "name": "projects/123456789012/locations/global/insightTypes/google.iam.policy.LateralMovementInsight/insights/13088eec-9573-415f-81a7-46e1a260e860",
  "description": "Service account service-account@another-project.iam.gserviceaccount.com from another project can impersonate 2 service account(s) under this project.",
  "content": {
    "impersonator": {
      "serviceAccount": "service-account@another-project.iam.gserviceaccount.com",
      "serviceAccountOwner": "//cloudresourcemanager.googleapis.com/projects/987654321098",
      "isGoogleManaged": false
    },
    "targetServiceAccounts": [
      "target-service-account-1@this-project.iam.gserviceaccount.com",
      "target-service-account-2@this-project.iam.gserviceaccount.com"
    ],
    "impersonationPolicy": {
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
      "role": "roles/editor",
      "member": "serviceAccount:service-account@another-project.iam.gserviceaccount.com",
      "condition": {
        "expression": "",
        "title": "",
        "description": "",
        "location": ""
      }
    },
    "impersonationPermissionUsage": [
      {
        "permission": "iam.serviceAccounts.actAs"
        "used": false
      }
    ],
    "hasPermissionUsageData": true
  },
  "lastRefreshTime": "2021-03-13T08:00:00Z",
  "observationPeriod": "7776000s",
  "stateInfo": {
    "state": "ACTIVE"
  },
  "category": "SECURITY",
  "associatedRecommendations": [
    {
      "recommendation": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/03f3dc20-f9e7-4502-95ab-bf7d3164846f"
    }
  ],
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "insightSubtype": "CROSS_PROJECT_IMPERSONATION",
  "etag": "\"f48fa6a1b15c7741\""
}

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

측면 이동 통계 검토

단일 통계를 가져온 후 콘텐츠를 검토하여 강조표시되는 리소스 사용량 패턴을 파악할 수 있습니다.

통계의 콘텐츠는 하위유형에 따라 결정됩니다. 측면 이동 통계(google.iam.policy.LateralMovementInsight)는 CROSS_PROJECT_IMPERSONATION 하위유형을 사용하는 통계를 지원합니다.

CROSS_PROJECT_IMPERSONATION 통계에는 다음과 같은 구성요소가 있습니다(순서는 다름).

  • associatedRecommendations: 통계와 연결된 모든 권장사항의 식별자입니다. 통계와 연결된 권장사항이 없으면 이 필드는 비어 있습니다.
  • category: IAM 통계의 카테고리는 항상 SECURITY입니다.
  • content: 다른 프로젝트에서 서비스 계정을 가장할 수 있는 서비스 계정의 권한을 자세히 보고합니다. 이 필드에는 다음 구성요소가 포함됩니다.

    • hasPermissionUsageData: 이 역할 결합의 권한 사용 데이터가 있는지 여부를 나타내는 부울 값입니다. 권한 사용 데이터는 역할 결합의 권한이 사용되었는지 여부를 나타냅니다. 조건부 역할 binding에서는 이 데이터를 사용할 수 없습니다.
    • impersonationPermissionUsage: 가장 권한과 이 권한의 사용 정보가 담긴 목록입니다. hasPermissionUsageData가 false이면 이 필드가 비어 있습니다.
    • impersonationPolicy: 서비스 계정 가장 권한을 부여하는 역할 결합에 대한 정보입니다.
    • impersonator: 프로젝트의 서비스 계정을 가장할 수 있는 권한을 보유한 서비스 계정입니다.
    • targetServiceAccounts: 가장 권한이 있는 impersonator 필드의 서비스 계정 목록입니다. 가장자가 1,500개를 초과하는 서비스 계정을 가장할 수 있으면 목록이 비어 있습니다. 가장자가 가장할 수 있는 서비스 계정 수를 보려면 description 필드를 참조하세요.
  • description: 사람이 읽을 수 있는 통계 요약입니다.
  • etag: 통계의 현재 상태에 대한 고유 식별자입니다. 통계가 변경될 때마다 새 etag 값이 할당됩니다.

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

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

    projects/PROJECT_ID/locations/global/insightTypes/google.iam.policy.LateralMovementInsight/insights/INSIGHT_ID

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

    • PROJECT_ID: 통계가 생성된 프로젝트의 ID입니다.
    • INSIGHT_ID: 통계의 고유 ID입니다.
  • observationPeriod: 통계까지 이어지는 기간입니다. 통계를 생성하는 데 사용되는 소스 데이터는 lastRefreshTime에 종료되며 lastRefreshTime에서 observationPeriod를 뺀 시간에 시작합니다.
  • severity: 통계의 심각도입니다. 모든 측면 이동 통계의 심각도는 LOW입니다.
  • stateInfo: 통계는 제안된 후 여러 상태로 전환됩니다.

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

측면 이동 통계를 ACCEPTED로 표시

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

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

gcloud

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

  • INSIGHT_ID: 보려는 통계의 ID입니다. ID를 찾으려면 프로젝트의 통계를 나열하세요.
  • PROJECT_ID: 통계를 관리하려는 프로젝트의 ID입니다.
  • ETAG: 통계 버전의 식별자입니다. etag를 가져오려면 다음 안내를 따르세요.

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

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

associatedRecommendations:
- recommendation: projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/03f3dc20-f9e7-4502-95ab-bf7d3164846f
category: SECURITY
content:
  hasPermissionUsageData: true
  impersonationPermissionUsage:
  - permission: iam.serviceAccounts.actAs
    used: false
  impersonationPolicy:
    condition:
      description: ''
      expression: ''
      location: ''
      title: ''
    member: serviceAccount:service-account@another-project.iam.gserviceaccount.com
    resource: //cloudresourcemanager.googleapis.com/projects/123456789012
    role: roles/editor
  impersonator:
    isGoogleManaged: false
    serviceAccount: service-account@another-project.iam.gserviceaccount.com
    serviceAccountOwner: //cloudresourcemanager.googleapis.com/projects/987654321098
  targetServiceAccounts:
  - target-service-account-1@this-project.iam.gserviceaccount.com
  - target-service-account-2@this-project.iam.gserviceaccount.com
description: Service account service-account@another-project.iam.gserviceaccount.com from another project can impersonate 2 service account(s) under this project.
etag: '"f48fa6a1b15c7741"'
insightSubtype: CROSS_PROJECT_IMPERSONATION
lastRefreshTime: '2021-03-13T08:00:00Z'
name: projects/123456789012/locations/global/insightTypes/google.iam.policy.LateralMovementInsight/insights/13088eec-9573-415f-81a7-46e1a260e860
observationPeriod: 7776000s
stateInfo:
  state: ACCEPTED
targetResources:
- //cloudresourcemanager.googleapis.com/projects/123456789012

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

REST

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

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

  • PROJECT_ID: 통계를 관리하려는 프로젝트의 ID입니다.
  • INSIGHT_ID: 보려는 통계의 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/google.iam.policy.LateralMovementInsight/insights/INSIGHT_ID:markAccepted

JSON 요청 본문:

{
  "etag": "ETAG"
}

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

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

{
  "name": "projects/123456789012/locations/global/insightTypes/google.iam.policy.LateralMovementInsight/insights/13088eec-9573-415f-81a7-46e1a260e860",
  "description": "Service account service-account@another-project.iam.gserviceaccount.com from another project can impersonate 2 service account(s) under this project.",
  "content": {
    "impersonator": {
      "serviceAccount": "service-account@another-project.iam.gserviceaccount.com",
      "serviceAccountOwner": "//cloudresourcemanager.googleapis.com/projects/987654321098",
      "isGoogleManaged": false
    },
    "targetServiceAccounts": [
      "target-service-account-1@this-project.iam.gserviceaccount.com",
      "target-service-account-2@this-project.iam.gserviceaccount.com"
    ],
    "impersonationPolicy": {
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
      "role": "roles/editor",
      "member": "serviceAccount:service-account@another-project.iam.gserviceaccount.com",
      "condition": {
        "expression": "",
        "title": "",
        "description": "",
        "location": ""
      }
    },
    "impersonationPermissionUsage": [
      {
        "permission": "iam.serviceAccounts.actAs"
        "used": false
      }
    ],
    "hasPermissionUsageData": true
  },
  "lastRefreshTime": "2021-03-13T08:00:00Z",
  "observationPeriod": "7776000s",
  "stateInfo": {
    "state": "ACCEPTED"
  },
  "category": "SECURITY",
  "associatedRecommendations": [
    {
      "recommendation": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/03f3dc20-f9e7-4502-95ab-bf7d3164846f"
    }
  ],
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "insightSubtype": "CROSS_PROJECT_IMPERSONATION",
  "etag": "\"f48fa6a1b15c7741\""
}

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

다음 단계