> For the complete documentation index, see [llms.txt](https://docs.panther.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.panther.com/ko/detections/policies.md).

# 정책

## 개요

정책은 잘못 구성된 클라우드 인프라를 식별하고 팀을 위한 알러트를 생성하는 데 사용됩니다. Panther는 이미 작성되어 지속적으로 업데이트되는 여러 [Panther 관리형 정책](/ko/detections/panther-managed.md).

정책은 다음과 같이 작성할 수 있습니다 [Python 디택션](/ko/detections/rules/python.md); 다음과 같이 작성할 수는 없습니다 [단순 디택션](/ko/detections/rules/writing-simple-detections.md).

정책에 일치해도 컴플라이언스 실패는 발생하지만, [신호](/ko/detections/signals.md). 컴플라이언스 실패는 다음에서 확인할 수 있습니다:

* 다음에서 [Data Explorer](/ko/search/data-explorer.md), 다음에서 `panther_cloudsecurity.public` 데이터베이스의 `compliance_history` 테이블
* 다음에서 [검색](/ko/search/search-tool.md), 다음에서 **Could Security** 데이터베이스의 **컴플라이언스 기록** 테이블

## 정책 작성 방법

새 정책을 작성하기 전에, 기존에 있는지 확인하는 것을 잊지 마세요 [Panther 관리형 정책](/ko/detections/panther-managed.md) 귀하의 요구를 충족하는 것이 있는지.

{% hint style="warning" %}
Panther에서 디택션 내부에서 외부 API 요청을 하는 것은 매우 권장되지 않습니다. 일반적으로 디택션은 매우 대규모로 처리되므로 API 요청을 하면 수신 시스템에 과부하가 걸리고 룰이 다음을 초과할 수 있습니다 [15초 실행 시간 제한](/ko/detections/rules.md#rule-errors-and-scheduled-rule-errors).
{% endhint %}

### 정책 본문

정책 본문은 다음을 충족해야 합니다:

* 유효한 Python 3이어야 합니다.
* 다음을 정의합니다 `policy()` 하나의 인수를 수락하는 함수 `리소스` 인수.
  * 각 정책은 `리소스` 지원되는 리소스에서 특정 리소스 유형의 입력을 받습니다 [지원되는 리소스](/ko/cloud-scanning/cloud-resource-attributes.md) 페이지를 참조하세요.
* 다음을 반환합니다 `불리언` 정책 함수에서.

```python
def policy(resource):
  return True
```

Python 본문에서는 다음의 인수 이름을 지정해야 합니다 `policy()` 함수 `리소스` 그리고 다음 작업도 수행할 수 있습니다:

* 표준 Python 3 라이브러리 가져오기
* 사용자 정의 `aws_globals` 모듈
* Panther에서 정의한 `panther` 모듈
* 필요에 따라 추가 헬퍼 함수를 정의합니다
* 룰 함수 범위 밖에 변수와 클래스를 정의합니다

다음의 스키마를 사용하면 [지원되는 리소스](/ko/cloud-scanning/cloud-resource-attributes.md) 리소스에서 사용 가능한 모든 필드에 대한 세부 정보를 제공합니다. 최상위 키는 항상 존재하지만, 다음을 포함할 수 있습니다 `NoneType` 값.

### 로컬과 Panther 콘솔에서 정책 작성하기

Panther 콘솔에서 정책을 작성하고 배포할 수도 있고, 로컬에서 작성한 뒤 다음을 사용해 Panther에 업로드할 수도 있습니다 [Panther Analysis Tool (PAT)](/ko/panther/detections-repo/pat.md) CLI 워크플로:

{% tabs %}
{% tab title="콘솔" %}
**Panther 콘솔에서 정책 작성하기**

1. Panther 콘솔의 왼쪽 탐색 표시줄에서 다음을 클릭합니다: **디택션**.
2. 오른쪽 상단에서 다음을 클릭합니다: **새로 만들기**.
3. 다음의 **정책** 타일에서 다음을 클릭합니다: **시작**.
4. 생성 페이지에서 정책을 구성합니다:
   * **이름**: 정책에 대한 설명적인 이름을 입력합니다.
   * **ID** (선택 사항)**:** 펜 아이콘을 클릭하고 정책의 고유 ID를 입력합니다.
   * 오른쪽 상단의 **활성화** 토글은 기본적으로 `켬` 로 설정됩니다. 정책을 비활성화하려면 토글을 `끔`.
   * 다음의 **다음 리소스 유형에 대해** 섹션:
     * **리소스 유형**: 이 정책을 적용할 하나 이상의 리소스 유형을 선택합니다. 모든 리소스에 적용하려면 비워 둡니다.
   * 다음의 **디택션** 섹션:
     * 다음의 **정책 함수** 텍스트 편집기에서 Python `정책` 함수를 작성하여 디택션을 정의합니다.
       * 디택션 템플릿과 예시는 다음을 참조하세요 [panther\_analysis GitHub 저장소](https://github.com/panther-labs/panther-analysis/tree/master/templates)
   * 다음의 **알러트 필드 설정** 섹션:
     * **심각도**: 다음을 선택합니다 [심각도 수준](/ko/detections/rules.md#alert-severity) 이 디택션으로 트리거되는 알러트에 대해.
     * 다음의 **선택 필드** 섹션에서 다음 필드의 값을 선택적으로 제공합니다:
       * **설명**: 정책에 대한 추가 컨텍스트를 입력합니다.
       * **런북**: 이 정책과 관련된 절차와 운영을 입력합니다.
         * 자세한 내용은 [알러트 런북](/ko/alerts/alert-runbooks.md).
         * 설명적인 런북을 제공하는 것이 권장됩니다. 왜냐하면 [Panther AI 알러트 분류](/ko/alerts.md#panther-ai-alert-triage) 가 이를 고려하기 때문입니다.
       * **참조**: 이 룰과 관련된 추가 정보를 담은 외부 링크를 입력합니다.
       * **대상 재정의:** 심각도와 관계없이 이 디택션의 알러트를 받을 대상지를 선택합니다. 대상지는 룰 함수에서 동적으로 설정할 수도 있습니다. 다음을 참조하세요 [라우팅 순서 우선순위](/ko/alerts/destinations.md#routing-order-precedence) 라우팅 우선순위에 대해 자세히 알아보세요.
       * **무시 패턴**: 무시할 패턴을 입력합니다.
       * **사용자 지정 태그**: 룰을 한눈에 이해하는 데 도움이 되는 사용자 지정 태그를 입력합니다(예: `HIPAA`.)
       * 다음의 **프레임워크 매핑** 섹션:
         1. 다음을 클릭합니다: **새로 추가** 를 입력합니다.
         2. 다음 필드의 값을 제공합니다:
            * **보고서 키**: 보고서와 관련된 키를 입력합니다.
            * **보고서 값**: 해당 보고서의 값을 입력합니다.
   * 다음의 **테스트** 섹션:
     * 다음의 **단위 테스트** 섹션에서 다음을 클릭합니다 **새로 추가** 에서 [테스트 만들기](/ko/detections/testing.md) 이전 단계에서 정의한 정책에 대해.
5. 오른쪽 상단에서 다음을 클릭합니다: **저장**.
   {% endtab %}

{% tab title="CLI" %}
로컬 디택션 파일은 GitHub 또는 GitLab과 같은 버전 관리 시스템에서 관리하는 것을 권장합니다.

{% hint style="info" %}
Panther의 포크를 생성하는 것이 모범 사례입니다 [오픈 소스 분석 저장소](https://github.com/panther-labs/panther-analysis), 하지만 처음부터 직접 리포지토리를 만들 수도 있습니다.
{% endhint %}

**파일 설정**

각 디택션은 다음으로 구성됩니다:

* Python 파일(다음 확장자를 가진 파일) `.py` 를 포함하는, 디택션/감사 로직이 들어 있는 파일
* YAML 또는 JSON 사양 파일(다음 확장자를 가진 파일) `.yml` 또는 `.json` 를 포함하는, 디택션의 메타데이터 속성이 들어 있는 파일입니다.
  * 관례상 이 파일에는 Python 파일과 같은 이름을 사용합니다.

**폴더 설정**

정책을 폴더로 그룹화하는 경우, 각 폴더 이름에는 다음이 포함되어야 합니다 `정책` 업로드 시 찾을 수 있도록(PAT 또는 콘솔의 일괄 업로더 사용)

로그/리소스 유형을 기준으로 정책을 폴더로 그룹화하는 것을 권장합니다. 예: `suricata_rules` 또는 `aws_s3_policies`. 오픈 소스 [Panther Analysis](https://github.com/panther-labs/panther-analysis) 리포지토리를 참고 자료로 사용할 수 있습니다.

**로컬에서 정책 작성하기**

1. 정책을 작성하고(선택한 폴더에) 다음 이름으로 저장합니다 `my_new_policy.py`:\
   def polcy(resource):

   ```
   def policy(resource):  
     return resource['Region'] != 'us-east-1'
   ```
2. 아래 템플릿을 사용해 사양 파일을 만듭니다:

   ```
   AnalysisType: policy
   Enabled: true
   Filename: my_new_policy.py
   PolicyID: Category.Type.MoreInfo
   ResourceType:
     - Resource.Type.Here
   Severity: Info|Low|Medium|High|Critical
   사양 형식을 확인하는 예시 정책
   Tags:
     - 태그
     - 이동
     - 여기
   변경한 사양 형식을 누가 수정했는지 알아봅니다.
   Reference: https://www.link-to-info.io
   ```

전체를 확인하세요 [Writing Python Detections의 Python 정책 사양 참조](/ko/detections/rules/python.md#python-policy-specification-reference) 필수 및 선택 필드의 전체 목록은
{% endtab %}
{% endtabs %}

## 관련 알러트 제목

정책의 알러트 제목 설정 우선순위는 룰 및 예약 룰과 동일합니다. 다음을 참조하세요 [알러트 제목이 설정되는 방식](/ko/detections/rules.md#how-the-alert-title-is-set) 섹션.

## 특정 클라우드 리소스 무시하기

특정 클라우드 리소스에 대해 예외를 적용하도록 정책을 구성할 수 있습니다. 즉, 해당 리소스에 대해서는 정책이 실행되지 않으며 알러트도 생성되지 않습니다. 이를 "정책 억제"라고도 합니다.

정책 억제를 구성하는 방법은 세 가지입니다:

{% tabs %}
{% tab title="콘솔: 리소스 페이지" %}
{% hint style="warning" %}
다음을 구성하는 경우 [Panther에서 관리하는](/ko/detections/panther-managed.md) 정책 억제는 되돌릴 수 없습니다.
{% endhint %}

{% hint style="info" %}
할 수는 있지만 *추가* Panther 콘솔의 리소스 페이지에서 정책 억제를 추가할 수는 있지만, 나중에 이를 제거해야 한다면 다른 두 방법 중 하나로 정책을 편집해야 합니다.
{% endhint %}

Panther 콘솔의 리소스 페이지에서 정책이 리소스를 무시하도록 구성하려면:

1. Panther 콘솔의 왼쪽 탐색 표시줄에서 다음을 클릭합니다: **클라우드 리소스**.
2. 무시하려는 클라우드 리소스의 이름을 클릭합니다.
3. 다음의 **정책** 섹션에서 이 리소스에 적용된 모든 정책이 표시되므로, 이 리소스를 무시하도록 구성하려는 정책을 찾습니다.
4. 행의 오른쪽에서 점 3개 아이콘을 클릭한 다음 **무시**.
   * 이 작업은 정책을 편집하여 다음 항목에 추가합니다 **무시 패턴** 필드에 붙여넣습니다.

<figure><img src="/files/aefa443894ea3817766b75e8b59e1b17663293df" alt="A &#x22;Policies&#x22; section shows three policies in a table. Each policy has a status, severity, and a three dots icon."><figcaption></figcaption></figure>
{% endtab %}

{% tab title="콘솔: 정책 페이지" %}
Panther 콘솔의 정책 페이지에서 정책이 리소스를 무시하도록 구성하려면:

1. Panther 콘솔의 왼쪽 탐색 표시줄에서 다음을 클릭합니다: **빌드** > **디택션**.
2. 억제를 구성하려는 정책의 이름을 클릭합니다.
3. 다음의 **알러트 필드 설정** 섹션에서 다음을 펼칩니다 **선택 필드** 드롭다운.
4. 다음의 **무시 패턴** 필드에 무시하려는 리소스의 ARN을 입력합니다.
   * 와일드카드 패턴을 사용하면 비슷한 ARN을 가진 여러 리소스를 무시할 수 있습니다. 예를 들어, 이름이 다음으로 시작하는 모든 S3 버킷을 제외할 수 있습니다 `panther` 다음을 입력하여 `arn:aws:s3:::panther*`.

<figure><img src="/files/1e6b70234d7970a8e0f98cc1b060961c9e17e57e" alt="An &#x22;Ignore Patterns&#x22; field has a value of &#x22;arn:aws:s3:::panther*&#x22;"><figcaption></figcaption></figure>
{% endtab %}

{% tab title="CLI: 정책 구성" %}
정책의 로컬 파일 구성에서 정책이 리소스를 무시하도록 구성하려면:

1. 정책의 YAML 파일을 엽니다.
2. 다음이라는 새 필드를 추가합니다 `억제` 유형은 `배열`.
   * 이 필드에 대한 자세한 내용은 다음에서 확인하세요 [Python 정책 사양 참조](/ko/detections/rules/python.md#python-policy-specification-reference).
3. 다음에서 `억제`, 무시하려는 리소스 ARN을 목록으로 추가합니다.
   * 와일드카드 패턴을 사용하면 비슷한 ARN을 가진 여러 리소스를 무시할 수 있습니다. 예를 들어, 이름이 다음으로 시작하는 모든 S3 버킷을 제외할 수 있습니다 `panther` 다음을 입력하여 `arn:aws:s3:::panther*`.

예:

```yaml
AnalysisType: policy
PolicyID: AWS.S3.CustomPolicy.Example
...
Suppressions:
  - "arn:aws:s3:::test-bucket"
  - "arn:aws:s3:::panther*"
```

{% endtab %}
{% endtabs %}

## 정책 작성 모범 사례

### 테스트 리소스 구성

테스트 케이스를 수동으로 만드는 것은 인적 오류가 발생하기 쉽습니다. 다음 방법 중 하나를 권장합니다:

* 옵션 1: Panther 콘솔에서 다음으로 이동합니다 **조사 > 클라우드 리소스**. 테스트에서 모방하려는 리소스 유형의 필터를 적용합니다. 환경에서 리소스를 선택한 다음 `속성` 카드에서 단어 옆의 복사 버튼을 선택하여 해당 리소스의 전체 JSON 표현을 복사할 수 있습니다 `root`.
* 옵션 2: Panther [리소스 문서](/ko/cloud-scanning/cloud-resource-attributes.md), 그런 다음 모방하려는 리소스의 섹션으로 이동합니다. 제공된 예제 리소스를 복사합니다. 웹 UI에서 작업 중이라면 이를 리소스 편집기에 붙여넣고, 로컬에서 작업 중이라면 다음에 붙여넣습니다 `리소스` 필드에 붙여넣습니다. 이제 정책과 모방하려는 특정 테스트 케이스와 관련된 필드를 수동으로 수정할 수 있습니다.

옵션 1은 실용적일 때 가장 좋습니다. 정책에 대한 실제 테스트 데이터를 제공할 수 있기 때문입니다. 또한 종종 계정의 문제 리소스로 인해 정책을 작성/수정하게 됩니다. 해당 리소스의 JSON 표현을 테스트 케이스로 사용하면 앞으로 유사한 리소스가 정책에 의해 포착되도록 보장할 수 있습니다.

### 예외 디버깅

정책을 실행하는 Python 환경에 직접 접근할 수 없기 때문에 예외를 디버깅하는 것은 어려울 수 있습니다.

정책이 다음 상태를 표시하는 것을 보면 `오류` 특정 리소스에서, 이는 정책에서 예외가 발생했다는 의미입니다. 이러한 오류를 해결하는 가장 좋은 방법은 다음의 옵션 1을 사용하는 것입니다 [**테스트 리소스 구성**](#constructing-test-resources) 위 섹션에서 예외를 발생시킨 리소스로 테스트 케이스를 만듭니다.

이 테스트 케이스를 로컬 또는 Panther 콘솔에서 실행하면 문제에 대한 추가 컨텍스트를 얻을 수 있으며, 환경의 모든 리소스에 대해 정책을 실행하지 않고도 정책을 수정하여 예외를 디버깅할 수 있습니다.

{% hint style="warning" %}
참고: 다음에 출력되는 모든 내용은 `stdout` 또는 `stderr` Python 코드에서 출력한 내용은 CloudWatch에 기록됩니다. SaaS/CPaaS 고객의 경우 Panther 엔지니어가 정기적인 애플리케이션 모니터링 중에 이러한 CloudWatch 로그를 볼 수 있습니다.
{% endhint %}

## 정책 예시

### S3 공개 읽기 액세스

아래 예시에서 정책은 S3 버킷이 공개 읽기 액세스를 허용하는지 확인합니다:

```python
# 공개 액세스를 나타내는 권한자 목록
GRANTEES = {
    'http://acs.amazonaws.com/groups/global/AuthenticatedUsers',
    'http://acs.amazonaws.com/groups/global/AllUsers'
}
PERMISSIONS = {'READ'}


def policy(resource):
    for grant in resource['Grants']:
        if grant['Grantee']['URI'] in GRANTEES and grant[
                'Permission'] in PERMISSIONS:
            return False

    return True
```

### IAM 비밀번호 정책

이 예시 정책은 비밀번호 정책이 최대 비밀번호 사용 기간을 적용하지 않을 때 알러트를 보냅니다:

```python
def policy(resource):
    if resource['MaxPasswordAge'] is None:
        return False
    return resource['MaxPasswordAge'] <= 90
```

다음의 `policy()` 본문에서 다음 값을 반환하면 `True` 리소스가 준수 상태이며 알러트를 보내지 않아도 됨을 나타냅니다. 다음 값을 반환하면 `False` 리소스가 비준수 상태임을 나타냅니다.

이 정책은 다음을 기반으로 합니다 [IAM 비밀번호 정책](/ko/cloud-scanning/cloud-resource-attributes/aws/password-policy.md) 리소스:

```javascript
{
    "AccountId": "123456789012",
    "AllowUsersToChangePassword": true,
    "AnyExist": true,
    "ExpirePasswords": true,
    "HardExpiry": null,
    "MaxPasswordAge": 90,
    "MinimumPasswordLength": 14,
    "Name": "AWS.PasswordPolicy",
    "PasswordReusePrevention": 24,
    "Region": "global",
    "RequireLowercaseCharacters": true,
    "RequireNumbers": true,
    "RequireSymbols": true,
    "RequireUppercaseCharacters": true,
    "ResourceId": "123456789012::AWS.PasswordPolicy",
    "ResourceType": "AWS.PasswordPolicy",
    "Tags": null,
    "TimeCreated": null
}
```

## 참조

* 전체를 확인하세요 [Writing Python Detections의 Python 정책 사양 참조](/ko/detections/rules/python.md#python-policy-specification-reference).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.panther.com/ko/detections/policies.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
