Vertex AI Workbench에서 생성된 감사 로그에 대한 자세한 내용은 관리형 노트북 또는 사용자 관리 노트북의 감사 로깅 페이지를 참조하세요.
이 문서에서는 Vertex AI에서 Cloud 감사 로그의 일부로 만든 감사 로그를 설명합니다.
개요
Google Cloud 서비스는 Google Cloud 리소스 내에서 감사 로그를 작성하여 '누가, 언제, 어디서, 무엇을 했는지'라는 질문에 답하는 데 도움을 줍니다.
Google Cloud 프로젝트에는 Google Cloud 프로젝트 내에 있는 리소스의 감사 로그만 있습니다. 폴더, 조직, 결제 계정과 같은 다른 Google Cloud 리소스에는 항목 자체의 감사 로그가 있습니다.
Cloud 감사 로그의 전반적인 개요는 Cloud 감사 로그 개요를 참조하세요. 감사 로그 형식에 대한 자세한 내용은 감사 로그 이해를 참조하세요.
사용 가능한 감사 로그
Vertex AI에 사용할 수 있는 감사 로그 유형은 다음과 같습니다.
-
관리자 활동 감사 로그
메타데이터 또는 구성 정보를 쓰는 '관리자 쓰기' 작업이 포함됩니다.
관리자 활동 감사 로그는 사용 중지할 수 없습니다.
-
데이터 액세스 감사 로그
메타데이터 또는 구성 정보를 읽는 '관리자 읽기' 작업이 포함됩니다. 또한 사용자가 제공한 데이터를 읽거나 쓰는 '데이터 읽기' 및 '데이터 쓰기' 작업도 포함됩니다.
데이터 액세스 감사 로그를 받으려면 이를 명시적으로 사용 설정해야 합니다.
감사 로그 유형에 대한 자세한 내용은 감사 로그 유형을 참조하세요.
감사 대상 작업
다음은 Vertex AI의 각 감사 로그 유형에 해당하는 API 작업을 요약한 표입니다.
감사 로그 범주 | Vertex AI 작업 |
---|---|
관리자 활동 감사 로그 | batchPredictionJobs.cancel batchPredictionJobs.create batchPredictionJobs.delete customJobs.cancel customJobs.create customJobs.delete dataLabelingJobs.cancel dataLabelingJobs.create dataLabelingJobs.delete datasets.create datasets.delete datasets.export datasets.import datasets.patch endpoints.create endpoints.delete endpoints.deployModel endpoints.patch endpoints.undeployModel featurestores.create featurestores.delete featurestores.patch featurestores.setIamPolicy featurestores.entityTypes.create featurestores.entityTypes.delete featurestores.entityTypes.patch featurestores.entityTypes.setIamPolicy featurestores.entityTypes.features.batchCreate featurestores.entityTypes.features.create featurestores.entityTypes.features.delete featurestores.entityTypes.features.patch hyperparameterTuningJobs.cancel hyperparameterTuningJobs.create hyperparameterTuningJobs.delete indexEndpoints.create indexEndpoints.delete indexEndpoints.deployIndex indexEndpoints.mutateDeployedIndex indexEndpoints.patch indexEndpoints.undeployIndex metadataStores.create metadataStores.delete metadataStores.artifacts.create metadataStores.artifacts.delete metadataStores.artifacts.patch metadataStores.artifacts.purge metadataStores.contexts.addContextArtifactsAndExecutions metadataStores.contexts.addContextChildren metadataStores.contexts.create metadataStores.contexts.delete metadataStores.contexts.patch metadataStores.contexts.purge metadataStores.executions.addExecutionEvents metadataStores.executions.create metadataStores.executions.delete metadataStores.executions.patch metadataStores.executions.purge metadataStores.metadataSchemas.create migratableResources.batchMigrate modelDeploymentMonitoringJobs.create modelDeploymentMonitoringJobs.delete modelDeploymentMonitoringJobs.patch modelDeploymentMonitoringJobs.pause modelDeploymentMonitoringJobs.resume models.delete models.deleteVersion models.export models.mergeVersionAliases models.patch models.upload models.evaluations.import models.evaluations.slices.batchImport modelMonitors.create modelMonitors.delete modelMonitors.update modelMonitoringJobs.create modelMonitoringJobs.delete operations.cancel pipelineJobs.cancel pipelineJobs.create pipelineJobs.delete schedules.create schedules.delete schedules.update specialistPools.create specialistPools.delete specialistPools.patch studies.create studies.delete studies.trials.addTrialMeasurement studies.trials.complete studies.trials.create studies.trials.delete studies.trials.stop studies.trials.suggest tensorboards.create tensorboards.delete tensorboards.patch tensorboards.experiments.create tensorboards.experiments.delete tensorboards.experiments.patch tensorboards.experiments.write tensorboards.experiments.runs.batchCreate tensorboards.experiments.runs.create tensorboards.experiments.runs.delete tensorboards.experiments.runs.patch tensorboards.experiments.runs.write tensorboards.experiments.runs.timeSeries.batchCreate tensorboards.experiments.runs.timeSeries.create tensorboards.experiments.runs.timeSeries.delete tensorboards.experiments.runs.timeSeries.patch trainingPipelines.cancel trainingPipelines.create trainingPipelines.delete tuningJobs.cancel tuningJobs.create deploymentResourcePool.create deploymentResourcePool.delete |
데이터 액세스(ADMIN_READ) 감사 로그 | batchPredictionJobs.get batchPredictionJobs.list customJobs.get customJobs.list dataLabelingJobs.get dataLabelingJobs.list datasets.get datasets.list datasets.annotationSpecs.get datasets.annotations.list datasets.savedQueries.list endpoints.get endpoints.list featurestores.get featurestores.getIamPolicy featurestores.list featurestores.searchFeatures featurestores.entityTypes.get featurestores.entityTypes.getIamPolicy featurestores.entityTypes.list featurestores.entityTypes.features.get featurestores.entityTypes.features.list hyperparameterTuningJobs.get hyperparameterTuningJobs.list indexEndpoints.get indexEndpoints.list indexes.get indexes.delete metadataStores.get metadataStores.list metadataStores.artifacts.get metadataStores.artifacts.list metadataStores.artifacts.queryArtifactLineageSubgraph metadataStores.contexts.get metadataStores.contexts.list metadataStores.contexts.queryContextLineageSubgraph metadataStores.executions.get metadataStores.executions.list metadataStores.executions.queryExecutionInputsAndOutputs metadataStores.metadataSchemas.get metadataStores.metadataSchemas.list migratableResources.search modelDeploymentMonitoringJobs.get modelDeploymentMonitoringJobs.list models.get models.list models.listVersions models.evaluations.get models.evaluations.list models.evaluations.slices.get models.evaluations.slices.list modelMonitors.get modelMonitors.list modelMonitoringJobs.get modelMonitoringJobs.list pipelineJobs.get pipelineJobs.list schedules.get schedules.list specialistPools.get specialistPools.list studies.get studies.list studies.lookup studies.trials.checkTrialEarlyStoppingState studies.trials.get studies.trials.list studies.trials.listOptimalTrials tensorboards.get tensorboards.list tensorboards.experiments.get tensorboards.experiments.list tensorboards.experiments.runs.get tensorboards.experiments.runs.list tensorboards.experiments.runs.timeSeries.batchRead tensorboards.experiments.runs.timeSeries.exportTensorboardTimeSeries tensorboards.experiments.runs.timeSeries.get tensorboards.experiments.runs.timeSeries.list tensorboards.experiments.runs.timeSeries.read tensorboards.experiments.runs.timeSeries.readBlobData trainingPipelines.get trainingPipelines.list tuningJobs.get tuningJobs.list deploymentResourcePool.get deploymentResourcePool.list deploymentResourcePool.queryDeployedModels |
데이터 액세스(DATA_READ) 감사 로그 | datasets.dataItems.list endpoints.explain endpoints.predict endpoints.rawPredict featurestores.batchReadFeatureValues featurestores.entityTypes.exportFeatureValues featurestores.entityTypes.readFeatureValues featurestores.entityTypes.streamingReadFeatureValues indexEndpoints.findNeighbors modelDeploymentMonitoringJobs.searchModelDeploymentMonitoringStatsAnomalies modelMonitors.searchModelMonitoringAlerts modelMonitors.searchModelMonitoringStats |
데이터 액세스(DATA_WRITE) 감사 로그 | featurestores.entityTypes.importFeatureValues indexes.create indexes.patch indexes.removeDatapoints indexes.upsertDatapoints |
감사 로그 형식
감사 로그 항목에는 다음과 같은 객체가 포함됩니다.
LogEntry
유형의 객체인 로그 항목 자체입니다. 유용한 필드는 다음과 같습니다.logName
에는 리소스 ID와 감사 로그 유형이 있습니다.resource
에는 감사 작업 대상이 있습니다.timeStamp
에는 감사 작업 시간이 있습니다.protoPayload
에는 감사 정보가 있습니다.
로그 항목의
protoPayload
필드에AuditLog
객체로 보관되는 감사 로깅 데이터입니다.선택적 서비스별 감사 정보로, 서비스별 객체입니다. 이전 통합에서 이 객체는
AuditLog
객체의serviceData
필드에 보관하고 최신 통합은metadata
필드를 사용합니다.
이러한 객체의 다른 필드와 필드 해석 방법은 감사 로그 이해를 참조하세요.
로그 이름
Cloud 감사 로그의 로그 이름에는 감사 로그를 소유한 Google Cloud 프로젝트나 기타 Google Cloud 항목을 나타내는 리소스 식별자와 로그에 관리자 활동, 데이터 액세스, 정책 거부 또는 시스템 이벤트 감사 로깅 데이터가 포함되어 있는지 여부가 포함됩니다.
다음은 리소스 식별자 변수를 포함한 감사 로그 이름입니다.
projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fpolicy folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Factivity folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fdata_access folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fsystem_event folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fpolicy billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com%2Factivity billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com%2Fdata_access billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com%2Fpolicy organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Factivity organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fdata_access organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fsystem_event organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fpolicy
서비스 이름
Vertex AI 감사 로그는 aiplatform.googleapis.com
이라는 서비스 이름을 사용합니다.
모든 Cloud Logging API 서비스 이름과 해당 모니터링 리소스 유형의 목록은 리소스에 서비스 매핑을 참조하세요.
리소스 유형
Vertex AI 감사 로그는 모든 감사 로그에 리소스 유형 audited_resource
를 사용합니다.
모든 Cloud Logging 모니터링 리소스 유형과 설명 정보의 목록은 모니터링 리소스 유형을 참조하세요.
호출자 ID
호출자 IP 주소는 AuditLog
객체의 RequestMetadata.caller_ip
필드에 보관됩니다. Logging은 특정 호출자 ID와 IP 주소를 수정할 수 있습니다.
감사 로그에서 수정된 정보에 대한 자세한 내용은 감사 로그의 호출자 ID를 참조하세요.
감사 로깅 사용 설정
관리자 활동 감사 로그는 항상 사용 설정되며 사용 중지할 수 없습니다.
데이터 액세스 감사 로그는 기본적으로 사용 중지되어 있으며 명시적으로 사용 설정하지 않으면 작성되지 않습니다. 단, 사용 중지할 수 없는 BigQuery의 데이터 액세스 감사 로그는 예외입니다.
데이터 액세스 감사 로그의 일부 또는 전부를 사용 설정하는 방법은 데이터 액세스 감사 로그 사용 설정을 참조하세요.
권한 및 역할
IAM 권한과 역할에 따라 Google Cloud 리소스의 감사 로그 데이터에 액세스할 수 있는지 여부가 결정됩니다.
사용 사례에 적용할 Logging 관련 권한 및 역할을 결정할 때는 다음 사항을 고려하세요.
로그 뷰어 역할(
roles/logging.viewer
)은 관리자 활동, 정책 거부, 시스템 이벤트 감사 로그에 대한 읽기 전용 액세스 권한을 부여합니다. 이 역할만 있으면_Default
버킷에 있는 데이터 액세스 감사 로그를 볼 수 없습니다.비공개 로그 뷰어 역할
(roles/logging.privateLogViewer
)에는roles/logging.viewer
에 포함된 권한과_Default
버킷의 데이터 액세스 감사 로그에 대한 읽기 권한도 포함되어 있습니다.비공개 로그가 사용자 정의된 버킷에 저장된 경우 이러한 버킷에서 로그 읽기 권한이 있는 모든 사용자가 비공개 로그를 읽을 수 있습니다. 로그 버킷에 대한 상세 설명은 라우팅 및 스토리지 개요를 참조하세요.
감사 로그 데이터에 적용되는 IAM 권한과 역할에 대한 자세한 내용은 IAM으로 액세스 제어를 참조하세요.
로그 보기
모든 감사 로그를 쿼리하거나 감사 로그 이름별로 로그를 쿼리할 수 있습니다. 감사 로그 이름에는 감사 로깅 정보를 보려는 Google Cloud 프로젝트, 폴더, 결제 계정 또는 조직의 리소스 식별자가 포함됩니다.
쿼리에서 색인이 생성된 LogEntry
필드를 지정할 수 있습니다.
로그 쿼리에 대한 자세한 내용은 로그 탐색기에서 쿼리 빌드를 참고하세요.
로그 탐색기를 사용하면 개별 로그 항목을 필터링하여 볼 수 있습니다. SQL을 사용하여 로그 항목 그룹을 분석하려면 로그 애널리틱스 페이지를 사용하세요. 자세한 내용은 다음을 참고하세요.
대부분의 감사 로그는 Google Cloud 콘솔, Google Cloud CLI 또는 Logging API를 사용하여 Cloud Logging에서 볼 수 있습니다. 하지만 결제와 관련된 감사 로그의 경우 Google Cloud CLI 또는 Logging API만 사용할 수 있습니다.
콘솔
Google Cloud 콘솔에서 로그 탐색기를 사용하여 Google Cloud 프로젝트, 폴더 또는 조직의 감사 로그 항목을 검색할 수 있습니다.
-
Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.
검색창을 사용하여 이 페이지를 찾은 경우 부제목이 Logging인 결과를 선택합니다.
기존 Google Cloud 프로젝트, 폴더 또는 조직을 선택합니다.
모든 감사 로그를 표시하려면 쿼리 편집기 필드에 다음 쿼리 중 하나를 입력한 후 쿼리 실행을 클릭합니다.
logName:"cloudaudit.googleapis.com"
protoPayload."@type"="type.googleapis.com/google.cloud.audit.AuditLog"
특정 리소스 및 감사 로그 유형에 대한 감사 로그를 표시하려면 쿼리 빌더 창에서 다음을 수행합니다.
리소스 유형에서 감사 로그를 확인할 Google Cloud 리소스를 선택하세요.
로그 이름에서 확인할 감사 로그 유형을 선택합니다.
- 관리자 활동 감사 로그의 경우 activity를 선택합니다.
- 데이터 액세스 감사 로그의 경우 data_access를 선택합니다.
- 시스템 이벤트 감사 로그의 경우 system_event를 선택합니다.
- 정책 거부 감사 로그의 경우 policy를 선택합니다.
쿼리 실행을 클릭합니다.
이러한 옵션 중 어느 것도 표시되지 않으면 Google Cloud 프로젝트나 폴더, 조직에 해당 유형의 감사 로그가 없다는 의미입니다.
로그 탐색기에서 로그를 확인하려고 할 때 문제가 발생하는 경우 문제 해결 정보를 참조하세요.
로그 탐색기를 사용한 쿼리에 대한 상세 설명은 로그 탐색기에서 쿼리 빌드를 참조하세요.
gcloud
Google Cloud CLI는 Logging API에 명령줄 인터페이스를 제공합니다. 각 로그 이름에 유효한 리소스 식별자를 제공합니다. 예를 들어 쿼리에 PROJECT_ID가 포함된 경우 제공한 프로젝트 식별자가 현재 선택된 Google Cloud 프로젝트를 참조해야 합니다.
Google Cloud 프로젝트 수준의 감사 로그 항목을 읽으려면 다음 명령어를 실행합니다.
gcloud logging read "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com" \ --project=PROJECT_ID
폴더 수준의 감사 로그 항목을 읽으려면 다음 명령어를 실행합니다.
gcloud logging read "logName : folders/FOLDER_ID/logs/cloudaudit.googleapis.com" \ --folder=FOLDER_ID
조직 수준의 감사 로그 항목을 읽으려면 다음 명령어를 실행합니다.
gcloud logging read "logName : organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com" \ --organization=ORGANIZATION_ID
Cloud Billing 계정 수준의 감사 로그 항목을 읽으려면 다음 명령어를 실행합니다.
gcloud logging read "logName : billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com" \ --billing-account=BILLING_ACCOUNT_ID
1일 이상 된 로그를 읽으려면 명령어에 --freshness
플래그를 추가합니다.
gcloud CLI 사용에 대한 상세 설명은 gcloud logging read
를 참조하세요.
REST
쿼리를 빌드할 때 각 로그 이름에 유효한 리소스 식별자를 제공합니다. 예를 들어 쿼리에 PROJECT_ID가 포함된 경우 제공한 프로젝트 식별자가 현재 선택된 Google Cloud 프로젝트를 참조해야 합니다.
예를 들어 Logging API를 사용하여 프로젝트 수준의 감사 로그 항목을 보려면 다음을 수행합니다.
entries.list
메서드 문서의 API 사용해 보기 섹션으로 이동합니다.API 사용해 보기 양식의 요청 본문 부분에 다음을 입력합니다. 이 자동 입력된 양식을 클릭하면 요청 본문이 자동으로 입력되지만 각 로그 이름에 유효한 PROJECT_ID를 입력해야 합니다.
{ "resourceNames": [ "projects/PROJECT_ID" ], "pageSize": 5, "filter": "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com" }
실행을 클릭합니다.
감사 로그 라우팅
다른 종류의 로그를 라우팅할 때와 같은 방식으로 지원되는 대상에 감사 로그를 라우팅할 수 있습니다. 다음과 같은 이유로 감사 로그를 라우팅해야 할 수 있습니다.
장기간 감사 로그를 보관하거나 더욱 강력한 검색 기능을 사용하려면 감사 로그의 복사본을 Cloud Storage, BigQuery 또는 Pub/Sub로 라우팅하면 됩니다. Pub/Sub을 사용하면 다른 애플리케이션, 다른 저장소, 서드 파티로 라우팅할 수 있습니다.
조직 전체의 감사 로그를 관리하려면 조직의 Google Cloud 프로젝트 일부 또는 전체에서 로그를 라우팅할 수 있는 집계 싱크를 만들면 됩니다.
- 사용 설정한 데이터 액세스 감사 로그로 인해 Google Cloud 프로젝트에서 로그 할당량을 초과하는 경우 Logging에서 데이터 액세스 감사 로그를 제외하는 싱크를 만들 수 있습니다.
로그 라우팅에 대한 안내는 지원되는 대상으로 로그 라우팅을 참조하세요.
가격 책정
가격 책정에 대한 자세한 내용은 Cloud Logging 가격 책정 요약을 참조하세요.