1.5. 从启用了 STS 的集群将日志转发到 Amazon CloudWatch
Amazon CloudWatch 是一个服务,可帮助管理员在 Amazon Web Services (AWS)上观察和监控资源和应用程序。您可以使用 AWS 的 Identity and Access Management (IAM)角色为服务帐户(IRSA)安全地将日志转发到 CloudWatch,它使用 AWS 安全令牌服务(STS)。
使用 CloudWatch 进行身份验证可以正常工作:
- 日志收集器通过将服务帐户令牌提供给 AWS 中的 OpenID Connect (OIDC)供应商,从安全令牌服务(STS)请求临时 AWS 凭证。
- AWS 验证令牌。根据信任策略,AWS 会发出简短的临时凭证,包括访问密钥 ID、secret 访问密钥和会话令牌,供日志收集器使用。
在启用了 STS 的集群上,如 Red Hat OpenShift Service on AWS,AWS 角色被预先配置了所需的信任策略。这允许服务帐户假定角色。因此,您可以使用 IAM 角色的 STS 为 AWS 创建 secret。然后,您可以创建或更新使用 secret 将日志转发到 CloudWatch 输出的 ClusterLogForwarder
自定义资源(CR)。如果角色预先配置了,请按照以下步骤创建 secret 和 ClusterLogForwarder
CR:
- 使用现有 AWS 角色为 CloudWatch 创建 secret
- 从启用了 STS 的集群将日志转发到 Amazon CloudWatch
如果您没有使用信任策略预先配置的 AWS IAM 角色,您必须首先使用所需的信任策略创建角色。完成以下步骤,创建一个 secret、ClusterLogForwarder
CR 和角色。
1.5.1. 创建 AWS IAM 角色 复制链接链接已复制到粘贴板!
创建一个 Amazon Web Services (AWS) IAM 角色,您的服务帐户可以假定该角色安全访问 AWS 资源。
以下流程演示了如何使用 AWS CLI 创建 AWS IAM 角色。您还可以使用 Cloud Credential Operator (CCO)实用程序 ccoctl
。使用 ccoctl
实用程序在 IAM 角色策略中创建多个字段,ClusterLogForwarder
自定义资源(CR)不需要。CR 会忽略这些额外字段。但是,ccoctl
工具为配置 IAM 角色提供了一种便捷的方法。如需更多信息,请参阅组件 的带有简短凭证的手动模式。
先决条件
- 您可以访问为 AWS 启用并配置了安全令牌服务(STS)的 Red Hat OpenShift Logging 集群。
- 具有 AWS 帐户的管理员访问权限。
- 已安装 AWS CLI。
流程
创建一个 IAM 策略,向 CloudWatch 授予权限。
创建包含以下内容的文件,如
cw-iam-role-policy.json
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,根据前面的策略定义创建 IAM 策略:
aws iam create-policy \ --policy-name cluster-logging-allow \ --policy-document file://cw-iam-role-policy.json
aws iam create-policy \ --policy-name cluster-logging-allow \ --policy-document file://cw-iam-role-policy.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意创建的策略的
Arn
值。
创建信任策略以允许日志记录服务帐户假定 IAM 角色:
运行以下命令,根据之前定义的信任策略创建一个 IAM 角色:
aws iam create-role --role-name openshift-logger --assume-role-policy-document file://cw-trust-policy.json
$ aws iam create-role --role-name openshift-logger --assume-role-policy-document file://cw-trust-policy.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意所创建的角色的
Arn
值。运行以下命令,将策略附加到角色:
aws iam put-role-policy \ --role-name openshift-logger --policy-name cluster-logging-allow \ --policy-document file://cw-role-policy.json
$ aws iam put-role-policy \ --role-name openshift-logger --policy-name cluster-logging-allow \ --policy-document file://cw-role-policy.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,验证角色和权限策略:
aws iam get-role --role-name openshift-logger
$ aws iam get-role --role-name openshift-logger
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
ROLE arn:aws:iam::123456789012:role/openshift-logger ASSUMEROLEPOLICYDOCUMENT 2012-10-17 STATEMENT sts:AssumeRoleWithWebIdentity Allow STRINGEQUALS system:serviceaccount:openshift-logging:openshift-logger PRINCIPAL arn:aws:iam::123456789012:oidc-provider/<OPENSHIFT_OIDC_PROVIDER_URL>
ROLE arn:aws:iam::123456789012:role/openshift-logger ASSUMEROLEPOLICYDOCUMENT 2012-10-17 STATEMENT sts:AssumeRoleWithWebIdentity Allow STRINGEQUALS system:serviceaccount:openshift-logging:openshift-logger PRINCIPAL arn:aws:iam::123456789012:oidc-provider/<OPENSHIFT_OIDC_PROVIDER_URL>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.5.2. 使用现有 AWS 角色为 AWS CloudWatch 创建 secret 复制链接链接已复制到粘贴板!
使用 oc create secret --from-literal
命令从配置的 AWS IAM 角色为 Amazon Web Services (AWS)安全令牌服务(STS)创建一个 secret。
先决条件
- 您已创建了 AWS IAM 角色。
- 具有 Red Hat OpenShift Logging 的管理员访问权限。
流程
在 CLI 中,输入以下内容来为 AWS 生成 secret:
oc create secret generic sts-secret -n openshift-logging --from-literal=role_arn=arn:aws:iam::123456789012:role/openshift-logger
$ oc create secret generic sts-secret -n openshift-logging --from-literal=role_arn=arn:aws:iam::123456789012:role/openshift-logger
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Secret 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.5.3. 从启用了 STS 的集群将日志转发到 Amazon CloudWatch 复制链接链接已复制到粘贴板!
您可以将在带有 Amazon Web Services (AWS)安全令牌服务(STS)的集群上部署的 Red Hat OpenShift 的日志记录转发到 Amazon CloudWatch。Amazon CloudWatch 是一个服务,可帮助管理员观察和监控 AWS 上的资源和应用程序。
先决条件
- 已安装 Red Hat OpenShift Logging Operator。
- 您已配置了凭证 secret。
- 具有 Red Hat OpenShift Logging 的管理员访问权限。
流程
创建或更新
ClusterLogForwarder
自定义资源(CR):Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.5.4. 配置内容过滤器以丢弃不需要的日志记录 复制链接链接已复制到粘贴板!
收集所有集群日志会生成大量数据,这可能会造成移动和存储的代价。要减少卷,您可以配置 drop
过滤器,以在转发前排除不需要的日志记录。日志收集器根据过滤器评估日志流,并丢弃与指定条件匹配的记录。
drop
过滤器使用 test
字段来定义一个或多个用于评估日志记录的条件。过滤器应用以下规则来检查是否丢弃记录:
- 如果所有指定条件都评估为 true,则测试通过。
- 如果测试通过,则过滤器会丢弃日志记录。
-
如果您在
drop
过滤器配置中定义多个测试,如果任何测试通过,则过滤器会丢弃日志记录。 - 如果评估条件时出错,例如,没有引用的字段,则该条件评估为 false。
先决条件
- 已安装 Red Hat OpenShift Logging Operator。
- 有管理员权限。
-
您已创建了
ClusterLogForwarder
自定义资源 (CR)。 -
已安装 OpenShift CLI(
oc
)。
流程
提取现有的
ClusterLogForwarder
配置并将其保存为本地文件。oc get clusterlogforwarder <name> -n <namespace> -o yaml > <filename>.yaml
$ oc get clusterlogforwarder <name> -n <namespace> -o yaml > <filename>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
-
<
;name> 是您要配置的ClusterLogForwarder
实例的名称。 -
<
;namespace> 是创建ClusterLogForwarder
实例的命名空间,如openshift-logging
。 -
<filename
> 是保存配置的本地文件的名称。
-
添加配置,将不需要的日志记录放到
ClusterLogForwarder
CR 中的filters
spec 中。ClusterLogForwarder
CR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定过滤器的类型。
drop
过滤器丢弃与过滤器配置匹配的日志记录。 - 2
- 指定
drop
过滤器的配置选项。 - 3
- 指定测试条件来评估过滤器是否丢弃日志记录。
- 4
- 指定日志记录中字段的点分隔路径。
-
每个路径片段可以包含字母数字字符和下划线、
a-z
、A-Z
、0-9
、_
,如.kubernetes.namespace_name
。 -
如果片段包含不同的字符,则片段必须在引号里,例如 .
kubernetes.labels."app.version-1.2/beta
"。 -
您可以在单个测试配置中包括多个字段路径,但它们都必须评估为 true 才能使测试通过,以及要应用的
drop
过滤器。
-
每个路径片段可以包含字母数字字符和下划线、
- 5
- 指定一个正则表达式。如果日志记录与此正则表达式匹配,它们将被丢弃。
- 6
- 指定一个正则表达式。如果日志记录与此正则表达式不匹配,它们将被丢弃。
- 7
- 指定使用
drop
过滤器的管道。
注意您可以为单个
field
路径设置matches
或notMatches
条件,但不能同时设置这两个条件。仅保留高优先级日志记录的示例配置
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 具有多个测试的配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来应用
ClusterLogForwarder
CR:oc apply -f <filename>.yaml
$ oc apply -f <filename>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.5.5. API 审计过滤器概述 复制链接链接已复制到粘贴板!
OpenShift API 服务器为每个 API 调用生成审计事件。这些事件包括请求、响应和请求者身份的详细信息。这可能导致大量数据。
API 审计过滤器帮助通过使用规则排除非主题事件并缩小事件大小,从而管理审计跟踪。规则按顺序检查,检查会在第一个匹配项时停止。事件中的数据量取决于 level
字段的值:
-
None
: 事件被丢弃。 -
Metadata
:事件包括审计元数据,并排除请求和响应正文。 -
Request
: 事件包括审计元数据和请求正文,并排除响应正文。 -
Request
response :事件包括所有数据:metadata、request 正文和响应正文。响应正文可能非常大。例如,oc get pods -A
生成包含集群中每个 pod 的 YAML 描述的响应正文。
只有在日志记录部署中设置了 Vector 收集器时,您只能使用 API 审计过滤器功能。
ClusterLogForwarder
自定义资源(CR)使用与标准 Kubernetes 审计策略 相同的格式。ClusterLogForwarder
CR 提供以下额外功能:
- 通配符
-
用户、组、命名空间和资源的名称可以在前导或尾部带有
*
星号字符。例如,openshift-\*
命名空间与openshift-apiserver
或openshift-authentication
命名空间匹配。\*/status
资源与Pod/status
或Deployment/status
资源匹配。 - 默认规则
与策略中任何规则不匹配的事件将被过滤,如下所示:
-
get
、list
和watch
等只读系统事件会被丢弃。 - 服务帐户写入发生在与服务帐户相同的命名空间中的事件将被丢弃。
- 所有其他事件都会被转发,受任何配置的速率限制。
要禁用这些默认值,请使用只有一个
level
字段的规则结束您的规则列表,或者添加一条空规则。-
- 省略响应代码
-
要省略的整数状态代码列表。您可以使用
OmitResponseCodes
字段(没有创建事件)的 HTTP 状态代码列表根据响应中的 HTTP 状态代码丢弃事件。默认值为[404, 409, 422, 429]
。如果值为空列表[]
,则不会省略任何状态代码。
ClusterLogForwarder
CR Audit 策作为 OpenShift Container Platform 审计策略外的补充起作用。ClusterLogForwarder
CR 审计过滤器更改日志收集器转发的内容,并提供按操作动词、用户、组、命名空间或资源过滤的功能。您可以创建多个过滤器,将同一审计流的不同摘要发送到不同的位置。例如,您可以将详细的流发送到本地集群日志存储,并将不太详细的流发送到远程站点。
-
您必须具有
collect-audit-logs
集群角色才能收集审计日志。 - 以下示例旨在说明审计策略中可能的规则范围,不是推荐的配置。
Audit 策略示例
1.5.6. 在输入 ny 过滤应用程序日志,包括标签表达式或匹配的标签键和值 复制链接链接已复制到粘贴板!
您可以使用 input
选择器,根据标签表达式或匹配的标签键及其值包含应用程序日志。
流程
将过滤器的配置添加到
ClusterLogForwarder
CR 中的input
spec 中。以下示例演示了如何配置
ClusterLogForwarder
CR,使其包含基于标签表达式或匹配的标签键/值的日志:ClusterLogForwarder
CR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来应用
ClusterLogForwarder
CR:oc apply -f <filename>.yaml
$ oc apply -f <filename>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.5.7. 配置内容过滤器以修剪日志记录 复制链接链接已复制到粘贴板!
如果配置 prune
过滤器,日志收集器在转发前会根据过滤器评估日志收集器。收集器通过删除 pod 注解等低值字段来修剪日志记录。
先决条件
- 已安装 Red Hat OpenShift Logging Operator。
- 有管理员权限。
-
您已创建了
ClusterLogForwarder
自定义资源 (CR)。 -
已安装 OpenShift CLI(
oc
)。
流程
提取现有的
ClusterLogForwarder
配置并将其保存为本地文件。oc get clusterlogforwarder <name> -n <namespace> -o yaml > <filename>.yaml
$ oc get clusterlogforwarder <name> -n <namespace> -o yaml > <filename>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
-
<
;name> 是您要配置的ClusterLogForwarder
实例的名称。 -
<
;namespace> 是创建ClusterLogForwarder
实例的命名空间,如openshift-logging
。 -
<filename
> 是保存配置的本地文件的名称。
-
将配置添加到
ClusterLogForwarder
CR 的filters
spec 中。重要如果您同时指定了
in
和notIn
参数,则notIn
数组在修剪过程中优先于。在使用
notIn
数组修剪记录后,会使用in
数组修剪它们。ClusterLogForwarder
CR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定过滤器的类型。
prune
过滤器根据配置的字段修剪日志记录。 - 2
- 指定
prune
过滤器的配置选项。-
in
和notIn
字段是日志记录中字段的以点分隔的路径的数组。 -
每个路径片段可以包含字母数字字符和下划线、
a-z
、A-Z
、0-9
、_
,如.kubernetes.namespace_name
。 -
如果片段包含不同的字符,则片段必须在引号里,例如 .
kubernetes.labels."app.version-1.2/beta
"。
-
- 3
- 可选:指定要从日志记录中删除的字段。日志收集器保留所有其他字段。
- 4
- 可选:指定要保留在日志记录中的字段。日志收集器移除所有其他字段。
- 5
- 指定
prune
过滤器应用到的管道。重要-
过滤器不能从日志记录中删除
.log_type
、.log_source
、.message
字段。您必须在notIn
字段中包含它们。 -
如果使用
googleCloudLogging
输出,则必须在notIn
字段中包含.hostname
。
-
过滤器不能从日志记录中删除
运行以下命令来应用
ClusterLogForwarder
CR:oc apply -f <filename>.yaml
$ oc apply -f <filename>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow