서비스 계정 및 키의 사용 패턴 모니터링

이 페이지에서는 Cloud Monitoring을 사용하여 서비스 계정 및 서비스 계정 키의 사용 측정항목을 확인하는 방법을 설명합니다. 이 측정항목을 사용하면 사용 패턴을 확인하고 추적하여 이상 행동을 자동 또는 수동으로 식별할 수 있습니다.

Google Cloud에 포함되지 않은 API를 포함하여 Google API를 호출하는 데 사용되는 서비스 계정 및 서비스 계정 키는 이 측정항목에 표시됩니다. 측정항목에는 성공한 API 호출과 실패한 API 호출이 모두 포함됩니다. 예를 들어 호출자에게 API를 호출할 수 있는 권한이 없거나 요청이 존재하지 않는 리소스를 참조하기 때문에 API 호출이 실패한 경우, 이 API 호출에 사용된 서비스 계정 또는 키는 측정항목에 표시됩니다.

시스템에서 요청을 인증하는 데 키를 사용하지 않았더라도 요청 인증을 시도하는 동안 시스템에서 키를 나열하는 경우 이 측정항목에 서비스 계정 키도 표시됩니다. 이는 Cloud Storage에 서명된 URL을 사용하거나 타사 애플리케이션 인증 시에 일반적으로 나타나는 동작입니다. 따라서 인증에 사용되지 않은 키의 사용 측정항목이 표시될 수 있습니다.

Monitoring은 서비스 계정 측정항목을 6주 동안 보관합니다. 더 오랜 기간 동안 데이터에 액세스해야 하는 경우 주기적으로 결과를 BigQuery로 내보낼 수 있습니다. 자세한 내용은 솔루션 문서의 Monitoring 측정항목 내보내기를 참조하세요.

서비스 계정 또는 서비스 계정 키를 사용하면 보통 몇 분 이내에 사용 측정항목을 사용할 수 있습니다.

시작하기 전에

  • API IAM and Cloud Monitoring 사용 설정

    API 사용 설정

필요한 역할

서비스 계정 및 키의 최근 사용량을 보는 데 필요한 권한을 얻으려면 관리자에게 프로젝트의 Monitoring 뷰어(roles/monitoring.viewer) IAM 역할을 부여해 달라고 요청하세요. 역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.

커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

모든 서비스 계정 또는 키의 사용 측정항목 보기

서비스 계정 또는 서비스 계정 키의 사용 측정항목을 보려면 다음 단계를 따르세요.

콘솔

측정항목 탐색기를 사용하여 모니터링 리소스의 측정항목을 확인하려면 다음을 수행하세요.

  1. Google Cloud 콘솔의 탐색 패널에서 Monitoring을 선택한 후 측정항목 탐색기를 선택합니다.

    측정항목 탐색기로 이동

  2. 측정항목 요소에서 측정항목 선택 메뉴를 펼치고 필터 표시줄에 IAM Service Account을 입력한 후 하위 메뉴를 사용하여 특정 리소스 유형과 측정항목을 선택합니다.
    1. 활성 리소스 메뉴에서 IAM 서비스 계정을 선택합니다.
    2. 활성 측정항목 카테고리 메뉴에서 Service_account를 선택합니다.
    3. 활성 측정항목 메뉴에서 서비스 계정 측정항목을 선택합니다. 선택한 시간 간격 내에서 다음 측정항목을 사용할 수 있습니다.
      • 서비스 계정 사용 측정항목에 서비스 계정 인증 이벤트를 선택합니다.
      • 서비스 계정 키 사용 측정항목에 서비스 계정 키 인증 이벤트를 선택합니다.
    4. 적용을 클릭합니다.
  3. 디스플레이에서 시계열을 삭제하려면 필터 요소를 사용합니다.

  4. 시계열을 조합하려면 집계 요소의 메뉴를 사용합니다. 예를 들어 VM의 CPU 사용률을 영역에 따라 표시하려면 첫 번째 메뉴를 평균으로, 두 번째 메뉴를 영역으로 설정합니다.

    집계 요소의 첫 번째 메뉴가 집계되지 않음으로 설정되면 모든 시계열이 표시됩니다. 집계 요소 기본 설정은 선택한 측정항목 유형에 따라 결정됩니다.

  5. 하루에 샘플 하나를 보고하는 할당량과 기타 측정항목의 경우 다음을 수행합니다.
    1. 표시 창에서 위젯 유형누적 막대 그래프로 설정합니다.
    2. 기간을 최소 1주일로 설정합니다.

REST

Cloud Monitoring API의 timeSeries.list 메서드를 사용하면 프로그래매틱 방식으로 사용 측정항목에 액세스할 수 있습니다.

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

  • PROJECT_ID: Google Cloud 프로젝트 ID. 프로젝트 ID는 my-project 같은 영숫자 문자열입니다.
  • METRIC_TYPE: 확인할 측정항목 유형. 다음 중 한 가지 값을 사용합니다.
    • 서비스 계정 사용 측정항목의 경우 iam.googleapis.com%2Fservice_account%2Fauthn_events_count를 사용합니다.
    • 서비스 계정 키 사용 측정항목의 경우 iam.googleapis.com%2Fservice_account%2Fkey%2Fauthn_events_count를 사용합니다.
  • END_TIME: 확인할 기간의 종료 시간이며, 백분율로 인코딩된 RFC 3339 형식입니다. 예를 들면 2020-06-12T00%3A00%3A00.00Z입니다.
  • START_TIME: 확인할 기간의 시작 시간으로, 백분율로 인코딩된 RFC 3339 형식입니다. 예를 들면 2020-04-12T00%3A00%3A00.00Z입니다.

HTTP 메서드 및 URL:

GET https://monitoring.googleapis.com/v3/projects/PROJECT_ID/timeSeries?filter=metric.type%3D%22METRIC_TYPE%22&interval.endTime=END_TIME&interval.startTime=START_TIME

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

프로그래매틱 방식 측정항목 읽기에 대한 자세한 내용은 Monitoring 문서의 측정항목 데이터 읽기를 참조하세요.

단일 서비스 계정의 사용 측정항목 보기

단일 서비스 계정의 사용 측정항목을 보려면 다음 단계를 따르세요.

콘솔

  1. Google Cloud Console에서 서비스 계정 페이지로 이동합니다.

    서비스 계정으로 이동

  2. 서비스 계정이 포함된 프로젝트를 선택합니다.

  3. 서비스 계정의 이메일 주소를 클릭합니다.

  4. 측정항목 탭을 클릭합니다. 인증 트래픽 차트에는 서비스 계정의 사용 측정항목이 표시됩니다.

  5. 선택사항: 추가 필터링 및 보기 옵션을 제공하는 측정항목 탐색기 페이지의 차트를 보려면  > 측정항목 탐색기에서 보기를 클릭합니다.

REST

Cloud Monitoring API의 timeSeries.list 메서드를 특정 필터와 함께 사용하면 단일 서비스 계정의 사용 측정항목을 가져올 수 있습니다. 그런 다음 이러한 측정항목을 사용하여 계정이 마지막으로 사용된 시점을 확인할 수 있습니다.

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

  • PROJECT_ID: Google Cloud 프로젝트 ID. 프로젝트 ID는 my-project 같은 영숫자 문자열입니다.
  • SERVICE_ACCOUNT_ID: 서비스 계정의 고유 숫자 ID. 서비스 계정의 고유 숫자 ID를 찾으려면 다음 단계를 따르세요.
    1. Google Cloud Console에서 서비스 계정 페이지로 이동합니다.

      서비스 계정 페이지로 이동
    2. 서비스 계정의 이메일 주소를 클릭합니다. 서비스 계정의 고유 숫자 ID는 고유 ID 필드의 값입니다.
  • END_TIME: 확인할 기간의 종료 시간이며, 백분율로 인코딩된 RFC 3339 형식입니다. 예를 들면 2020-06-12T00%3A00%3A00.00Z입니다.
  • START_TIME: 확인할 기간의 시작 시간으로, 백분율로 인코딩된 RFC 3339 형식입니다. 예를 들면 2020-04-12T00%3A00%3A00.00Z입니다.

HTTP 메서드 및 URL:

GET https://monitoring.googleapis.com/v3/projects/PROJECT_ID/timeSeries?filter=metric.type%3D%22iam.googleapis.com%2Fservice_account%2Fauthn_events_count%22%20AND%20resource.labels.unique_id%3D%22SERVICE_ACCOUNT_ID%22&interval.endTime=END_TIME&interval.startTime=START_TIME

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

응답에는 지정된 서비스 계정의 최근 인증 이벤트를 모두 포함한 timeSeries 객체가 포함됩니다.

단일 서비스 계정 키의 사용 측정항목 보기

단일 서비스 계정 키의 사용 측정항목을 보려면 다음 단계를 따르세요.

콘솔

  1. Google Cloud Console에서 서비스 계정 페이지로 이동합니다.

    서비스 계정으로 이동

  2. 키와 연결된 서비스 계정이 포함된 프로젝트를 선택합니다.

  3. 키와 연결된 서비스 계정의 이메일 주소를 클릭합니다.

  4. 측정항목 탭을 클릭합니다. 키당 인증 트래픽 차트에는 서비스 계정과 연결된 모든 키의 사용 측정항목이 표시됩니다.

  5. 차트 범례에서 사용량 측정항목을 보려는 서비스 계정 키의 ID를 클릭합니다. 차트가 업데이트되어 해당 서비스 계정 키의 측정항목만 표시됩니다.

  6. 선택사항: 추가 필터링 및 보기 옵션을 제공하는 측정항목 탐색기 페이지의 차트를 보려면  > 측정항목 탐색기에서 보기를 클릭합니다.

REST

먼저 서비스 계정 키의 ID를 가져옵니다.

  1. 서비스 계정 키를 나열합니다.

    projects.serviceAccounts.keys.list 메서드는 서비스 계정의 모든 서비스 계정 키를 나열합니다.

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

    • PROJECT_ID: Google Cloud 프로젝트 ID. 프로젝트 ID는 my-project 같은 영숫자 문자열입니다.
    • SA_NAME: 키를 나열하려는 서비스 계정의 이름입니다.
    • KEY_TYPES: 선택사항. 응답에 포함할 키 유형의 쉼표로 구분된 목록입니다. 키 유형은 키가 사용자 관리(USER_MANAGED)인지 시스템 관리(SYSTEM_MANAGED)인지를 나타냅니다. 비워두면 모든 키가 반환됩니다.

    HTTP 메서드 및 URL:

    GET https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys?keyTypes=KEY_TYPES

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

    다음과 비슷한 JSON 응답이 표시됩니다.

    {
      "keys": [
        {
          "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/90c48f61c65cd56224a12ab18e6ee9ca9c3aee7c",
          "validAfterTime": "2020-03-04T17:39:47Z",
          "validBeforeTime": "9999-12-31T23:59:59Z",
          "keyAlgorithm": "KEY_ALG_RSA_2048",
          "keyOrigin": "GOOGLE_PROVIDED",
          "keyType": "USER_MANAGED"
        },
        {
          "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/e5e3800831ac1adc8a5849da7d827b4724b1fce8",
          "validAfterTime": "2020-03-31T23:50:09Z",
          "validBeforeTime": "9999-12-31T23:59:59Z",
          "keyAlgorithm": "KEY_ALG_RSA_2048",
          "keyOrigin": "GOOGLE_PROVIDED",
          "keyType": "USER_MANAGED"
        },
        {
          "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/b97699f042b8eee6a846f4f96259fbcd13e2682e",
          "validAfterTime": "2020-05-17T18:58:13Z",
          "validBeforeTime": "9999-12-31T23:59:59Z",
          "keyAlgorithm": "KEY_ALG_RSA_2048",
          "keyOrigin": "GOOGLE_PROVIDED",
          "keyType": "USER_MANAGED",
          "disabled": true
        }
      ]
    }
    

  2. 응답의 메타데이터를 사용하여 추적할 키를 식별합니다. 그런 다음 name 필드 끝에서 키의 고유 ID를 복사합니다.

    name 필드의 형식은 다음과 같습니다.

    "name": "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_EMAIL/keys/KEY_ID"
    

    키의 고유 ID는 keys/ 이후의 모든 문자입니다.

    예를 들어 다음 키 이름의 고유 ID는 0f561cc41650ff521899de2fd653bd3de08e2da4입니다.

    "name": "projects/my-project/serviceAccounts/my-account@my-project.iam.gserviceaccount.com/keys/0f561cc41650ff521899de2fd653bd3de08e2da4"
    

그런 다음 ID를 사용하여 서비스 계정 키의 사용 측정항목을 봅니다.

Cloud Monitoring API의 timeSeries.list 메서드를 특정 필터와 함께 사용하면 단일 서비스 계정 키의 사용 측정항목을 가져올 수 있습니다. 그런 다음 이러한 측정항목을 사용하여 키가 마지막으로 사용된 시점을 확인할 수 있습니다.

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

  • PROJECT_ID: Google Cloud 프로젝트 ID. 프로젝트 ID는 my-project 같은 영숫자 문자열입니다.
  • KEY_ID: 서비스 계정 키의 고유 ID.
  • END_TIME: 확인할 기간의 종료 시간이며, 백분율로 인코딩된 RFC 3339 형식입니다. 예를 들면 2020-06-12T00%3A00%3A00.00Z입니다.
  • START_TIME: 확인할 기간의 시작 시간으로, 백분율로 인코딩된 RFC 3339 형식입니다. 예를 들면 2020-04-12T00%3A00%3A00.00Z입니다.

HTTP 메서드 및 URL:

GET https://monitoring.googleapis.com/v3/projects/PROJECT_ID/timeSeries?filter=metric.type%3D%22iam.googleapis.com%2Fservice_account%2Fkey%2Fauthn_events_count%22%20AND%20metric.labels.key_id%3D%22KEY_ID%22&interval.endTime=END_TIME&interval.startTime=START_TIME

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

응답에는 지정된 서비스 계정 키의 최근 인증 이벤트를 모두 포함한 timeSeries 객체가 포함됩니다.

측정항목 내보내기

Monitoring을 사용하여 측정항목을 BigQuery로 내보낼 수 있습니다. Monitoring은 제한된 기간 동안의 측정항목만 보관하므로 장기 분석을 수행할 때 측정항목 내보내기가 유용합니다.

자세한 내용은 솔루션 문서의 Monitoring 측정항목 내보내기를 참조하세요.

다음 단계