HLC エンドポイントを使用した CloudWatch Logs へのログの送信 - Amazon CloudWatch Logs

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

HLC エンドポイントを使用した CloudWatch Logs へのログの送信

Amazon CloudWatch Logs は、シンプルな HTTP ベースのプロトコルを使用して CloudWatch Logs に直接ログを送信できる HTTP Log Collector (HLC) エンドポイントをサポートしています。この機能は、 AWS SDK 統合を必要とせずに、アプリケーションとサービスのログ取り込みを簡素化します。

HLC エンドポイント機能を使用すると、次のことが可能になります。

  • HTTP ベースのプロトコルを使用して CloudWatch Logs にログを送信する

  • IAM サービス固有の認証情報 (ベアラートークン) を使用した認証

  • AWS SDK 統合を必要とせずにログを取り込む

  • 任意のアプリケーションまたはサービスからのシンプルな HTTP POST リクエストを使用する

注記

HLC エンドポイントアクセス用の API キー (ベアラートークン) は現在プレビュー中でありus-east-1、、us-west-1us-west-2、および の AWS リージョンで使用できますus-east-2。今後の更新については、このドキュメントを確認してください。

前提条件

HLC エンドポイントを使用してログを送信する前に、以下を行う必要があります。

  • CloudWatch Logs アクセス許可を持つ IAM ユーザーを作成する

  • サービス固有の認証情報の生成 (ベアラートークン)

  • ロググループとログストリームを作成する

  • ロググループでベアラートークン認証を有効にする

オプション 1: AWS コンソールを使用したセットアップの簡素化 (推奨)

AWS マネジメントコンソールは、HLC エンドポイントアクセス用の API キーを生成するための合理化されたワークフローを提供します。

コンソールを使用して HLC エンドポイントアクセスを設定するには
  1. AWS マネジメントコンソールにサインインします。

  2. CloudWatch > Settings > Logs に移動します。

  3. API キーセクションで、API キーの生成を選択します。

  4. API キーの有効期限について、以下のいずれかを実行します。

    • API キーの有効期限として 153090、または 365 日を選択します。

    • カスタム期間を選択して、カスタム API キーの有効期限を指定します。

    • 選択 有効期限なし (推奨されません)。

  5. [API キーの生成] を選択します。

    コンソールは自動的に以下を実行します。

    • 適切なアクセス許可を持つ新しい IAM ユーザーを作成します

    • CloudWatchLogsAPIKeyAccess 管理ポリシー ( logs:PutLogEventsおよび アクセスlogs:CallWithBearerToken許可を含む) をアタッチします

    • サービス固有の認証情報を生成します (API キー)

  6. 表示された認証情報をコピーして安全に保存します。

    • API キー ID (サービス固有の認証情報 ID)

    • API キーシークレット (ベアラートークン)

    重要

    API キーシークレットをすぐに保存します。このキーは後で取得することはできません。紛失した場合は、新しい API キーを生成する必要があります。

  7. ログが保存されるロググループとログストリームを作成します。

    # Create the log group aws logs create-log-group \ --log-group-name /aws/hlc-logs/my-application \ --region us-east-1 # Create the log stream aws logs create-log-stream \ --log-group-name /aws/hlc-logs/my-application \ --log-stream-name application-stream-001 \ --region us-east-1
  8. ロググループでベアラートークン認証を有効にします。

    aws logs put-bearer-token-authentication \ --log-group-identifier /aws/hlc-logs/my-application \ --bearer-token-authentication-enabled \ --region us-east-1

    設定の検証:

    aws logs describe-log-groups \ --log-group-name-prefix /aws/hlc-logs/my-application \ --region us-east-1

含まれるアクセス許可: 自動的に作成された IAM ユーザーには、次のアクセス許可があります。

  • logs:PutLogEvents – CloudWatch Logs にログイベントを送信する

  • logs:CallWithBearerToken – ベアラートークンを使用して認証する

  • kms:Describe*kms:GenerateDataKey*kms:Decrypt – KMS で暗号化されたロググループにアクセスする (条件はログサービスに制限されます)

オプション 2: 手動セットアップ

IAM 設定をより詳細に制御したい場合、またはアクセス許可をカスタマイズする必要がある場合は、HLC エンドポイントを手動で設定できます。

ステップ 1: IAM ユーザーを作成する

ログの取り込みに使用される IAM ユーザーを作成します。

  1. AWS マネジメントコンソールにサインインし、IAM に移動します。

  2. 左のナビゲーションペインで、[ユーザー] を選択します。

  3. [ユーザーの作成] を選択します。

  4. ユーザー名 ( などcloudwatch-logs-hlc-user) を入力します。

  5. [次へ] を選択します。

  6. 次のいずれかの IAM ポリシーをアタッチします。

    オプション A: 管理ポリシーを使用する (推奨)

    CloudWatchLogsAPIKeyAccess 管理ポリシーをアタッチします。

    オプション B: カスタムポリシーを作成する

    次の IAM ポリシーを作成してアタッチします。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "LogsAPIs", "Effect": "Allow", "Action": [ "logs:CallWithBearerToken", "logs:PutLogEvents" ], "Resource": "*" }, { "Sid": "KMSAPIs", "Effect": "Allow", "Action": [ "kms:Describe*", "kms:GenerateDataKey*", "kms:Decrypt" ], "Condition": { "StringEquals": { "kms:ViaService": [ "logs.*.amazonaws.com" ] } }, "Resource": "arn:aws:kms:*:*:key/*" } ] }
  7. Next を選択し、Create user を選択します。

注記

KMS で暗号化されたロググループにログを送信する場合は、KMS アクセス許可が必要です。この条件は、CloudWatch Logs サービスを介して使用されるキーのみに KMS アクセスを制限します。

ステップ 2: サービス固有の認証情報を生成する (API キー)

CreateServiceSpecificCredential API を使用して CloudWatch Logs API キーを生成します。 CreateServiceSpecificCredential create-service-specific-credential CLI コマンドを使用することもできます。認証情報の有効期間には、1~36600 日の値を指定できます。認証情報の有効期間を指定しないと、API キーは期限切れになりません。

有効期限が 30 日の API キーを生成するには:

aws iam create-service-specific-credential \ --user-name cloudwatch-logs-hlc-user \ --service-name logs.amazonaws.com \ --credential-age-days 30

レスポンスは ServiceSpecificCredential オブジェクトです。ServiceCredentialSecret 値は CloudWatch Logs API キー (ベアラートークン) です。

重要

ServiceCredentialSecret 値は後で取得できないため、安全に保管してください。紛失した場合は、新しい API キーを生成する必要があります。

ステップ 3: ロググループとログストリームを作成する

ログが保存されるロググループとログストリームを作成します。

# Create the log group aws logs create-log-group \ --log-group-name /aws/hlc-logs/my-application \ --region us-east-1 # Create the log stream aws logs create-log-stream \ --log-group-name /aws/hlc-logs/my-application \ --log-stream-name application-stream-001 \ --region us-east-1

ステップ 4: ベアラートークン認証を有効にする

ロググループでベアラートークン認証を有効にします。

aws logs put-bearer-token-authentication \ --log-group-identifier /aws/hlc-logs/my-application \ --bearer-token-authentication-enabled \ --region us-east-1

設定の検証:

aws logs describe-log-groups \ --log-group-name-prefix /aws/hlc-logs/my-application \ --region us-east-1

HLC エンドポイントへのログの送信

エンドポイントフォーマット

HLC エンドポイント URL は次の形式に従います。

https://logs.<region>.amazonaws.com/services/collector/event?logGroup=<name>&logStream=<name>[&entityName=<name>&entityEnvironment=<environment>]

必須パラメータ:

  • <region> – AWS リージョン (例: us-east-1eu-west-1)

  • logGroup – URL エンコードされたロググループ名

  • logStream – URL エンコードされたログストリーム名

オプションのパラメータ:

オプションで、次のクエリパラメータを含めることで、ログイベントをServiceエンティティに関連付けることができます。HLC エンドポイントを介して送信されるログはカスタムテレメトリであるため、自動的にエンティティに関連付けられません。これらのパラメータを指定することで、CloudWatch Logs は を KeyAttributes.Typeに設定してエンティティを作成しService、ログイベントに関連付けます。これにより、CloudWatch の Explore 関連機能は、これらのログを同じサービスの他のテレメトリ (メトリクス、トレース、ログ) と関連付けることができるため、さまざまなシグナルタイプのアプリケーションのトラブルシューティングとモニタリングが容易になります。エンティティおよび関連するテレメトリの詳細については、「カスタムテレメトリへの関連情報の追加」を参照してください。

  • entityName – ログイベントに関連付けるサービスエンティティの名前。この値はエンティティ KeyAttributes.Name ( my-applicationや などapi.myservice.com) として保存されます。

  • entityEnvironment – サービスがホストされている環境、またはサービスが属する環境。この値はエンティティ KeyAttributes.Environment (、、 などec2:defaulteks:my-cluster/default) productionとして保存されます。

リクエストの形式

次のヘッダーと本文を含む HTTP POST を使用してログを送信します。

ヘッダー:

  • Authorization: Bearer <your-bearer-token>

  • Content-Type: application/json

本文形式:

リクエスト本文は、イベントの配列を含む JSON 形式である必要があります。

{ "event": [ { "time": 1730141374.001, "event": "Application started successfully", "host": "web-server-1", "source": "application.log", "severity": "info" }, { "time": 1730141374.457, "event": "User login successful", "host": "web-server-1", "source": "auth.log", "user": "john.doe" } ] }

フィールドの説明:

  • time – ミリ秒単位の Unix エポックタイムスタンプ (必須)

  • event – ログメッセージまたはイベントデータ (必須)

  • host – ソースホスト名または識別子 (オプション)

  • source – ログソース識別子 (オプション)

必要に応じて、追加のカスタムフィールドを含めることができます。

リクエスト例

curl -X POST \ 'https://logs.<region>.amazonaws.com/services/collector/event?logGroup=/aws/hlc-logs/my-application&logStream=application-stream-001' \ -H "Authorization: Bearer <your-bearer-token>" \ -H "Content-Type: application/json" \ -d '{ "event": [ { "time": 1730141374.001, "event": "Application started", "host": "web-server-1", "severity": "info" } ] }'

CloudWatch Logs API キーを生成して使用するためのアクセス許可を制御する

CloudWatch Logs API キーの生成と使用は、CloudWatch Logs と IAM サービスの両方でアクションと条件キーによって制御されます。

CloudWatch Logs API キーの生成の制御

iam:CreateServiceSpecificCredential アクションは、サービス固有のキー (CloudWatch Logs API キーなど) の生成を制御します。このアクションの範囲をリソースとして IAM ユーザーに限定し、キーを生成できるユーザーを制限できます。

次の条件キーを使用して、iam:CreateServiceSpecificCredential アクションのアクセス許可に条件を課すことができます。

  • iam:ServiceSpecificCredentialAgeDays – 条件でキーの有効期限を日数で指定できます。例えば、この条件キーを使用して、90 日以内に期限切れになる API キーの作成のみ許可できます。

  • iam:ServiceSpecificCredentialServiceName – 条件でサービスの名前を指定できます。たとえば、この条件キーを使用して CloudWatch Logs の API キーの作成のみを許可し、他のサービスの作成は許可しません。

CloudWatch Logs API キーの使用の制御

logs:CallWithBearerToken アクションは、CloudWatch Logs API キーの使用を制御します。ID が CloudWatch Logs API キーを使用しないようにするには、キーに関連付けられた IAM ユーザーにlogs:CallWithBearerTokenアクションを拒否するポリシーをアタッチします。

ポリシーの例

ID が CloudWatch Logs API キーを生成して使用しないようにする

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyCWLAPIKeys", "Effect": "Deny", "Action": [ "iam:CreateServiceSpecificCredential", "logs:CallWithBearerToken" ], "Resource": "*" } ] }
警告

このポリシーは、 AWS サービス固有の認証情報の作成をサポートするすべてのサービスの認証情報の作成を防止します。詳細については、「IAM ユーザーのサービス固有の認証情報」を参照してください。

ID が CloudWatch Logs API キーを使用しないようにする

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "logs:CallWithBearerToken", "Resource": "*" } ] }

CloudWatch Logs キーが 90 日以内に期限切れになる場合にのみ作成を許可する

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:CreateServiceSpecificCredential", "Resource": "arn:aws:iam::123456789012:user/username", "Condition": { "StringEquals": { "iam:ServiceSpecificCredentialServiceName": "logs.amazonaws.com" }, "NumericLessThanEquals": { "iam:ServiceSpecificCredentialAgeDays": "90" } } } ] }

侵害された CloudWatch Logs API キーの処理

API キーが侵害された場合は、そのキーを使用するためのアクセス許可を取り消す必要があります。次の IAM API オペレーションを使用して、侵害されたキーを管理できます。

注記

API を使用してこれらのアクションを実行するには、CloudWatch Logs API キーではなく AWS 認証情報で認証する必要があります。

CloudWatch Logs API キーのステータスを変更する

キーを非アクティブ化するには、update-service-specific-credential コマンドを使用します。

aws iam update-service-specific-credential \ --user-name cloudwatch-logs-hlc-user \ --service-specific-credential-id ACCA1234EXAMPLE1234 \ --status Inactive

キーを再アクティブ化するには、ステータスを に変更しますActive

CloudWatch Logs API キーのリセット

キーの値が侵害された場合、またはキーがない場合、reset-service-specific-credential コマンドを使用してキーをリセットします。キーの有効期限がまだ残っている必要があります。既に有効期限が切れている場合は、キーを削除して新しいキーを作成します。

aws iam reset-service-specific-credential \ --service-specific-credential-id ACCA1234EXAMPLE1234

CloudWatch Logs API キーを削除する

キーが不要になった場合、またはキーの有効期限が切れた場合は、delete-service-specific-credential コマンドを使用してキーを削除します。

aws iam delete-service-specific-credential \ --service-specific-credential-id ACCA1234EXAMPLE1234

CloudWatch Logs API キーを使用するためのアクセス許可を削除する IAM ポリシーをアタッチする

ID が CloudWatch Logs API キーを使用して呼び出しを実行できないようにするには、キーに関連付けられた IAM ユーザーに次のポリシーをアタッチします。

{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "logs:CallWithBearerToken", "Resource": "*" } }

CloudTrail を使用した API キーの使用状況のログ記録

を使用して AWS CloudTrail 、CloudWatch Logs API キーの使用に関するデータイベントを記録できます。CloudWatch Logs はCallWithBearerToken呼び出しAWS::Logs::LogGroupAuthorizationのデータイベントを出力するため、API キーを使用してログを送信するタイミングと方法を監査できます。

CloudWatch Logs API キーの使用に対して CloudTrail CloudTrail ログ記録を有効にするには:

注記

証跡に指定する S3 バケットには、CloudTrail がログファイルを書き込むことを許可するバケットポリシーが必要です。詳細については、CloudTrail の Amazon S3 バケットポリシー」を参照してください。

  1. 証跡を作成します。

    aws cloudtrail create-trail \ --name cloudwatch-logs-api-key-audit \ --s3-bucket-name my-cloudtrail-bucket \ --region us-east-1
  2. CloudWatch Logs ロググループ認可イベントをキャプチャするように高度なイベントセレクタを設定します。

    aws cloudtrail put-event-selectors \ --region us-east-1 \ --trail-name cloudwatch-logs-api-key-audit \ --advanced-event-selectors '[{ "Name": "CloudWatch Logs API key authorization events", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::Logs::LogGroupAuthorization"] } ] }]'
  3. 証跡のログ記録を開始します。

    aws cloudtrail start-logging \ --name cloudwatch-logs-api-key-audit \ --region us-east-1

ベストプラクティス

イベントのバッチ処理

パフォーマンスと効率を向上させるには:

  • 可能であれば、1 つのリクエストで複数のイベントをバッチ処理する

  • 推奨バッチサイズ: リクエストあたり 10~100 イベント

  • 最大リクエストサイズ: 1 MB

エラー処理

アプリケーションに適切なエラー処理を実装します。一般的な HTTP ステータスコード:

  • 200 OK – 正常に取り込まれたログ

  • 400 Bad Request – 無効なリクエスト形式またはパラメータ

  • 401 Unauthorized – 無効または期限切れのベアラートークン

  • 403 Forbidden – アクセス許可が不十分

  • 404 Not Found – ロググループまたはストリームが存在しません

  • 429 Too Many Requests – レート制限を超えました

  • 500 Internal Server Error – サービスエラー (エクスポネンシャルバックオフで再試行)

制限事項

  • 最大イベントサイズ: イベントあたり 256 KB

  • 最大リクエストサイズ: 1 MB

  • リクエストあたりの最大イベント数: 10,000

  • ロググループ名は CloudWatch Logs の命名規則に従う必要があります

  • ベアラートークン認証はロググループで有効にする必要があります