Amazon CloudWatch アカウントを使用して、クロスアカウントログ記録の問題をトラブルシューティングしたいと考えています。どうすればよいですか?
簡単な説明
CloudWatch ログは、アカウント内で、または別の AWS アカウントに、ほぼリアルタイムで送信できます。ログを別の AWS アカウントと共有したり、ログを受け取ったりすることを、クロスアカウントログ記録と呼びます。クロスアカウントログ記録は、Amazon Kinesis または Amazon Kinesis Data Firehose ストリームを使用して設定できます。または、サブスクリプションフィルターを使用して Amazon OpenSearch にデータをストリーミングすることもできます。CloudWatch コンソールはこれらすべてのオプションをサポートしています。クロスアカウントログ記録の使用方法の詳細については、次の記事を参照してください。
解決方法
Kinesis Data Stream/Kinesis Data Firehose 配信ストリームをターゲットとしてトラブルシューティングする
1. Kinesis ストリームまたは Kinesis Data Firehose がアクティブな状態であることを確認します。Kinesis コンソールでステータスを表示するか、DescribeStream または DescribeDeliveryStream API コールを使用できます。
2. CloudWatch ロググループのリージョンと Kinesis データストリームのリージョンが一致していることを確認します。
3. 正しい信頼許可を備えた AWS Identity and Access Management (IAM) ロールを作成済みであることを確認します。IAM ロールは、CloudWatch ログが Kinesis データストリームまたは Kinesis Data Firehose にログイベントを送信することを許可する必要があります。
この例では、ログデータ受信者アカウントの AWS アカウント ID は 999999999999 です。ログデータの送信者の AWS アカウント ID は 111111111111 です。Kinesis Data Streams または Kinesis Data Firehose ストリームの受信者アカウント信頼ポリシーで、アカウント 111111111111 が許可されていることを確認してください。これは、Kinesis Data Streams または Kinesis Data Firehose 配信ストリームの IAM 信頼ポリシーの例です。
{
"Statement": {
"Effect": "Allow",
"Principal": {
"Service": "logs.region.amazonaws.com"
},
"Condition": {
"StringLike": {
"aws:SourceArn": [
"arn:aws:logs:region:sourceAccountId:*",
"arn:aws:logs:region:recipientAccountId:*"
]
}
},
"Action": "sts:AssumeRole"
}
}
この例は、Kinesis Data Streams の IAM ロールポリシーを示しています。
{
"Statement": [
{
"Effect": "Allow",
"Action": "kinesis:PutRecord",
"Resource": "arn:aws:kinesis:region:999999999999:stream/RecipientStream"
}
]
}
IAM role policy for kinesis Firehose stream.
{
"Statement": [
{
"Effect": "Allow",
"Action": [
"firehose:*"
],
"Resource": [
"arn:aws:firehose:region:999999999999:*"
]
}
]
}
4. IAM ポリシーのリージョンとリソース ARN が正しいことを確認します。
5. Kinesis Data Streams のサブスクリプションフィルターを設定するときに、Kinesis Firehose を選択していないことを確認します。
6. ストリーミングを開始したら、サブスクリプションフィルターのメトリクスを確認します。フィルターパターンが有効で、受信ログイベントと一致していることを確認します。詳細については、「CloudWatch メトリクスによるモニタリング」を参照してください。次のメトリクスを使用します。
- ForwardedBytes - サブスクリプション先に転送されたログイベントの量 (圧縮済みのバイト数)。
- ForwardedLogEvents - サブスクリプションの宛先に転送されたログイベントの数。
7. ログイベントを宛先にストリーミングするときにエラーがないことを確認するには、これらのメトリクスで宛先エラーがないかを確認します。ログイベントを宛先にストリーミングするときに、ログイベントがエラーを受け取ったことを確認するデータポイントが見つかる場合があります。
- DeliveryErrors - サブスクリプション先にデータを転送するときに CloudWatch ログがエラーを受け取ったログイベントの数。
- DeliveryThrottling - サブスクリプション先にデータを転送するときに CloudWatch ログがスロットリングしたログイベントの数。
8. Kinesis Data Streams 機能に関するインサイトを提供する専用ストリームがある場合は、Kinesis Data Streams または Kinesis Firehose のメトリクスを確認してください。詳細については、「Monitoring the Amazon Kinesis Data Streams Service with Amazon CloudWatch」(Amazon CloudWatch を使用した Amazon Kinesis Data Streams サービスのモニタリング) および「Monitoring Kinesis Data Firehose using CloudWatch Metrics」(CloudWatch メトリクスを使用した Kinesis Data Firehose のモニタリング) を参照してください。
ターゲットとしての OpenSearch をトラブルシューティングする
1. OpenSearch ドメインがパブリックアクセスまたは VPC アクセスのいずれかを許可していることを確認します。ドメインの作成の詳細については、「Amazon OpenSearch Service ドメインの作成と管理」を参照してください。
2. AWS Lambda 関数に、次のロールポリシーを備えた lambda.amazonaws.com の信頼関係を持つ IAM 実行ロールがあることを確認してください。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"es:*"
],
"Effect": "Allow",
"Resource": "arn:aws:es:region:account-id:domain/target-domain-name/*"
}
]
}
3. ターゲットの OpenSearch ドメインが VPC アクセスを使用している場合、ロールに AWSLambdaVPCAccessExecutionRole ポリシーがアタッチされていることを確認します。
関連情報
Create cross account & cross Region CloudWatch dashboards (クロスアカウントとクロスリージョンの CloudWatch ダッシュボードを作成する)