GCP - Logging Enum
Reading time: 5 minutes
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
기본 정보
이 서비스는 사용자가 GCP의 로그 데이터 및 이벤트를 저장, 검색, 분석, 모니터링 및 경고할 수 있도록 합니다.
Cloud Logging은 다른 GCP 서비스와 완전히 통합되어 모든 GCP 리소스의 로그를 위한 중앙 집중식 저장소를 제공합니다. App Engine, Compute Engine 및 Cloud Functions와 같은 다양한 GCP 서비스에서 로그를 자동으로 수집합니다. Cloud Logging 에이전트나 API를 사용하여 온프레미스 또는 다른 클라우드에서 실행되는 애플리케이션에도 Cloud Logging을 사용할 수 있습니다.
주요 기능:
- 로그 데이터 중앙 집중화: 다양한 출처에서 로그 데이터를 집계하여 애플리케이션 및 인프라에 대한 전체적인 뷰를 제공합니다.
- 실시간 로그 관리: 즉각적인 분석 및 대응을 위해 실시간으로 로그를 스트리밍합니다.
- 강력한 데이터 분석: 고급 필터링 및 검색 기능을 사용하여 대량의 로그 데이터를 신속하게 분석합니다.
- BigQuery와의 통합: 로그를 BigQuery로 내보내어 상세 분석 및 쿼리를 수행합니다.
- 로그 기반 메트릭: 모니터링 및 경고를 위해 로그 데이터에서 사용자 정의 메트릭을 생성합니다.
로그 흐름
 (1) (1).png)
https://betterstack.com/community/guides/logging/gcp-logging/
기본적으로 싱크와 로그 기반 메트릭은 로그가 저장될 위치를 결정합니다.
GCP Logging에서 지원하는 구성
Cloud Logging은 다양한 운영 요구에 맞게 높은 구성 가능성을 제공합니다:
- 로그 버킷 (웹에서의 로그 저장): Cloud Logging에서 로그 보존을 관리하기 위해 버킷을 정의하여 로그 보존을 제공합니다. 로그 항목이 얼마나 오래 보존되는지를 제어할 수 있습니다.
- 기본적으로
_Default
및_Required
버킷이 생성됩니다 (하나는 다른 하나가 기록하지 않는 내용을 기록합니다). - _Required는:
`
```
LOG_ID("cloudaudit.googleapis.com/activity") OR LOG_ID("externalaudit.googleapis.com/activity") OR LOG_ID("cloudaudit.googleapis.com/system_event") OR LOG_ID("externalaudit.googleapis.com/system_event") OR LOG_ID("cloudaudit.googleapis.com/access_transparency") OR LOG_ID("externalaudit.googleapis.com/access_transparency")
```
```
- **데이터의 보존 기간**은 버킷별로 구성되며 **최소 1일 이상이어야 합니다.** 그러나 **\_Required의 보존 기간은 400일이며** 수정할 수 없습니다.
- 로그 버킷은 **Cloud Storage에서 볼 수 없습니다.**
2. **로그 싱크(웹의 로그 라우터):** **필터**에 따라 Pub/Sub, BigQuery 또는 Cloud Storage와 같은 다양한 목적지로 **로그 항목을 내보내기 위해 싱크를 생성합니다.**
- 기본적으로 \_Default 및 \_Required 버킷에 대한 싱크가 생성됩니다:
- ```bash
_Required logging.googleapis.com/projects/<proj-name>/locations/global/buckets/_Required LOG_ID("cloudaudit.googleapis.com/activity") OR LOG_ID("externalaudit.googleapis.com/activity") OR LOG_ID("cloudaudit.googleapis.com/system_event") OR LOG_ID("externalaudit.googleapis.com/system_event") OR LOG_ID("cloudaudit.googleapis.com/access_transparency") OR LOG_ID("externalaudit.googleapis.com/access_transparency")
_Default logging.googleapis.com/projects/<proj-name>/locations/global/buckets/_Default NOT LOG_ID("cloudaudit.googleapis.com/activity") AND NOT LOG_ID("externalaudit.googleapis.com/activity") AND NOT LOG_ID("cloudaudit.googleapis.com/system_event") AND NOT LOG_ID("externalaudit.googleapis.com/system_event") AND NOT LOG_ID("cloudaudit.googleapis.com/access_transparency") AND NOT LOG_ID("externalaudit.googleapis.com/access_transparency")
```
- **제외 필터:** 특정 로그 항목이 수집되는 것을 방지하기 위해 **제외를 설정할 수 있으며**, 비용을 절감하고 불필요한 노이즈를 줄일 수 있습니다.
3. **로그 기반 메트릭:** 로그의 내용을 기반으로 **사용자 정의 메트릭을 구성**하여 로그 데이터를 기반으로 경고 및 모니터링을 가능하게 합니다.
4. **로그 뷰:** 로그 뷰는 로그 버킷 내에서 **누가 로그에 접근할 수 있는지에 대한 고급 및 세부적인 제어를 제공합니다.**
- Cloud Logging은 **모든 버킷에 대해 `_AllLogs` 뷰를 자동으로 생성**하며, 이는 모든 로그를 보여줍니다. Cloud Logging은 또한 `_Default` 버킷에 대해 `_Default`라는 뷰를 생성합니다. `_Default` 버킷의 `_Default` 뷰는 데이터 접근 감사 로그를 제외한 모든 로그를 보여줍니다. `_AllLogs` 및 `_Default` 뷰는 수정할 수 없습니다.
IAM 정책을 사용하여 특정 로그 뷰만 사용할 수 있도록 주체를 허용할 수 있습니다:
```
{
"bindings": [
{
"members": ["user:username@gmail.com"],
"role": "roles/logging.viewAccessor",
"condition": {
"title": "Bucket reader condition example",
"description": "Grants logging.viewAccessor role to user username@gmail.com for the VIEW_ID log view.",
"expression": "resource.name == \"projects/PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME/views/VIEW_ID\""
}
}
],
"etag": "BwWd_6eERR4=",
"version": 3
}
```
### 기본 로그
기본적으로 **Admin Write** 작업(관리 활동 감사 로그라고도 함)이 기록되며(메타데이터 또는 구성 정보를 작성) **비활성화할 수 없습니다**.
그런 다음 사용자는 **Data Access 감사 로그**를 활성화할 수 있으며, 이는 **Admin Read, Data Write 및 Data Write**입니다.
각 로그 유형에 대한 자세한 정보는 문서에서 확인할 수 있습니다: [https://cloud.google.com/iam/docs/audit-logging](https://cloud.google.com/iam/docs/audit-logging)
그러나 기본적으로 **`GetIamPolicy`** 작업 및 기타 읽기 작업이 **기록되지 않음**을 의미합니다. 따라서 기본적으로 환경을 열거하려는 공격자는 시스템 관리자가 더 많은 로그 생성을 구성하지 않는 한 잡히지 않습니다.
콘솔에서 더 많은 로그를 활성화하려면 시스템 관리자가 [https://console.cloud.google.com/iam-admin/audit](https://console.cloud.google.com/iam-admin/audit)로 이동하여 활성화해야 합니다. 두 가지 다른 옵션이 있습니다:
- **기본 구성**: 기본 구성을 생성하고 모든 Admin Read 및/또는 Data Read 및/또는 Data Write 로그를 기록하고 면제된 주체를 추가할 수 있습니다:
<figure><img src="../../../images/image (338).png" alt=""><figcaption></figcaption></figure>
- **서비스 선택**: 또는 로그를 생성할 서비스와 해당 서비스에 대한 로그 유형 및 면제된 주체를 **선택**할 수 있습니다.
또한 기본적으로 이러한 로그만 생성되며, 더 많은 로그를 생성하면 비용이 증가합니다.
### 열거
`gcloud` 명령줄 도구는 GCP 생태계의 필수적인 부분으로, 리소스 및 서비스를 관리할 수 있습니다. `gcloud`를 사용하여 로그 구성 및 액세스 로그를 관리하는 방법은 다음과 같습니다.
```
# List buckets
gcloud logging buckets list
gcloud logging buckets describe <bucket-name> --location <location>
# List log entries: only logs that contain log entries are listed.
gcloud logging logs list
# Get log metrics
gcloud logging metrics list
gcloud logging metrics describe <metric-name>
# Get log sinks
gcloud logging sinks list
gcloud logging sinks describe <sink-name>
# Get log views
gcloud logging views list --bucket <bucket> --location global
gcloud logging views describe --bucket <bucket> --location global <view-id> # view-id is usually the same as the bucket name
# Get log links
gcloud logging links list --bucket _Default --location global
gcloud logging links describe <link-id> --bucket _Default --location global