Ping Identity PingFederate 的来源配置
与 Ping Identity PingFederate 集成
Ping Identity PingFederate 集成使用 Amazon S3 和 Amazon SQS 来将审计日志数据摄取到 CloudWatch 管线中。PingFederate 部署在本地,不会公开用于审计日志检索的 REST API。Fluent Bit 追踪 PingFederate 主机上的 JSON 格式的审计日志文件,并将其传送到 Amazon S3 存储桶。当新的日志对象到达时,Amazon SQS 通知会提醒管线。
先决条件
有权创建 Amazon S3 存储桶、Amazon SQS 队列和 IAM 角色的 Amazon Web Services 账户
具有管理访问权限的 Ping Identity PingFederate 服务器
安装了 Fluent Bit 的 Linux 主机(可以是与 PingFederate 相同的主机)
PingFederate 主机与 Amazon 之间的网络连接
日志转发设置
PingFederate 使用 Log4j2 将审计日志写入本地文件。您可以通过向 log4j2.xml 配置文件添加 JsonTemplateLayout 附加器来配置 JSON 格式的输出。Fluent Bit 会追踪这些 JSON 日志文件并将其传送到 Amazon S3。有关详细配置说明,请参阅下一节中的步骤 5。
Amazon S3 与 Amazon SQS 设置说明
请完成下面的步骤,为 Ping Identity PingFederate 日志摄取配置 Amazon S3 和 Amazon SQS 基础设施。
步骤 1:创建 Amazon S3 存储桶
创建一个 Amazon S3 存储桶来存储 PingFederate 审计日志。存储桶必须位于您计划创建 CloudWatch 管线的同一 Amazon 区域中。
步骤 2:创建 Amazon SQS 队列
Amazon SQS 队列必须与您的 Amazon S3 存储桶位于同一 Amazon 区域。当新的日志文件添加到存储桶时,此队列会收到通知。
步骤 3:将 Amazon S3 连接至 Amazon SQS
配置 Amazon S3 存储桶,将 s3:ObjectCreated:* 事件的事件通知发送到 Amazon SQS 队列。
步骤 4:配置 Amazon SQS 队列策略
配置 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
编辑 <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 权限
为 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:验证
通过确认日志文件出现在 Amazon S3 存储桶中以及正在生成 Amazon SQS 通知来验证设置。检查 Amazon SQS 队列中是否存在指示新对象创建事件的消息。
配置 CloudWatch 管线
创建管线时,请选择 Ping Identity PingFederate 作为数据来源。
提供 Amazon SQS 队列 URL 和 IAM 角色 ARN。
选择目标 CloudWatch Logs 日志组。
创建管线后,数据将在选定的日志组中可用。
支持的开放式网络安全架构框架事件类
此集成支持 OCSF 架构版本 v1.5.0。下表显示了 PingFederate 审计日志类型与 OCSF 事件类之间的映射。
| 事件名称 | OCSF 事件类 |
|---|---|
| 安全审计(运行时身份验证生命周期) | 身份验证 [3002] |
| 管理员审计(管理员登录/注销) | 身份验证 [3002] |
| 管理员审计(配置对象上的 CRUD) | 实体管理 [3004] |