

# Ping Identity PingFederate 的来源配置
<a name="pingidentity-pingfederate-source-setup"></a>

## 与 Ping Identity PingFederate 集成
<a name="pingidentity-pingfederate-integration"></a>

Ping Identity PingFederate 集成使用 Amazon S3 和 Amazon SQS 来将审计日志数据摄取到 CloudWatch 管线中。PingFederate 部署在本地，不会公开用于审计日志检索的 REST API。Fluent Bit 追踪 PingFederate 主机上的 JSON 格式的审计日志文件，并将其传送到 Amazon S3 存储桶。当新的日志对象到达时，Amazon SQS 通知会提醒管线。

## 先决条件
<a name="pingidentity-pingfederate-prerequisites"></a>
+ 有权创建 Amazon S3 存储桶、Amazon SQS 队列和 IAM 角色的 Amazon Web Services 账户
+ 具有管理访问权限的 Ping Identity PingFederate 服务器
+ 安装了 Fluent Bit 的 Linux 主机（可以是与 PingFederate 相同的主机）
+ PingFederate 主机与 Amazon 之间的网络连接

## 日志转发设置
<a name="pingidentity-pingfederate-log-forwarding"></a>

PingFederate 使用 Log4j2 将审计日志写入本地文件。您可以通过向 `log4j2.xml` 配置文件添加 JsonTemplateLayout 附加器来配置 JSON 格式的输出。Fluent Bit 会追踪这些 JSON 日志文件并将其传送到 Amazon S3。有关详细配置说明，请参阅下一节中的步骤 5。

## Amazon S3 与 Amazon SQS 设置说明
<a name="pingidentity-pingfederate-s3-sqs-setup"></a>

请完成下面的步骤，为 Ping Identity PingFederate 日志摄取配置 Amazon S3 和 Amazon SQS 基础设施。

### 步骤 1：创建 Amazon S3 存储桶
<a name="pingidentity-pingfederate-step1"></a>

创建一个 Amazon S3 存储桶来存储 PingFederate 审计日志。存储桶必须位于您计划创建 CloudWatch 管线的同一 Amazon 区域中。

### 步骤 2：创建 Amazon SQS 队列
<a name="pingidentity-pingfederate-step2"></a>

Amazon SQS 队列必须与您的 Amazon S3 存储桶位于同一 Amazon 区域。当新的日志文件添加到存储桶时，此队列会收到通知。

### 步骤 3：将 Amazon S3 连接至 Amazon SQS
<a name="pingidentity-pingfederate-step3"></a>

配置 Amazon S3 存储桶，将 `s3:ObjectCreated:*` 事件的事件通知发送到 Amazon SQS 队列。

### 步骤 4：配置 Amazon SQS 队列策略
<a name="pingidentity-pingfederate-step4"></a>

配置 Amazon SQS 队列策略，允许 Amazon S3 存储桶将消息发送至队列。将以下策略应用于 Amazon SQS 队列：

```
{
  "Version": "2012-10-17",
  "Id": "AllowS3ToSQS",
  "Statement": [
    {
      "Sid": "AllowS3BucketNotification",
      "Effect": "Allow",
      "Principal": {
        "Service": "s3.amazonaws.com"
      },
      "Action": "sqs:SendMessage",
      "Resource": "arn:aws:sqs:<region>:<account-id>:<queue-name>",
      "Condition": {
        "ArnEquals": {
          "aws:SourceArn": "arn:aws:s3:::<YOUR-BUCKET>"
        },
        "StringEquals": {
          "aws:SourceAccount": "<account-id>"
        }
      }
    }
  ]
}
```

### 步骤 5：配置 Ping Identity PingFederate 日志导出和 Fluent Bit
<a name="pingidentity-pingfederate-step5"></a>

编辑 `<PF_HOME>/server/default/conf/log4j2.xml`，以在 PingFederate 上启用 JSON 日志记录。添加下面的 RollingFile 附加器：

```
<RollingFile name="AdminAudit-JsonTemplateLayout"
             fileName="${sys:pf.log.dir}/admin_json.log"
             filePattern="${sys:pf.log.dir}/admin_json.%d{yyyy-MM-dd}.log"
             ignoreExceptions="false">
    <JsonTemplateLayout eventTemplateUri="${sys:pf.log4j.json.templates.uri}/admin-audit-log.json"/>
    <Policies>
        <TimeBasedTriggeringPolicy maxRandomDelay="45"/>
    </Policies>
</RollingFile>

<RollingFile name="SecurityAudit-JsonTemplateLayout"
             fileName="${sys:pf.log.dir}/audit_json.log"
             filePattern="${sys:pf.log.dir}/audit_json.%d{yyyy-MM-dd}.log"
             ignoreExceptions="false">
    <JsonTemplateLayout eventTemplateUri="${sys:pf.log4j.json.templates.uri}/runtime-audit-log.json"/>
    <Policies>
        <TimeBasedTriggeringPolicy maxRandomDelay="45"/>
    </Policies>
</RollingFile>
```

更新 Loggers 部分，以便为多个审计记录器引用新的附加器：

```
<Logger name="org.sourceid.websso.profiles.sp.SpAuditLogger" level="INFO" additivity="false">
    <AppenderRef ref="SecurityAudit-JsonTemplateLayout"/>
</Logger>
<Logger name="org.sourceid.websso.profiles.idp.IdpAuditLogger" level="INFO" additivity="false">
    <AppenderRef ref="SecurityAudit-JsonTemplateLayout"/>
</Logger>
<Logger name="org.sourceid.websso.profiles.idp.AsAuditLogger" level="INFO" additivity="false">
    <AppenderRef ref="SecurityAudit-JsonTemplateLayout"/>
</Logger>
<Logger name="org.sourceid.websso.profiles.idp.ClientRegistrationAuditLogger" level="INFO" additivity="false">
    <AppenderRef ref="SecurityAudit-JsonTemplateLayout"/>
</Logger>
<Logger name="org.sourceid.wstrust.log.STSAuditLogger" level="INFO" additivity="false">
    <AppenderRef ref="SecurityAudit-JsonTemplateLayout"/>
</Logger>
<Logger name="com.pingidentity.sdk.logging.LoggingUtil" level="INFO" additivity="false">
    <AppenderRef ref="SecurityAudit-JsonTemplateLayout"/>
</Logger>
<Logger name="AuditLogger" level="INFO" additivity="false">
    <AppenderRef ref="AdminAudit-JsonTemplateLayout"/>
</Logger>
```

配置 Fluent Bit，以收集两个审计日志文件并将其传送至 Amazon S3：

```
########################################
# SERVICE SECTION
########################################
[SERVICE]
    Flush        5
    Daemon       Off
    Log_Level    info
    storage.path /etc/fluent-bit/db/storage
    storage.sync normal
    storage.checksum off
    storage.backlog.mem_limit 10M

########################################
# INPUT SECTION - Audit Log
########################################
[INPUT]
    Name             tail
    Path             /opt/pingfederate/log/audit_json.log
    Tag              pingfederate.audit
    Read_from_Head   True
    DB               /etc/fluent-bit/db/audit_checkpoint.db
    DB.Sync          Normal
    storage.type     filesystem
    Rotate_Wait      30
    Refresh_Interval 60

########################################
# INPUT SECTION - Admin Log
########################################
[INPUT]
    Name             tail
    Path             /opt/pingfederate/log/admin_json.log
    Tag              pingfederate.admin
    Read_from_Head   True
    DB               /etc/fluent-bit/db/admin_checkpoint.db
    DB.Sync          Normal
    storage.type     filesystem
    Rotate_Wait      30
    Refresh_Interval 60

########################################
# OUTPUT SECTION
########################################
[OUTPUT]
    Name              s3
    Match             pingfederate.*
    Bucket            <YOUR-BUCKET>
    Region            <region>
    S3_Key_Format     /pingfederate/%Y/%m/%d/%H/%M/%S.log.gz
    compression       gzip
    use_put_object    On
    store_dir         /etc/fluent-bit/db/s3
    total_file_size   1M
    log_key           log
    upload_timeout    60
```

**注意**  
PingFederate 会为每个集群节点写入独立的日志文件。每个节点上都必须安装 Fluent Bit。
+ `audit_json.log` 文件捕获运行时身份验证事件（SSO、凭证验证、断言发布）。
+ `admin_json.log` 文件捕获管理控制台活动（配置更改、管理员登录）。
+ Fluent Bit 将 gzip 压缩的 NDJSON 文件传输到 Amazon S3。
+ `storage.type filesystem` 设置可确保缓冲到磁盘，从而提高可靠性。

**重要**  
仅使用 PingFederate 提供的默认 JSON 模板。修改 `.json` 模板文件会更改输出架构，并且可能会中断下游处理。

### 步骤 6：IAM 权限
<a name="pingidentity-pingfederate-step6"></a>

为 Fluent Bit 主机创建具有以下权限的 IAM 策略，以让其向 Amazon S3 存储桶写入对象：

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "FluentBitS3Write",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetBucketLocation",
        "s3:ListBucket",
        "s3:ListMultipartUploadParts",
        "s3:AbortMultipartUpload",
        "s3:CreateMultipartUpload",
        "s3:CompleteMultipartUpload"
      ],
      "Resource": [
        "arn:aws:s3:::<YOUR-BUCKET>",
        "arn:aws:s3:::<YOUR-BUCKET>/pingfederate/*"
      ]
    }
  ]
}
```

### 步骤 7：验证
<a name="pingidentity-pingfederate-step7"></a>

通过确认日志文件出现在 Amazon S3 存储桶中以及正在生成 Amazon SQS 通知来验证设置。检查 Amazon SQS 队列中是否存在指示新对象创建事件的消息。

## 配置 CloudWatch 管线
<a name="pingidentity-pingfederate-pipeline-config"></a>
+ 创建管线时，请选择 Ping Identity PingFederate 作为数据来源。
+ 提供 Amazon SQS 队列 URL 和 IAM 角色 ARN。
+ 选择目标 CloudWatch Logs 日志组。
+ 创建管线后，数据将在选定的日志组中可用。

## 支持的开放式网络安全架构框架事件类
<a name="pingidentity-pingfederate-ocsf-events"></a>

此集成支持 OCSF 架构版本 v1.5.0。下表显示了 PingFederate 审计日志类型与 OCSF 事件类之间的映射。


| 事件名称 | OCSF 事件类 | 
| --- | --- | 
| 安全审计（运行时身份验证生命周期） | 身份验证 [3002] | 
| 管理员审计（管理员登录/注销） | 身份验证 [3002] | 
| 管理员审计（配置对象上的 CRUD） | 实体管理 [3004] | 