서비스 계정 로그 예시

이 페이지에는 서비스 계정을 관리하거나 사용할 때 생성되는 감사 로그의 예시가 나와 있습니다.

감사 로그 사용 설정 및 보기에 대한 자세한 내용은 IAM 감사 로깅을 참조하세요.

서비스 계정 만들기 로그

서비스 계정을 만들거나 수정할 때 Identity and Access Management(IAM)가 로그 항목을 생성합니다. 다음 예시에서는 서비스 계정을 만드는 로그 항목을 보여줍니다.

{
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalEmail": "example-user@example.com"
    },
    "methodName": "google.iam.admin.v1.CreateServiceAccount",
    "response": {
      "email": "my-service-account@my-project.iam.gserviceaccount.com",
      "@type": "type.googleapis.com/google.iam.admin.v1.ServiceAccount",
      "display_name": "My service account."
    }
  },
  "resource": {
    "type": "service_account"
  }
}

역할 부여 로그

이 섹션에서는 서비스 계정과 관련된 역할을 부여할 때 받게 되는 로그 항목을 보여줍니다.

서비스 계정 사용자 역할 부여 로그

주 구성원은 서비스 계정을 가장하여 서비스 계정과 동일한 권한을 얻을 수 있습니다. 주 구성원이 서비스 계정을 가장하도록 허용하려면 서비스 계정의 주 구성원에게 [서비스 계정 사용자 역할]sa-user-role을 부여하면 됩니다.

다음 예시에서는 주 구성원에게 서비스 계정 사용자 역할을 부여하는 로그 항목을 보여줍니다.

{
  "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Factivity",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "methodName": "google.iam.admin.v1.SetIAMPolicy",
    "request": {
      "@type": "type.googleapis.com/google.iam.v1.SetIamPolicyRequest",
      "resource": "projects/-/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com"
    },
    "resourceName": "projects/-/serviceAccounts/123456789012345678901",
    "response": {
      "@type": "type.googleapis.com/google.iam.v1.Policy",
      "bindings": [
        {
          "members": [
            "user:my-user@example.com"
          ],
          "role": "roles/iam.serviceAccountUser"
        }
      ]
    }
  },
  "resource": {
    "type": "service_account"
  }
}

주 구성원이 단기 사용자 인증 정보를 만들도록 허용하는 [서비스 계정 토큰 생성자 역할]sa-token-creator-role을 부여하면 IAM에서 유사한 로그 항목을 생성합니다.

리소스에서 서비스 계정에 액세스 권한을 부여하기 위한 로그

서비스 계정에서 리소스에 액세스할 수 있도록 특정 리소스에 대해 서비스 계정에 역할을 부여할 수 있습니다. 리소스를 소유한 서비스가 감사 로깅도 지원하는 경우 서비스 계정에 역할을 부여하면 감사 로그 항목이 생성됩니다. 로그 항목에는 서비스 계정에 역할을 부여한 주 구성원을 식별하는 protoPayload.authenticationInfo.principalEmail 필드가 포함됩니다.

다음 예시에서는 프로젝트의 서비스 계정에 역할을 부여하는 감사 로그 항목을 보여줍니다. 이 예시에서는 example-user@example.com이 서비스 계정에 조직 뷰어 역할(roles/resourcemanager.organizationViewer)을 부여했습니다. Resource Manager는 프로젝트를 관리하는 Google Cloud 서비스이므로 protoPayload.serviceName 필드는 cloudresourcemanager.googleapis.com으로 설정됩니다. 또한 resource.type 필드는 project로 설정됩니다.

{
  "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Factivity",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalEmail": "example-user@example.com"
    },
    "methodName": "SetIamPolicy",
    "request": {
      "@type": "type.googleapis.com/google.iam.v1.SetIamPolicyRequest",
      "resource": "my-project"
    },
    "resourceName": "projects/my-project",
    "response": {
      "@type": "type.googleapis.com/google.iam.v1.Policy",
      "bindings": [
        {
          "members": [
            "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com"
          ],
          "role": "roles/resourcemanager.organizationViewer"
        }
      ]
    },
    "serviceName": "cloudresourcemanager.googleapis.com"
  },
  "resource": {
    "type": "project"
  }
}

리소스에 서비스 계정 연결 로그

사용자에게 서비스 계정에 대한 서비스 계정 사용자 역할(roles/iam.serviceAccountUser)이 있으면 사용자는 서비스 계정을 리소스에 연결할 수 있습니다. 리소스에서 실행되는 코드는 Google Cloud 서비스와 리소스에 액세스할 때 리소스에 연결된 서비스 계정을 ID로 사용합니다. 예를 들어 서비스 계정을 Compute Engine 인스턴스에 연결하고 인스턴스의 애플리케이션에서 클라이언트 라이브러리를 사용하여 Google Cloud API를 호출하는 경우 애플리케이션은 인증과 승인에 연결된 서비스 계정을 자동으로 사용합니다.

이 섹션에서는 서비스 계정을 리소스에 연결하면 생성되는 일부 로그를 보여줍니다.

iam.serviceAccounts.actAs 권한 사용에 대한 로그

서비스 계정을 리소스에 연결하려면 iam.serviceAccounts.actAs 권한이 필요합니다. 주 구성원이 이 권한을 사용하여 서비스 계정을 리소스에 연결하면 감사 로그가 생성됩니다.

다음 예시에서는 iam.serviceAccounts.actAs 권한을 사용하여 서비스 계정을 Compute Engine 인스턴스에 연결하는 주 구성원의 로그 항목을 보여줍니다.

{
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalEmail": "example-user@example.com"
    },
    "serviceName": "iam.googleapis.com",
    "methodName": "iam.serviceAccounts.actAs",
    "authorizationInfo": [
      {
        "resource": "projects/-/serviceAccounts/sample-service-account@sample-project.iam.gserviceaccount.com",
        "permission": "iam.serviceAccounts.actAs",
        "granted": true,
        "permissionType": "ADMIN_WRITE"
      }
    ],
    "resourceName": "projects/-/serviceAccounts/sample-service-account@sample-project.iam.gserviceaccount.com",
    "request": {
      "name": "sample-service-account@sample-project.iam.gserviceaccount.com",
      "project_number": "787155667719",
      "@type": "type.googleapis.com/CanActAsServiceAccountRequest"
    },
    "response": {
      "success": true,
      "@type": "type.googleapis.com/CanActAsServiceAccountResponse"
    }
  },
  "insertId": "vojt0vd4fdy",
  "resource": {
    "type": "audited_resource",
    "labels": {
      "project_id": "sample-project",
      "method": "iam.serviceAccounts.actAs",
      "service": "iam.googleapis.com"
    }
  },
  "timestamp": "2024-08-05T21:56:56.097601933Z",
  "severity": "NOTICE",
  "logName": "projects/sample-project/logs/cloudaudit.googleapis.com%2Factivity",
  "receiveTimestamp": "2024-08-05T21:56:56.097601933Z"
}

서비스 계정으로 실행하도록 Compute Engine 인스턴스를 설정하기 위한 로그

사용자에게 서비스 계정에 대한 서비스 계정 사용자 역할(roles/iam.serviceAccountUser)이 있는 경우 사용자는 서비스 계정으로 실행되는 Compute Engine 가상 머신(VM) 인스턴스를 만들 수 있습니다. 이 시나리오에서 사용자는 자신의 사용자 인증 정보로 VM 인스턴스를 만들고 요청에서 사용할 VM 인스턴스의 서비스 계정을 지정합니다.

사용자가 VM 인스턴스를 만들면 Compute Engine은 여러 로그 항목을 만듭니다. 다음 예시는 VM 인스턴스를 만든 사용자와 인스턴스가 사용하는 서비스 계정을 식별하는 첫 번째 로그 항목을 보여줍니다. 이 예시에서 사용자 example-user@example.com은 서비스 계정 my-service-account@my-project.iam.gserviceaccount.com을 사용하는 인스턴스를 만들었습니다. 따라서 protoPayload.authenticationInfo.principalEmail 필드는 example-user@example.com으로 설정되고 protoPayload.request.serviceAccounts[0].email 필드는 my-service-account@my-project.iam.gserviceaccount.com으로 설정됩니다.

{
  "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Factivity",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalEmail": "example-user@example.com"
    },
    "methodName": "v1.compute.instances.insert",
    "request": {
      "@type": "type.googleapis.com/compute.instances.insert",
      "serviceAccounts": [
        {
          "email": "my-service-account@my-project.iam.gserviceaccount.com"
        }
      ]
    },
    "resourceName": "projects/my-project/zones/us-central1-a/instances/my-instance"
  },
  "resource": {
    "type": "gce_instance"
  }
}

서비스 계정 키로 Google Cloud에 액세스하기 위한 로그

이 섹션에서는 서비스 계정 키를 만들고 해당 키를 사용하여 Google Cloud에 액세스할 때 받게 되는 로그 항목을 보여줍니다.

서비스 계정 키를 만들기 위한 로그

서비스 계정에 대해 서비스 계정 키 관리자 역할(roles/iam.serviceAccountKeyAdmin)이 있다면 서비스 계정 키를 만든 다음 키를 사용하여 Google Cloud 서비스에 대한 요청을 인증할 수 있습니다.

다음 예시에서는 서비스 계정 키를 만드는 로그 항목을 보여줍니다. 이 예시에서 사용자 example-user@example.com은 서비스 계정 my-service-account@my-project.iam.gserviceaccount.com의 키를 만들었습니다.

{
  "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Factivity",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalEmail": "example-user@example.com",
    },
    "methodName": "google.iam.admin.v1.CreateServiceAccountKey",
    "request": {
      "@type": "type.googleapis.com/google.iam.admin.v1.CreateServiceAccountKeyRequest",
      "name": "projects/-/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com"
    },
    "resourceName": "projects/-/serviceAccounts/123456789012345678901"
  },
  "resource": {
    "type": "service_account"
  }
}

서비스 계정 키로 인증하기 위한 로그

서비스 계정 키를 만든 다음 키를 사용하여 서비스 계정의 OAuth 2.0 액세스 토큰을 요청하고, 해당 액세스 토큰을 사용하여 Google Cloud 서비스에 대한 요청을 인증할 수 있습니다. 일반적으로 이러한 서비스 감사 로그에는 다음 정보가 포함됩니다.

  • protoPayload.authenticationInfo.principalEmail: 액세스 토큰이 나타내는 서비스 계정의 이메일 주소입니다.
  • protoPayload.authenticationInfo.serviceAccountKeyName: OAuth 2.0 액세스 토큰을 요청할 때 사용된 서비스 계정 키입니다. 이 필드는 //iam.googleapis.com/projects/project-id/serviceAccounts/service-account-email/keys/key-id 형식을 사용하는 전체 리소스 이름으로 서비스 계정 키를 식별합니다.

다음 예시는 Memorystore for Redis 인스턴스를 만들려는 요청에 대한 감사 로그 항목을 보여줍니다. 요청이 서비스 계정의 OAuth 2.0 액세스 토큰으로 인증되었습니다. 이 예시에서 서비스 계정 이름은 my-service-account@my-project.iam.gserviceaccount.com이며 서비스 계정 키 ID는 c71e040fb4b71d798ce4baca14e15ab62115aaef입니다.

{
  "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Factivity",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalEmail": "my-service-account@my-project.iam.gserviceaccount.com",
      "serviceAccountKeyName": "//iam.googleapis.com/projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/c71e040fb4b71d798ce4baca14e15ab62115aaef"
    },
    "methodName": "google.cloud.redis.v1.CloudRedis.CreateInstance",
    "request": {
      "@type": "type.googleapis.com/google.cloud.redis.v1.CreateInstanceRequest"
    }
  }
}

Google Cloud에 액세스하도록 서비스 계정을 가장하기 위한 로그

이 섹션에서는 서비스 계정의 단기 사용자 인증 정보를 만든 후 해당 사용자 인증 정보를 사용하여 서비스 계정을 가장하고 Google Cloud에 액세스할 때 수신되는 로그 항목을 보여줍니다.

단기 사용자 인증 정보를 만들기 위한 로그

서비스 계정에 대한 서비스 계정 토큰 생성자 역할(roles/iam.serviceAccountTokenCreator)이 있는 경우 서비스 계정에 대한 단기 사용자 인증 정보를 만든 다음 사용자 인증 정보를 사용하여 서비스 계정을 가장할 수 있습니다. 예를 들어 Google Cloud에서 실행되지 않는 애플리케이션에서 Google Cloud API를 호출하기 위해 단기 사용자 인증 정보를 만들 수 있습니다.

주 구성원이 단기 사용자 인증 정보를 만들면 IAM이 감사 로그를 생성할 수 있습니다. 이러한 감사 로그를 수신하려면 데이터 액세스 활동에 대해 IAM 감사 로그를 사용 설정해야 합니다.

데이터 액세스 활동에 대해 IAM 감사 로그를 사용 설정하면 IAM은 주 구성원이 단기 사용자 인증 정보를 만들 때마다 감사 로그 항목을 생성합니다. 항목에는 다음 필드가 포함됩니다.

  • protoPayload.authenticationInfo.principalEmail: 단기 사용자 인증 정보를 생성한 주 구성원입니다.
  • resource.labels.email_id: 단기 사용자 인증 정보가 생성된 서비스 계정입니다.

다음 예시에서는 단기 OAuth 2.0 액세스 토큰을 생성하는 요청에 대한 감사 로그 항목을 보여줍니다. 이 예시에서 사용자 example-user@example.com은 서비스 계정 my-service-account@my-project.iam.gserviceaccount.com에 대한 액세스 토큰을 만들었습니다.

{
  "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Fdata_access",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalEmail": "example-user@example.com"
    },
    "methodName": "GenerateAccessToken",
    "request": {
      "@type": "type.googleapis.com/google.iam.credentials.v1.GenerateAccessTokenRequest",
      "name": "projects/-/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com"
    },
    "serviceName": "iamcredentials.googleapis.com"
  },
  "resource": {
    "labels": {
      "email_id": "my-service-account@my-project.iam.gserviceaccount.com",
      "project_id": "my-project",
      "unique_id": "123456789012345678901"
    },
    "type": "service_account"
  }
}

단기 사용자 인증 정보로 인증하기 위한 로그

서비스 계정에 단기 사용자 인증 정보를 만든 후에는 해당 인증 정보를 사용하여 Google Cloud API를 호출할 때 서비스 계정 가장할 수 있습니다.

호출하는 메서드 중 일부는 감사 로그를 생성할 수 있습니다. 일반적으로 이러한 로그 항목은 다음 ID를 표시합니다.

  • 단기 사용자 인증 정보로 가장한 서비스 계정
  • 단기 사용자 인증 정보를 생성한 ID

예를 들어 example-user@example.com 사용자가 my-service-account@my-project.iam.gserviceaccount.com 서비스 계정에 대한 단기 사용자 인증 정보를 만듭니다. 이후 사용자는 단기 사용자 인증 정보로 서비스 계정을 가장하여 새 Pub/Sub 주제를 만듭니다. Pub/Sub는 서비스 계정과 서비스 계정을 가장하는 사용자를 식별하는 로그 항목을 생성합니다.

{
  "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Factivity",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalEmail": "my-service-account@my-project.iam.gserviceaccount.com",
      "serviceAccountDelegationInfo": [
        {
          "firstPartyPrincipal": {
            "principalEmail": "example-user@example.com"
          }
        }
      ]
    },
    "methodName": "google.pubsub.v1.Publisher.CreateTopic",
    "request": {
      "@type": "type.googleapis.com/google.pubsub.v1.Topic",
      "name": "projects/my-project/topics/my-topic"
    },
    "resourceName": "projects/my-project/topics/my-topic"
  },
  "resource": {
    "type": "pubsub_topic"
  }
}

서비스 에이전트에서 수행한 작업에 대한 로그

주 구성원이 작업을 시작하면 서비스 에이전트에서 주 구성원 대신 작업을 실행하는 경우가 있습니다. 하지만 서비스 에이전트의 감사 로그를 검토할 때는 서비스 에이전트가 누구를 대신하여 어떤 이유로 작업을 실행했는지 파악하기 어려울 수 있습니다.

서비스 에이전트 작업 컨텍스트를 이해하는 데 도움이 되도록 일부 서비스 에이전트는 감사 로그에 작업과 연결된 작업 및 작업을 만든 주 구성원과 같은 추가 세부정보를 포함합니다.

다음 서비스 에이전트는 감사 로그에 다음과 같은 추가 세부정보를 포함합니다.

이러한 추가 세부정보는 authenticationInfo 필드에 중첩된 감사 로그의 serviceDelegationHistory 필드에 있습니다. 이 필드에는 다음과 같은 정보가 포함됩니다.

  • 작업을 만든 원래 주 구성원
  • 작업을 실행한 서비스 에이전트
  • 서비스 에이전트가 속한 서비스
  • 작업 ID

예를 들어 example-user@example.com에서 BigQuery Connection API를 사용하여 작업을 만든다고 가정해 보겠습니다. 이 작업을 실행하려면 BigQuery Connection API의 서비스 에이전트 중 하나가 필요합니다. 이 경우 서비스 에이전트 작업에 대한 감사 로그에 다음과 유사한 serviceDelegationHistory 필드가 포함됩니다.

{
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalEmail": "bqcx-442188550395-jujw@gcp-sa-bigquery-condel.iam.gserviceaccount.com",
      "serviceDelegationHistory": {
        "originalPrincipal": "user:my-user@example.com",
        "serviceMetadata": [
          {
            "principalSubject": "serviceAccount:bqcx-442188550395-jujw@gcp-sa-bigquery-condel.iam.gserviceaccount.com",
            "serviceDomain": "bigquery.googleapis.com",
          }
        ]
      }
    }
  }
}

다음 단계