1.14. STS 対応クラスターから Amazon CloudWatch へログを転送する


Amazon CloudWatch は、管理者が Amazon Web Services (AWS) 上のリソースとアプリケーションを観測および監視するのに役立つサービスです。AWS Security Token Service (STS) を使用する AWS の Identity and Access Management (IAM) Roles for Service Accounts (IRSA) を活用することで、OpenShift Logging から CloudWatch にログをセキュアに転送できます。

CloudWatch による認証は次のように機能します。

  1. ログコレクターは、AWS の OpenID Connect (OIDC) プロバイダーにサービスアカウントトークンを提示して、Security Token Service (STS) から一時的な AWS 認証情報を要求します。
  2. AWS がトークンを検証します。その後、信頼ポリシーに応じて、AWS はログコレクターが使用するためのアクセスキー ID、シークレットアクセスキー、セッショントークンなどの短期間の一時的な認証情報を発行します。

Red Hat OpenShift Service on AWS などの STS 対応クラスターでは、AWS ロールは必要な信頼ポリシーで事前設定されています。これにより、サービスアカウントはロールを引き受けることができます。したがって、IAM ロールを使用する STS で AWS のシークレットを作成できます。その後、シークレットを使用してログを CloudWatch 出力に転送する ClusterLogForwarder カスタムリソース (CR) を作成または更新できます。ロールが事前に設定されている場合は、次の手順に従って、シークレットと ClusterLogForwarder CR を作成します。

  • 既存の AWS ロールを使用して CloudWatch のシークレットを作成する
  • STS 対応クラスターから Amazon CloudWatch へログを転送する

信頼ポリシーが事前設定された AWS IAM ロールがない場合は、まず必要な信頼ポリシーを持つロールを作成する必要があります。シークレット、ClusterLogForwarder CR、およびロールを作成するには、次の手順を実行します。

1.14.1. AWS IAM ロールの作成

AWS リソースへセキュアにアクセスできるよう、サービスアカウントが引き受けることができる Amazon Web Services (AWS) IAM ロールを作成します。

次の手順では、AWS CLI を使用して AWS IAM ロールを作成する方法を示します。代わりに、Cloud Credential Operator (CCO) ユーティリティー ccoctl を使用することもできます。ccoctl ユーティリティーを使用すると、ClusterLogForwarder カスタムリソース (CR) に必要ない多くのフィールドが IAM ロールポリシーに作成されます。これらの追加フィールドは CR によって無視されます。ただし、ccoctl ユーティリティーは、IAM ロールを設定するための便利な方法を提供します。詳細は、コンポーネントの短期認証情報を使用した手動モード を参照してください。

前提条件

  • Security Token Service (STS) が有効化され、AWS 用に設定されている Red Hat OpenShift Logging クラスターにアクセスできる。
  • AWS アカウントへの管理者アクセス権がある。
  • AWS CLI がインストールされている。

手順

  1. CloudWatch にログを書き込む権限を付与する IAM ポリシーを作成します。

    1. 次の内容を含むファイル (例: cw-iam-role-policy.json) を作成します。

      {
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "logs:PutLogEvents",
                      "logs:CreateLogGroup",
                      "logs:PutRetentionPolicy",
                      "logs:CreateLogStream",
                      "logs:DescribeLogGroups",
                      "logs:DescribeLogStreams"
                  ],
                  "Resource": "arn:aws:logs:*:*:*"
              }
          ]
      }
      Copy to Clipboard Toggle word wrap
    2. 次のコマンドを実行して、以前のポリシー定義に基づいて IAM ポリシーを作成します。

      aws iam create-policy \
          --policy-name cluster-logging-allow \
          --policy-document file://cw-iam-role-policy.json
      Copy to Clipboard Toggle word wrap

      作成されたポリシーの Arn 値をメモします。

  2. ロギングサービスアカウントが IAM ロールを引き受けることを許可する信頼ポリシーを作成します。

    1. 次の内容を含むファイル (例: cw-trust-policy.json) を作成します。

      {
      "Version": "2012-10-17",
      "Statement": [
          {
              "Effect": "Allow",
              "Principal": {
                  "Federated": "arn:aws:iam::123456789012:oidc-provider/<OPENSHIFT_OIDC_PROVIDER_URL>" 
      1
      
              },
              "Action": "sts:AssumeRoleWithWebIdentity",
              "Condition": {
                  "StringEquals": {
                      "<OPENSHIFT_OIDC_PROVIDER_URL>:sub": "system:serviceaccount:openshift-logging:logcollector" 
      2
      
                  }
              }
          }
      ]
      }
      Copy to Clipboard Toggle word wrap
      1
      <OPENSHIFT_OIDC_PROVIDER_URL> は、Red Hat OpenShift Logging OIDC URL に置き換えます。
      2
      namespace とサービスアカウントは、ログフォワーダーが使用する namespace とサービスアカウントと一致する必要があります。
  3. 次のコマンドを実行し、以前に定義した信頼ポリシーに基づいて IAM ロールを作成します。

    $ aws iam create-role --role-name openshift-logger --assume-role-policy-document file://cw-trust-policy.json
    Copy to Clipboard Toggle word wrap

    作成されたロールの Arn 値をメモします。

  4. 次のコマンドを実行して、ポリシーをロールにアタッチします。

    $ aws iam put-role-policy \
          --role-name openshift-logger --policy-name cluster-logging-allow \
          --policy-document file://cw-role-policy.json
    Copy to Clipboard Toggle word wrap

検証

  • 次のコマンドを実行して、ロールと権限ポリシーを確認します。

    $ aws iam get-role --role-name openshift-logger
    Copy to Clipboard Toggle word wrap

    出力例

    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 Toggle word wrap

1.14.2. 既存の AWS ロールを使用した AWS CloudWatch のシークレット作成

oc create secret --from-literal コマンドを使用して、設定された AWS IAM ロールから Amazon Web Services (AWS) Security Token Service (STS) のシークレットを作成します。

前提条件

  • AWS IAM ロールを作成している。
  • Red Hat OpenShift Logging への管理者アクセス権がある。

手順

  • CLI で次のように入力して、AWS のシークレットを生成します。

    $ oc create secret generic sts-secret -n openshift-logging --from-literal=role_arn=arn:aws:iam::123456789012:role/openshift-logger
    Copy to Clipboard Toggle word wrap

    シークレットの例

    apiVersion: v1
    kind: Secret
    metadata:
      namespace: openshift-logging
      name: sts-secret
    stringData:
      role_arn: arn:aws:iam::123456789012:role/openshift-logger
    Copy to Clipboard Toggle word wrap

1.14.3. STS 対応クラスターから Amazon CloudWatch へログを転送する

Amazon Web Services (AWS) Security Token Service (STS) が有効になっているクラスターにデプロイされた Logging for Red Hat OpenShift から、Amazon CloudWatch にログを転送できます。Amazon CloudWatch は、管理者が AWS 上のリソースとアプリケーションを観測および監視するのに役立つサービスです。

前提条件

  • Red Hat OpenShift Logging Operator がインストールされている。
  • 認証情報シークレットを設定した。
  • Red Hat OpenShift Logging への管理者アクセス権がある。

手順

  • ClusterLogForwarder カスタムリソース (CR) を作成または更新します。

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: <log_forwarder_name>
      namespace: openshift-logging
    spec:
      serviceAccount:
        name: <service_account_name> 
    1
    
      outputs:
       - name: cw-output 
    2
    
         type: cloudwatch 
    3
    
         cloudwatch:
           groupName: 'cw-projected{.log_type||"missing"}' 
    4
    
           region: us-east-2 
    5
    
           authentication:
             type: iamRole 
    6
    
             iamRole:
               roleARN: 
    7
    
                 key: role_arn
                 secretName: sts-secret
               token: 
    8
    
                 from: serviceAccount
      pipelines:
        - name: to-cloudwatch
          inputRefs: 
    9
    
            - infrastructure
            - audit
            - application
          outputRefs: 
    10
    
            - cw-output
    Copy to Clipboard Toggle word wrap
    1
    サービスアカウントを指定します。
    2
    出力の名前を指定します。
    3
    cloudwatch タイプを指定します。
    4
    ログストリームのグループ名を指定します。
    5
    AWS リージョンを指定します。
    6
    STS の認証タイプとして iamRole を指定します。
    7
    role_arn リソースが保存されているシークレットの名前とキーを指定します。
    8
    認証に使用するサービスアカウントトークンを指定します。投影されたサービスアカウントトークンを使用するには、from: serviceAccount を使用します。
    9
    パイプラインを使用して転送するログタイプ (applicationinfrastructure または audit) を指定します。
    10
    このパイプラインでログを転送する時に使用する出力の名前を指定します。

1.14.4. Amazon S3 エンドポイントへのログ転送

Red Hat OpenShift Logging Operator を使用してログを収集し、S3 用に設定されたエンドポイントに転送できます。

前提条件

  • Red Hat OpenShift Logging Operator がインストールされている。
  • 認証情報シークレットを設定した。
  • OpenShift Container Platform への管理者アクセス権がある。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. ClusterLogForwarder カスタムリソース (CR) を作成または更新します。

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: <log_forwarder_name>
      namespace: openshift-logging
    spec:
      serviceAccount:
        name: <service_account_name>
      outputs:
       - name: s3-output
         type: s3
         s3:
           keyPrefix: 's3{.log_type||"missing"}'
           bucket: <bucket_name>
           region: us-east-2
           authentication:
             type: iamRole
             iamRole:
               roleARN:
                 key: role_arn
                 secretName: sts-secret
               token:
                 from: serviceAccount
      pipelines:
        - name: to-s3
          inputRefs:
            - infrastructure
            - audit
            - application
          outputRefs:
            - s3-output
    Copy to Clipboard Toggle word wrap
    • keyPrefix: ログオブジェクトの S3 キー接頭辞を定義します。フィールドパスを || で区切り、末尾に静的なフォールバック値を指定する形式で、静的または動的な値を使用できます。
    • bucket: ログが保存される S3 バケット名を指定します。
  2. 次のコマンドを実行して、ClusterLogForwarder CR を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

1.14.5. AssumeRole によるアカウント間ログ転送

AWS Security Token Service (STS) の AssumeRole 機能を使用すると、ログを外部の AWS アカウントに転送できます。アカウント間ログ転送により、セキュリティー境界を維持しながら、複数の AWS アカウント間をまたぐ一元的なロギングを実現できます。

アカウント間ログ転送の仕組みは次のとおりです。

  1. 初期認証: コレクターが、Identity and Access Management (IAM) ロールまたはアクセスキーを使用して、クラスターの AWS アカウントに対して認証します。
  2. ロールの引き受け: 初期認証後、コレクターはターゲットの AWS アカウントでロールを引き受けます。
  3. ログ転送: コレクターは、引き受けたロールの認証情報を使用して、ターゲットアカウント内の CloudWatch または S3 バケットにログを転送します。

アカウント間ログ転送を使用する場合は、次のセキュリティー上の考慮事項に留意してください。

  • アカウントをまたいでロールの引き受けを行う際には、外部 ID を使用してください。

    外部 ID は追加の識別子として機能します。

    注記

    外部 ID は CloudTrail のログと API レスポンスに表示されます。したがって、外部 ID は機密情報とはみなされません。

    外部 ID を作成する際には、以下の対策を講じてください。

    • 信頼関係ごとに一意である必要があります。
    • 推測可能なものや公開情報に基づくものは使用しないでください。
  • 引き受けられるロールには、必要最小限の権限のみを付与してください。
  • ロールの Amazon Resource Name (ARN) とトークンを含むシークレットを保護してください。
  • CloudTrail を監視し、AssumeRole のアクティビティーを確認してください。

1.14.6. アカウント間アクセス用の AWS IAM の設定

アカウント間アクセス用に AWS Identity and Access Management (IAM) を設定できます。

前提条件

  • 管理者権限がある。
  • ターゲットロールが作成されており、そのターゲットロールに Cloudwatch または S3 出力にデータを送信する権限が付与されている。
  • 初期ロールおよびターゲットロールのポリシーを更新する権限がある。

手順

  1. クラスターアカウント内に、必要な権限を持つターゲットロールを引き受ける初期アカウントを作成します。

    初期アカウントは、ユーザーと IAM ロールのどちらでも構いません。このアカウントがターゲットロールを引き受けます。

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "sts:AssumeRole",
                "Resource": "arn:aws:iam::<target-aws-account-id>:role/target-logging-role"
            }
        ]
    }
    Copy to Clipboard Toggle word wrap
  2. ターゲットロールで、信頼ポリシーを作成し、初期クラスターロールと、必要に応じて外部 ID を指定します。

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam:::<role_or_user>/<role-name_or_user-name>"
                },
                "Action": "sts:AssumeRole",
                "Condition": {
                    "StringEquals": {
                        "sts:ExternalId": "<your-unique-external-id>"
                    }
                }
            }
        ]
    }
    Copy to Clipboard Toggle word wrap

    Principal.AWS フィールドを次のように設定します。

    • 初期アカウントがユーザーの場合は、次の形式を使用します。

      arn:aws:iam::<aws-account-id>:user/<user-name>

    • 初期アカウントが IAM ロールの場合は、次の形式を使用します。

      arn:aws:iam::<aws-account-id>:role/<role-name>

  3. ログを CloudWatch 出力に転送するか S3 出力に転送するかに応じて、ターゲットロールに CloudWatch の権限または S3 の権限を設定します。

    CloudWatch の権限

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "logs:CreateLogGroup",
                    "logs:CreateLogStream",
                    "logs:PutLogEvents",
                    "logs:DescribeLogGroups",
                    "logs:DescribeLogStreams"
                ],
                "Resource": "*"
            }
        ]
    }
    Copy to Clipboard Toggle word wrap

    S3 の権限

    {
        "Version": "2012-10-17",
        "Statement": [
            {
            "Sid": "AllowRoleToPutObjects",
            "Effect": "Allow",
            "Principal": {
                "AWS": "<assumerole_arn>"
            },
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:<aws_partition>:s3:::<s3_bucket>",
                "arn:<aws_partition>:s3:::<s3_bucket>/*"
            ]
            }
        ]
    }
    Copy to Clipboard Toggle word wrap

1.14.7. アカウント間転送用の ClusterLogForwarder 設定の例

次の例は、ログを CloudWatch に転送する場合に、アカウント間の AssumeRole フィールド設定を使用する方法を示しています。

AssumeRole 認証を使用する ClusterLogForwarder リソース

apiVersion: observability.openshift.io/v1
kind: ClusterLogForwarder
metadata:
  name: cross-account-example
  namespace: openshift-logging
spec:
  serviceAccount:
    name: my-sa
  outputs:
    - name: cw-cross-account
      type: cloudwatch
      cloudwatch:
        groupName: my-logs-{.log_type||"unknown"}
        region: us-east-1
        authentication:
          type: iamRole
          iamRole:
            roleARN:
              secretName: initial-role-secret
              key: role_arn
            token:
              from: serviceAccount
          # Cross-account assume role configuration
          assumeRole:
            roleARN:
              secretName: cross-account-secret
              key: assume_role_arn
            externalID: "my-unique-id-1234"
  pipelines:
    - name: cross-account-logs
      inputRefs:
        - application
      outputRefs:
        - cw-cross-account
Copy to Clipboard Toggle word wrap

  • authentication.assumeRole.roleARN: ターゲットアカウントで引き受けるロールの ARN を含むシークレットへの参照。
  • authentication.assumeRole.externalID: ロールを引き受ける際に強制的に要求する外部 ID を含む文字列。これにより、外部 ID を知っているエンティティーだけがロールを引き受けられるようになり、セキュリティーが強化されます。

監査目的で AWS CloudTrail ログに意味のある識別情報を提供するために、ロールの引き受けセッションのセッション名が、Red Hat OpenShift Logging Operator によって自動的に生成されます。Operator は次のようにクラスターメタデータを使用してセッション名を生成します。

  • 主な形式: {clusterId}-{clfName}-{outputName}
  • フォールバック形式 (クラスターメタデータが利用できない場合): output-{outputName}
  • 常に最大 64 文字に切り捨てられます (AWS の要件)。
  • 一意性を確保するために、クラスター ID の最初の 8 文字が使用されます。

1.14.8. アカウント間ログ転送のトラブルシューティング

次の表に、アカウント間ログ転送で発生する可能性のある問題と、その問題を解決するために実行できる手順を示します。

Expand
表1.3 アカウント間ログ転送の問題と解決策
問題トラブルシューティングの手順

ロールの引き受けが失敗する

  • ターゲットアカウントの信頼関係を確認します。
  • 信頼ポリシーの外部 ID が、`ClusterLogForwarder` カスタムリソース (CR) で使用されている ID と完全に一致していることを確認します。
  • 初期ロールに sts:AssumeRole 権限があることを確認します。

権限が拒否された

  • 引き受けられたロールが、CloudWatch または S3 へのアクセス権を持っているか確認します。
  • CloudWatch または s3 バケットのリソースポリシーを確認します。
  • 初期ロールとターゲットロールのリージョン設定が一致していることを確認します。

ロールまたはユーザー ARN が無効である

  • ロールの Amazon Resource Name (ARN) が次の形式であることを確認します。

    • arn:<aws-partition>:iam::<aws-account-id>:role/<role-name>
    • arn:<aws-partition>:iam::<aws-account-id>:user/<user-name>
  • ターゲットアカウントにロールが存在することを確認します。

1.14.9. 不要なログレコードを削除するコンテンツフィルターの設定

すべてのクラスターログを収集すると大量のデータが生成され、その移動と保存にコストがかかる可能性があります。ボリュームを削減するには、転送前に不要なログレコードを除外するように drop フィルターを設定できます。ログコレクターは、フィルターに対してログストリームを評価し、指定された条件に一致するレコードを破棄します。

drop フィルターは、test フィールドを使用して、ログレコードを評価するための 1 つ以上の条件を定義します。フィルターは、レコードを破棄するかどうかを確認するために次のルールを適用します。

  • 指定された条件がすべて true と評価された場合、テストは合格となります。
  • テストに合格すると、フィルターはログレコードを破棄します。
  • drop フィルター設定で複数のテストを定義すると、いずれかのテストに合格するとフィルターによってログレコードが破棄されます。
  • 条件の評価中にエラーが発生した場合 (参照先のフィールドが欠落している場合など)、その条件は false と評価されます。

前提条件

  • Red Hat OpenShift Logging Operator がインストールされている。
  • 管理者権限がある。
  • ClusterLogForwarder カスタムリソース (CR) を作成した。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. 既存の ClusterLogForwarder 設定を抽出し、ローカルファイルとして保存します。

    $ oc get clusterlogforwarder <name> -n <namespace> -o yaml > <filename>.yaml
    Copy to Clipboard Toggle word wrap

    詳細は、以下のようになります。

    • <name> は、設定する ClusterLogForwarder インスタンスの名前です。
    • <namespace> は、ClusterLogForwarder インスタンスを作成した namespace です (例: openshift-logging)。
    • <filename> は、設定を保存するローカルファイルの名前です。
  2. ClusterLogForwarder CR の filters spec に、不要なログレコードを破棄する設定を追加します。

    ClusterLogForwarder CR の例

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: instance
      namespace: openshift-logging
    spec:
      # ...
      filters:
      - name: drop-filter
        type: drop 
    1
    
        drop: 
    2
    
        - test: 
    3
    
          - field: .kubernetes.labels."app.version-1.2/beta" 
    4
    
            matches: .+ 
    5
    
          - field: .kubernetes.pod_name
            notMatches: "my-pod" 
    6
    
      pipelines:
      - name: my-pipeline 
    7
    
        filterRefs:
        - drop-filter
      # ...
    Copy to Clipboard Toggle word wrap

    1
    フィルターのタイプを指定します。drop フィルターは、フィルター設定に一致するログレコードを破棄します。
    2
    drop フィルターの設定オプションを指定します。
    3
    フィルターがログレコードを破棄するかどうかを評価するテストの条件を指定します。
    4
    ログレコード内のフィールドへのドット区切りのパスを指定します。
    • 各パスセグメントには、英数字とアンダースコア (a-zA-Z0-9_) を含めることができます (例: .kubernetes.namespace_name)。
    • セグメントに異なる文字が含まれている場合は、セグメントを引用符で囲む必要があります (例: .kubernetes.labels."app.version-1.2/beta")。
    • 1 つの test 設定にいくつかのフィールドパスを含めることができますが、テストに合格して drop フィルターを適用するには、すべてのフィールドパスが true と評価される必要があります。
    5
    正規表現を指定します。ログレコードがこの正規表現と一致する場合は、破棄されます。
    6
    正規表現を指定します。ログレコードがこの正規表現に一致しない場合、破棄されます。
    7
    drop フィルターを使用するパイプラインを指定します。
    注記

    単一の field パスに対して matches または notMatches 条件のいずれかを設定できますが、両方を設定することはできません。

    優先度の高いログレコードのみを保持する設定例

    # ...
    filters:
    - name: important
      type: drop
      drop:
      - test:
        - field: .message
          notMatches: "(?i)critical|error"
        - field: .level
          matches: "info|warning"
    # ...
    Copy to Clipboard Toggle word wrap

    いくつかのテストを含む設定例

    # ...
    filters:
    - name: important
      type: drop
      drop:
      - test: 
    1
    
        - field: .kubernetes.namespace_name
          matches: "openshift.*"
      - test: 
    2
    
        - field: .log_type
          matches: "application"
        - field: .kubernetes.pod_name
          notMatches: "my-pod"
    # ...
    Copy to Clipboard Toggle word wrap

    1
    フィルターは、openshift で始まる namespace を含むログを破棄します。
    2
    フィルターは、Pod 名に my-pod が含まれないアプリケーションログを破棄します。
  3. 次のコマンドを実行して、ClusterLogForwarder CR を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

1.14.10. API 監査フィルターの概要

OpenShift API サーバーは、すべての API 呼び出しに対して監査イベントを生成します。これらのイベントには、リクエスト、応答、リクエスト元のアイデンティティーに関する詳細が含まれます。これにより、大量のデータが発生する可能性があります。

API 監査フィルターは、ルールを使用して重要でないイベントを除外し、イベントサイズを縮小することで、監査証跡の管理に役立ちます。ルールは順番にチェックされ、最初の一致でチェックが停止します。イベント内のデータの量は、level フィールドの値によって異なります。

  • None: イベントは破棄されます。
  • Metadata: イベントには監査メタデータが含まれ、要求本文と応答本文は除外されます。
  • Request: イベントには監査メタデータと要求本文が含まれ、応答本文は含まれません。
  • RequestResponse: イベントには、メタデータ、要求本文、応答本文など、すべてのデータが含まれます。レスポンス本文が非常に大きくなる可能性があります。たとえば、oc get pods -A はクラスター内のすべての Pod の YAML 記述を含むレスポンス本文を生成します。
注記

API 監査フィルター機能は、ロギングデプロイメントで Vector コレクターがセットアップされている場合にのみ使用できます。

ClusterLogForwarder カスタムリソース (CR) は、標準の Kubernetes 監査ポリシー と同じ形式を使用します。ClusterLogForwarder CR は、次の追加機能を提供します。

ワイルドカード
ユーザー、グループ、namespace、およびリソースの名前には、先頭または末尾に * アスタリスク文字を付けることができます。たとえば、openshift-\* namespace は、openshift-apiserver または openshift-authentication namespace と一致します。\*/status リソースは、Pod/status または Deployment/status リソースと一致します。
デフォルトのルール

ポリシーのルールに一致しないイベントは、以下のようにフィルターされます。

  • getlistwatch などの読み取り専用システムイベントは削除されます。
  • サービスアカウントと同じ namespace 内で発生するサービスアカウント書き込みイベントは破棄されます。
  • 他のすべてのイベントは、設定されたレート制限に従って転送されます。

これらのデフォルトを無効にするには、level フィールドのみが含まれるルールでルールリストを終了するか、空のルールを追加します。

応答コードが省略される
省略する整数ステータスコードのリスト。イベントが作成されない HTTP ステータスコードをリストする OmitResponseCodes フィールドを使用して、応答で HTTP ステータスコードに基づいてイベントを破棄できます。デフォルト値は [404, 409, 422, 429] です。値が空のリスト [] の場合、ステータスコードは省略されません。

ClusterLogForwarder CR の監査ポリシーは、OpenShift Container Platform の監査ポリシーに加えて動作します。ClusterLogForwarder CR 監査フィルターは、ログコレクターが転送する内容を変更し、動詞、ユーザー、グループ、namespace、またはリソースでフィルタリングする機能を提供します。複数のフィルターを作成して、同じ監査ストリームの異なるサマリーを異なる場所に送信できます。たとえば、詳細なストリームをローカルクラスターログストアに送信し、詳細度の低いストリームをリモートサイトに送信できます。

重要
  • 監査ログを収集するには、collect-audit-logs クラスターロールが必要です。
  • 提供されている例は、監査ポリシーで可能なルールの範囲を示すことを目的としており、推奨される設定ではありません。

監査ポリシーの例

apiVersion: observability.openshift.io/v1
kind: ClusterLogForwarder
metadata:
  name: instance
  namespace: openshift-logging
spec:
  serviceAccount:
    name: example-service-account
  pipelines:
    - name: my-pipeline
      inputRefs:
        - audit 
1

      filterRefs:
        - my-policy 
2

      outputRefs:
        - my-output
  filters:
    - name: my-policy
      type: kubeAPIAudit
      kubeAPIAudit:
        # Don't generate audit events for all requests in RequestReceived stage.
        omitStages:
          - "RequestReceived"

        rules:
          # Log pod changes at RequestResponse level
          - level: RequestResponse
            resources:
            - group: ""
              resources: ["pods"]

          # Log "pods/log", "pods/status" at Metadata level
          - level: Metadata
            resources:
            - group: ""
              resources: ["pods/log", "pods/status"]

          # Don't log requests to a configmap called "controller-leader"
          - level: None
            resources:
            - group: ""
              resources: ["configmaps"]
              resourceNames: ["controller-leader"]

          # Don't log watch requests by the "system:kube-proxy" on endpoints or services
          - level: None
            users: ["system:kube-proxy"]
            verbs: ["watch"]
            resources:
            - group: "" # core API group
              resources: ["endpoints", "services"]

          # Don't log authenticated requests to certain non-resource URL paths.
          - level: None
            userGroups: ["system:authenticated"]
            nonResourceURLs:
            - "/api*" # Wildcard matching.
            - "/version"

          # Log the request body of configmap changes in kube-system.
          - level: Request
            resources:
            - group: "" # core API group
              resources: ["configmaps"]
            # This rule only applies to resources in the "kube-system" namespace.
            # The empty string "" can be used to select non-namespaced resources.
            namespaces: ["kube-system"]

          # Log configmap and secret changes in all other namespaces at the Metadata level.
          - level: Metadata
            resources:
            - group: "" # core API group
              resources: ["secrets", "configmaps"]

          # Log all other resources in core and extensions at the Request level.
          - level: Request
            resources:
            - group: "" # core API group
            - group: "extensions" # Version of group should NOT be included.

          # A catch-all rule to log all other requests at the Metadata level.
          - level: Metadata
Copy to Clipboard Toggle word wrap

1
収集されたログの種類。このフィールドの値は、監査ログの場合は audit、アプリケーションログの場合は application、インフラストラクチャーログの場合は infrastructure、またはアプリケーション用に定義された名前付きの入力になります。
2
監査ポリシーの名前。

input セレクターを使用して、ラベル式または照合するラベルキーとその値に基づいてアプリケーションログを含めることができます。

手順

  1. ClusterLogForwarder CR の input 仕様にフィルターの設定を追加します。

    以下の例は、ラベル式または一致したラベルキー/値に基づいてログを組み込むように ClusterLogForwarder CR を設定する方法を示しています。

    ClusterLogForwarder CR の例

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    # ...
    spec:
      serviceAccount:
        name: <service_account_name>
      inputs:
        - name: mylogs
          application:
            selector:
              matchExpressions:
              - key: env 
    1
    
                operator: In 
    2
    
                values: ["prod", "qa"] 
    3
    
              - key: zone
                operator: NotIn
                values: ["east", "west"]
              matchLabels: 
    4
    
                app: one
                name: app1
          type: application
    # ...
    Copy to Clipboard Toggle word wrap

    1
    照合するラベルキーを指定します。
    2
    Operator を指定します。有効な値には、InNotInExistsDoesNotExist などがあります。
    3
    文字列値の配列を指定します。operator 値が Exists または DoesNotExist のいずれかの場合、値の配列は空である必要があります。
    4
    正確なキーまたは値のマッピングを指定します。
  2. 次のコマンドを実行して、ClusterLogForwarder CR を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

1.14.12. ログレコードをプルーニングするコンテンツフィルターの設定

prune フィルターを設定すると、ログコレクターは転送前にフィルターに対してログストリームを評価します。コレクターは、Pod アノテーションなどの値の低いフィールドを削除してログレコードをプルーニングします。

前提条件

  • Red Hat OpenShift Logging Operator がインストールされている。
  • 管理者権限がある。
  • ClusterLogForwarder カスタムリソース (CR) を作成した。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. 既存の ClusterLogForwarder 設定を抽出し、ローカルファイルとして保存します。

    $ oc get clusterlogforwarder <name> -n <namespace> -o yaml > <filename>.yaml
    Copy to Clipboard Toggle word wrap

    詳細は、以下のようになります。

    • <name> は、設定する ClusterLogForwarder インスタンスの名前です。
    • <namespace> は、ClusterLogForwarder インスタンスを作成した namespace です (例: openshift-logging)。
    • <filename> は、設定を保存するローカルファイルの名前です。
  2. ClusterLogForwarder CR の filters spec にログレコードをプルーニングするための設定を追加します。

    重要

    innotIn の両方のパラメーターを指定した場合、プルーニング中に notIn 配列が in よりも優先されます。notIn 配列を使用してレコードがプルーニングされた後、続いて in 配列を使用してレコードがプルーニングされます。

    ClusterLogForwarder CR の例

    apiVersion: observability.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: instance
      namespace: openshift-logging
    spec:
      serviceAccount:
        name: my-account
      filters:
      - name: prune-filter
        type: prune 
    1
    
        prune: 
    2
    
          in: [.kubernetes.annotations, .kubernetes.namespace_id] 
    3
    
          notIn: [.kubernetes,.log_type,.message,."@timestamp",.log_source] 
    4
    
      pipelines:
      - name: my-pipeline 
    5
    
        filterRefs: ["prune-filter"]
      # ...
    Copy to Clipboard Toggle word wrap

    1
    フィルターのタイプを指定します。prune フィルターでは、設定されたフィールドでログレコードをプルーニングします。
    2
    prune フィルターの設定オプションを指定します。
    • in フィールドと notIn フィールドは、ログレコード内のフィールドへのドットで区切られたパスの配列です。
    • 各パスセグメントには、英数字とアンダースコア (a-zA-Z0-9_) を含めることができます (例: .kubernetes.namespace_name)。
    • セグメントに異なる文字が含まれている場合は、セグメントを引用符で囲む必要があります (例: .kubernetes.labels."app.version-1.2/beta")。
    3
    オプション: ログレコードから削除するフィールドを指定します。ログコレクターが他のすべてのフィールドを保持します。
    4
    オプション: ログレコードに保持するフィールドを指定します。ログコレクターが他のすべてのフィールドを削除します。
    5
    prune フィルターを適用するパイプラインを指定します。
    重要
    • フィルターは、ログレコードから .log_type.log_source.message フィールドを削除できません。それらを notIn フィールドに含める必要があります。
    • googleCloudLogging 出力を使用する場合は、notIn フィールドに .hostname を含める必要があります。
  3. 次のコマンドを実行して、ClusterLogForwarder CR を適用します。

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat