1.5. 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 による認証は次のように機能します。
- ログコレクターは、AWS の OpenID Connect (OIDC) プロバイダーにサービスアカウントトークンを提示して、Security Token Service (STS) から一時的な AWS 認証情報を要求します。
- 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.5.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 がインストールされている。
手順
CloudWatch にログを書き込む権限を付与する IAM ポリシーを作成します。
次の内容を含むファイル (例:
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 のシークレット作成 リンクのコピーリンクがクリップボードにコピーされました!
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
$ 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 シークレットの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.5.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) を作成または更新します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- サービスアカウントを指定します。
- 2
- 出力の名前を指定します。
- 3
cloudwatch
タイプを指定します。- 4
- ログストリームのグループ名を指定します。
- 5
- AWS リージョンを指定します。
- 6
- STS の認証タイプとして
iamRole
を指定します。 - 7
role_arn
リソースが保存されているシークレットの名前とキーを指定します。- 8
- 認証に使用するサービスアカウントトークンを指定します。投影されたサービスアカウントトークンを使用するには、
from: serviceAccount
を使用します。 - 9
- パイプラインを使用して転送するログタイプ (
application
、infrastructure
またはaudit
) を指定します。 - 10
- このパイプラインでログを転送する時に使用する出力の名前を指定します。
1.5.4. 不要なログレコードを削除するコンテンツフィルターの設定 リンクのコピーリンクがクリップボードにコピーされました!
すべてのクラスターログを収集すると大量のデータが生成され、その移動と保存にコストがかかる可能性があります。ボリュームを削減するには、転送前に不要なログレコードを除外するように drop
フィルターを設定できます。ログコレクターは、フィルターに対してログストリームを評価し、指定された条件に一致するレコードを破棄します。
drop
フィルターは、test
フィールドを使用して、ログレコードを評価するための 1 つ以上の条件を定義します。フィルターは、レコードを破棄するかどうかを確認するために次のルールを適用します。
- 指定された条件がすべて 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
インスタンスを作成した namespace です (例: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"
)。 -
1 つの
test
設定にいくつかのフィールドパスを含めることができますが、テストに合格してdrop
フィルターを適用するには、すべてのフィールドパスが true と評価される必要があります。
-
各パスセグメントには、英数字とアンダースコア (
- 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
: イベントには監査メタデータと要求本文が含まれ、応答本文は含まれません。 -
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
リソースと一致します。 - デフォルトのルール
ポリシーのルールに一致しないイベントは、以下のようにフィルターされます。
-
get
、list
、watch
などの読み取り専用システムイベントは削除されます。 - サービスアカウントと同じ namespace 内で発生するサービスアカウント書き込みイベントは破棄されます。
- 他のすべてのイベントは、設定されたレート制限に従って転送されます。
これらのデフォルトを無効にするには、
level
フィールドのみが含まれるルールでルールリストを終了するか、空のルールを追加します。-
- 応答コードが省略される
-
省略する整数ステータスコードのリスト。イベントが作成されない HTTP ステータスコードをリストする
OmitResponseCodes
フィールドを使用して、応答で HTTP ステータスコードに基づいてイベントを破棄できます。デフォルト値は[404, 409, 422, 429]
です。値が空のリスト[]
の場合、ステータスコードは省略されません。
ClusterLogForwarder
CR の監査ポリシーは、OpenShift Container Platform の監査ポリシーに加えて動作します。ClusterLogForwarder
CR 監査フィルターは、ログコレクターが転送する内容を変更し、動詞、ユーザー、グループ、namespace、またはリソースでフィルタリングする機能を提供します。複数のフィルターを作成して、同じ監査ストリームの異なるサマリーを異なる場所に送信できます。たとえば、詳細なストリームをローカルクラスターログストアに送信し、詳細度の低いストリームをリモートサイトに送信できます。
-
監査ログを収集するには、
collect-audit-logs
クラスターロールが必要です。 - 提供されている例は、監査ポリシーで可能なルールの範囲を示すことを目的としており、推奨される設定ではありません。
監査ポリシーの例
1.5.6. ラベル式または一致するラベルキーと値を含む入力時でのアプリケーションログのフィルタリング リンクのコピーリンクがクリップボードにコピーされました!
input
セレクターを使用して、ラベル式または照合するラベルキーとその値に基づいてアプリケーションログを含めることができます。
手順
ClusterLogForwarder
CR のinput
仕様にフィルターの設定を追加します。以下の例は、ラベル式または一致したラベルキー/値に基づいてログを組み込むように
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
インスタンスを作成した namespace です (例:openshift-logging
)。 -
<filename>
は、設定を保存するローカルファイルの名前です。
-
ClusterLogForwarder
CR のfilters
spec にログレコードをプルーニングするための設定を追加します。重要in
とnotIn
の両方のパラメーターを指定した場合、プルーニング中にnotIn
配列がin
よりも優先されます。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