# OpenAI 로그(베타)

## 개요

{% hint style="info" %}
OpenAI 로그 수집은 [오픈 베타](https://docs.panther.com/ko/resources/help/glossary#beta-features) Panther 버전 1.117부터 시작되며 모든 고객에게 제공됩니다. 버그 보고서 및 기능 요청은 Panther 지원팀과 공유해 주세요.
{% endhint %}

Panther는 다음을 가져올 수 있는 기능을 제공합니다 [OpenAI](https://platform.openai.com/docs/overview) 감사 로그를 쿼리하여 [OpenAI 감사 로그 API](https://platform.openai.com/docs/api-reference/audit-logs). Panther는 감사 로그 API를 1분마다 쿼리합니다. Panther가 API에 접근하려면 적절한 권한을 가진 새로운 OpenAI API 키를 생성해야 합니다.

### 일반적인 OpenAI 감사 로그 이벤트 유형

감사 로그 이벤트 유형의 전체 목록 보기 [에 대해 더 읽을 수 있습니다](https://platform.openai.com/docs/api-reference/audit-logs/object). 일반적인 이벤트에는 다음이 포함됩니다:

* `api_key.created`
* `api_key.updated`
* `api_key.deleted`
* `project.created`
* `project.updated`
* `project.deleted`
* `user.added`
* `user.updated`
* `user.deleted`
* `service_account.created`
* `service_account.updated`
* `service_account.deleted`

## OpenAI 로그를 Panther에 온보딩하는 방법

### 사전 요구 사항

* 조직 소유자 또는 관리자 계정으로 OpenAI에 로그인되어 있어야 합니다. 이는 1단계를 완료하는 데 필요합니다.
* OpenAI 조직 설정에서 감사 로그 기능을 활성화해야 합니다:
  1. 다음으로 이동합니다 **조직** > **데이터 컨트롤** > **데이터 보존** 귀하의 OpenAI 계정에서: [조직 데이터 보존 설정](https://platform.openai.com/settings/organization/data-controls/data-retention)
  2. 활성화 **감사 로깅**.
     * 성공적으로 활성화되면 옵션은 다음과 같이 표시됩니다 **활성** 녹색 체크 표시와 함께.

### 1단계: 새로운 OpenAI API 키 생성

{% hint style="info" %}
최소 권한 원칙에 따라 감사 로그에 대해 읽기 전용 권한이 있는 API 키를 사용하는 것을 권장합니다.
{% endhint %}

1. OpenAI 계정에서 다음으로 이동하세요 **설정** > **조직** > **API 키**.
2. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. **새 비밀 키 생성**.
3. 키에 대한 설명 이름을 입력하세요. 예: `Panther 감사 로그 접근`.
4. 키 권한 구성:
   * **권한**: 다음으로 설정 **읽기 전용** (또는 키가 감사 로그에 대한 읽기 권한을 가지고 있는지 확인하세요).
   * 키에 다음 리소스에 대한 접근 권한이 있는지 확인하세요 **감사 로그** 리소스.
5. 다음 값을 복사하세요 **API 키 값** 그리고 안전한 위치에 저장하세요. 다음 단계에서 필요합니다.
   * OpenAI는 이 값을 다시 표시하지 않습니다.

### 2단계: Panther에서 새로운 OpenAI 소스 생성

1. Panther 콘솔의 왼쪽 탐색 창에서 **구성** > **로그 소스**.
2. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. **새로 만들기.**
3. "OpenAI"를 검색한 후 해당 타일을 클릭하세요.
4. 슬라이드 아웃 패널에서 클릭하세요 **설정 시작**.
5. 페이지에서 **구성** 페이지에서 설명적인 **이름**, 예: `내 OpenAI 감사 로그`.
   * 사용자를 사용할 것이며, **로그 유형** 읽기 전용 드롭다운에는 다음이 표시됩니다 `OpenAI.Audit` 값을 복사하세요.
6. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. **설정**.
7. 페이지에서 **자격 증명(Credentials)** 페이지에서 생성한 키로 **API 키** 필드를 채우세요.
8. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. **설정**.
   * Panther가 OpenAI API에 성공적으로 연결할 수 있음을 확인하는 검증 화면으로 안내됩니다.
     * 원하면 하나 이상의 디텍션 팩을 활성화할 수 있습니다.
     * 사용자를 사용할 것이며, **가 활성화될 수 있습니다** "이벤트가 처리되지 않을 때 알러트를 트리거" **설정의 기본값은**예

## 커스텀 디텍션 패턴

### API 키 생성 모니터링 예시

OpenAI 조직에서 새 API 키가 생성될 때 모니터링:

```python
def rule(event):
    return event.get('type') == 'api_key.created'

"httpUserAgent": "Chrome/80.0.3987.132 Safari/537.36",
    actor_email = event.deep_get('actor', 'user', 'email', default='Unknown')
    return f'New OpenAI API key created by {actor_email}'
```

### 관리자 사용자 변경 예시

사용자가 추가되거나 역할이 변경될 때 탐지:

```python
def rule(event):
    event_type = event.get('type', '')
    return event_type in ['user.added', 'user.updated']

def severity(event):
    # 역할 변경에 대해 더 높은 심각도
    if event.get('type') == 'user.updated':
        return 'MEDIUM'
    return 'INFO'
```

### 프로젝트 삭제 모니터링 예시

프로젝트가 삭제될 때 알림:

```python
def rule(event):
    return event.get('type') == 'project.deleted'

def alert_context(event):
    return {
        'actor_email': event.deep_get('actor', 'user', 'email'),
        'project_id': event.deep_get('project', 'id'),
        'project_name': event.deep_get('project', 'name'),
        'timestamp': event.get('effective_at')
    }
```

## 지원되는 로그 유형

### OpenAI.AuditLogs

OpenAI 감사 로그는 API 키 관리, 프로젝트 변경, 사용자 작업 및 접근 제어 수정 등 귀하의 OpenAI 조직 내의 관리 및 보안 관련 이벤트를 추적합니다.

참고: [OpenAI 감사 로그 API 문서](https://platform.openai.com/docs/api-reference/audit-logs)

```yaml
스키마: OpenAI.Audit
설명: |
    OpenAI 감사 로그는 귀하의 OpenAI 조직 내에서의 관리 조치 및 보안 이벤트에 대한 가시성을 제공합니다. 이러한 로그는 API 키 사용, 프로젝트 관리 및 사용자 접근 제어를 추적하는 데 도움을 줍니다.
referenceURL: https://platform.openai.com/docs/api-reference/audit-logs
필드:
    - 이름: id
      required: true
      description: 감사 로그 이벤트의 고유 식별자
      type: string
    - 이름: type
      required: true
      description: 발생한 이벤트 유형
      type: string
    - name: effective_at
      required: true
      description: 이벤트가 발생한 유닉스 타임스탬프(초 단위)
      type: timestamp
      시간형식: unix
      isEventTime: true
    - name: actor
      description: 조치를 수행한 엔터티
      type: object
      필드:
        - 이름: type
          description: 행위자 유형(예: user, service_account, system)
          type: string
        - name: user
          description: 조치를 수행한 사용자에 대한 세부 정보
          type: object
          필드:
            - 이름: id
              description: 사용자의 고유 식별자
              type: string
            - 이름: email
              description: 사용자의 이메일 주소
              type: string
              지표:
                - 이메일
        - name: service_account
          description: 조치를 수행한 서비스 계정에 대한 세부 정보
          type: object
          필드:
            - 이름: id
              description: 서비스 계정의 고유 식별자
              type: string
        - 이름: api_key
          description: 조치를 수행하는 데 사용된 API 키에 대한 세부 정보
          type: object
          필드:
            - 이름: id
              description: API 키의 고유 식별자
              type: string
            - 이름: type
              description: API 키의 유형
              type: string
            - name: user
              description: API 키와 연관된 사용자
              type: object
              필드:
                - 이름: id
                  description: 사용자의 고유 식별자
                  type: string
                - 이름: email
                  description: 사용자의 이메일 주소
                  type: string
                  지표:
                    - 이메일
            - name: service_account
              description: API 키와 연관된 서비스 계정
              type: object
              필드:
                - 이름: id
                  description: 서비스 계정의 고유 식별자
                  type: string
    - name: project
      description: 조치로 영향을 받은 프로젝트에 대한 세부 정보
      type: object
      필드:
        - 이름: id
          description: 프로젝트의 고유 식별자
          type: string
        - 이름: name
          description: 프로젝트의 이름
          type: string
    - 이름: api_key
      description: 조치로 영향을 받은 API 키에 대한 세부 정보
      type: object
      필드:
        - 이름: id
          description: API 키의 고유 식별자
          type: string
        - 이름: type
          description: API 키의 유형
          type: string
        - name: user
          description: API 키와 연관된 사용자
          type: object
          필드:
            - 이름: id
              description: 사용자의 고유 식별자
              type: string
            - 이름: email
              description: 사용자의 이메일 주소
              type: string
              지표:
                - 이메일
        - name: service_account
          description: API 키와 연관된 서비스 계정
          type: object
          필드:
            - 이름: id
              description: 서비스 계정의 고유 식별자
              type: string
    - name: user
      description: 조치로 영향을 받은 사용자에 대한 세부 정보
      type: object
      필드:
        - 이름: id
          description: 사용자의 고유 식별자
          type: string
        - 이름: email
          description: 사용자의 이메일 주소
          type: string
          지표:
            - 이메일
        - name: role
          description: 조직에서의 사용자의 역할
          type: string
    - name: service_account
      description: 조치로 영향을 받은 서비스 계정에 대한 세부 정보
      type: object
      필드:
        - 이름: id
          description: 서비스 계정의 고유 식별자
          type: string
        - 이름: name
          description: 서비스 계정의 이름
          type: string
```
