사용되지 않는 서비스 계정 찾기

이 페이지에서는 서비스 계정 통계를 관리하는 방법을 보여줍니다. 이 통계는 프로젝트에서 이전 90일 동안 사용되지 않은 서비스 계정에 대한 발견 항목입니다.

시작하기 전에

필요한 역할

서비스 계정 통계를 관리하는 데 필요한 권한을 얻으려면 관리자에게 통계를 관리할 프로젝트에 대한 다음의 IAM 역할을 부여해 달라고 요청하세요.

  • 서비스 계정 통계 보기: IAM 추천자 뷰어(roles/recommender.iamViewer)
  • 서비스 계정 통계 보기: IAM 추천자 관리자(roles/recommender.iamAdmin)

역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.

이러한 사전 정의된 역할에는 서비스 계정 통계를 관리하는 데 필요한 권한이 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 확장하세요.

필수 권한

  • 서비스 계정 통계 보기:
    • recommender.iamServiceAccountinsights.get
    • recommender.iamServiceAccountinsights.list
  • 서비스 계정 통계 수정: recommender.iamServiceAccountinsights.update

커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.

서비스 계정 통계 나열

프로젝트의 모든 서비스 계정 통계를 나열하려면 다음 메서드 중 하나를 사용하세요.

gcloud

gcloud recommender insights list 명령어를 사용하여 프로젝트의 모든 서비스 계정 통계를 확인합니다.

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

  • PROJECT_ID: 통계를 나열하려는 프로젝트의 ID입니다.
gcloud recommender insights list --insight-type=google.iam.serviceAccount.Insight \
    --project=PROJECT_ID \
    --location=global

프로젝트에 대한 모든 서비스 계정 통계가 출력에 나열됩니다. 예를 들면 다음과 같습니다.

INSIGHT_ID                            CATEGORY  INSIGHT_STATE  LAST_REFRESH_TIME     SEVERITY  INSIGHT_SUBTYPE        DESCRIPTION
446303ba-2a14-49cc-b9fa-e2d2499d4f82  SECURITY  ACTIVE         2022-05-24T07:00:00Z  LOW       SERVICE_ACCOUNT_USAGE  Service account sa-1@my-project.iam.gserviceaccount.com was inactive.
4cfd82c3-7320-4dc6-9b67-ca0756bbd54c  SECURITY  ACTIVE         2022-05-24T07:00:00Z  LOW       SERVICE_ACCOUNT_USAGE  Service account sa-2@my-project.iam.gserviceaccount.com was inactive.
a627bed7-c8f4-4611-89c9-2a9a8618ca1b  SECURITY  ACTIVE         2022-05-24T07:00:00Z  LOW       SERVICE_ACCOUNT_USAGE  Service account sa-3@my-project.iam.gserviceaccount.com was inactive.
a922dd59-df0a-422d-a2a4-096195e1dae5  SECURITY  ACTIVE         2022-05-24T07:00:00Z  LOW       SERVICE_ACCOUNT_USAGE  Service account sa-4@my-project.iam.gserviceaccount.com was inactive.

REST

Recommender API의 insights.list 메서드는 프로젝트의 모든 서비스 계정 통계를 나열합니다.

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

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

HTTP 메서드 및 URL:

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

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

응답에 프로젝트의 모든 서비스 계정 통계가 나열됩니다. 예를 들면 다음과 같습니다.

{
  "insights": [
    {
      "name": "projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82",
      "description": "Service account sa-1@my-project.iam.gserviceaccount.com was inactive.",
      "content": {
        "serviceAccountId": "103185812403937829397",
        "email": "sa-1@my-project.iam.gserviceaccount.com",
        "lastAuthenticatedTime": "2020-09-11T07:00:00Z"
      },
      "lastRefreshTime": "2022-05-24T07:00:00Z",
      "observationPeriod": "19008000s",
      "stateInfo": {
        "state": "ACTIVE"
      },
      "category": "SECURITY",
      "targetResources": [
        "//cloudresourcemanager.googleapis.com/projects/123456789012"
      ],
      "insightSubtype": "SERVICE_ACCOUNT_USAGE",
      "etag": "\"9d797dd04263c855\"",
      "severity": "LOW"
    },
    {
      "name": "projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/4cfd82c3-7320-4dc6-9b67-ca0756bbd54c",
      "description": "Service account sa-2@my-project.iam.gserviceaccount.com was inactive.",
      "content": {
        "serviceAccountId": "105496400997178042131",
        "email": "sa-2@my-project.iam.gserviceaccount.com"
      },
      "lastRefreshTime": "2022-05-24T07:00:00Z",
      "observationPeriod": "16070400s",
      "stateInfo": {
        "state": "ACTIVE"
      },
      "category": "SECURITY",
      "targetResources": [
        "//cloudresourcemanager.googleapis.com/projects/123456789012"
      ],
      "insightSubtype": "SERVICE_ACCOUNT_USAGE",
      "etag": "\"783a32b635d79a4e\"",
      "severity": "LOW"
    }
  ]
}

통계 구성요소에 대한 자세한 설명은 이 페이지의 서비스 계정 통계 검토를 참조하세요.

단일 서비스 계정 통계 가져오기

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

gcloud

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

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

출력에 통계가 자세히 표시됩니다. 예를 들어 다음 통계는 2020년 10월 11일 이후에 서비스 계정 sa-1@my-project.iam.gserviceaccount.com이 인증되지 않았음을 나타냅니다.

category: SECURITY
content:
  email: sa-1@my-project.iam.gserviceaccount.com
  lastAuthenticatedTime: '2020-10-11T07:00:00Z'
  serviceAccountId: '103185812403937829397'
description: Service account sa-1@my-project.iam.gserviceaccount.com
  was inactive.
etag: '"9d797dd04263c855"'
insightSubtype: SERVICE_ACCOUNT_USAGE
lastRefreshTime: '2022-05-24T07:00:00Z'
name: projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82
observationPeriod: 19008000s
severity: LOW
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.serviceAccount.Insight/insights/INSIGHT_ID

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

응답에 통계가 포함됩니다. 예를 들어 다음 통계는 2020년 10월 11일 이후에 서비스 계정 sa-1@my-project.iam.gserviceaccount.com이 인증되지 않았음을 나타냅니다.

{
  "name": "projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82",
  "description": "Service account sa-1@my-project.iam.gserviceaccount.com was inactive.",
  "content": {
    "serviceAccountId": "103185812403937829397",
    "email": "sa-1@my-project.iam.gserviceaccount.com",
    "lastAuthenticatedTime": "2020-09-11T07:00:00Z"
  },
  "lastRefreshTime": "2022-05-24T07:00:00Z",
  "observationPeriod": "19008000s",
  "stateInfo": {
    "state": "ACTIVE"
  },
  "category": "SECURITY",
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "insightSubtype": "SERVICE_ACCOUNT_USAGE",
  "etag": "\"9d797dd04263c855\"",
  "severity": "LOW"
}

통계 구성요소에 대한 자세한 설명은 이 페이지의 서비스 계정 통계 검토를 참조하세요.

서비스 계정 통계 검토

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

통계의 콘텐츠는 하위유형에 따라 결정됩니다. 서비스 계정 통계(google.iam.serviceAccount.Insight)는 SERVICE_ACCOUNT_USAGE 하위유형을 사용하는 통계를 지원합니다.

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

  • associatedRecommendations: 통계와 연결된 모든 권장사항의 식별자입니다. 통계와 연결된 권장사항이 없으면 이 필드는 비어 있습니다.
  • category: IAM 통계의 카테고리는 항상 SECURITY입니다.
  • content: 서비스 계정이 마지막으로 인증된 시간을 보고합니다. 이 필드에는 다음 구성요소가 포함됩니다.

    • email: 서비스 계정의 이메일 주소입니다.
    • lastAuthenticatedTime: 서비스 계정이 인증된 가장 최근 시간입니다. 서비스 계정에 기록된 인증이 없으면 이 필드가 포함되지 않습니다.
    • serviceAccountId: 서비스 계정의 고유 숫자 ID입니다.
  • description: 사람이 읽을 수 있는 통계 요약입니다.
  • etag: 통계의 현재 상태에 대한 고유 식별자입니다. 통계가 변경될 때마다 새 etag 값이 할당됩니다.

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

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

    projects/PROJECT_ID/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/INSIGHT_ID

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

    • PROJECT_ID: 통계가 생성된 프로젝트의 ID입니다.
    • INSIGHT_ID: 통계의 고유 ID입니다.
  • observationPeriod: 통계까지 이어지는 기간입니다. 통계를 생성하는 데 사용되는 소스 데이터는 lastRefreshTime에 종료되며 lastRefreshTime에서 observationPeriod를 뺀 시간에 시작합니다.
  • 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.serviceAccount.Insight \
    --project=PROJECT_ID \
    --location=global \
    --etag=ETAG

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

category: SECURITY
content:
  email: sa-1@my-project.iam.gserviceaccount.com
  lastAuthenticatedTime: '2020-10-11T07:00:00Z'
  serviceAccountId: '103185812403937829397'
description: Service account sa-1@my-project.iam.gserviceaccount.com
  was inactive.
etag: '"39c4199dcec92848"'
insightSubtype: SERVICE_ACCOUNT_USAGE
lastRefreshTime: '2022-05-24T07:00:00Z'
name: projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82
observationPeriod: 19008000s
severity: LOW
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.serviceAccount.Insight/insights/INSIGHT_ID:markAccepted

JSON 요청 본문:

{
  "etag": "ETAG"
}

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

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

{
  "name": "projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82",
  "description": "Service account sa-1@my-project.iam.gserviceaccount.com was inactive.",
  "content": {
    "serviceAccountId": "103185812403937829397",
    "email": "sa-1@my-project.iam.gserviceaccount.com",
    "lastAuthenticatedTime": "2020-10-11T07:00:00Z"
  },
  "lastRefreshTime": "2022-05-24T07:00:00Z",
  "observationPeriod": "19008000s",
  "stateInfo": {
    "state": "ACCEPTED"
    },
  "category": "SECURITY",
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "insightSubtype": "SERVICE_ACCOUNT_USAGE",
  "etag": "\"39c4199dcec92848\"",
  "severity": "LOW"
}

통계의 상태 정보에 대한 상세 설명은 이 페이지의 서비스 계정 통계 검토를 참조하세요.

다음 단계