View a markdown version of this page

メトリクスのベアラートークン認証の設定 - Amazon CloudWatch

メトリクスのベアラートークン認証の設定

注記

このページでは、CloudWatch Metrics OTLP エンドポイントのベアラートークン認証について説明します。CloudWatch Logs ベアラートークン認証については、「CloudWatch Logs ユーザーガイド」の「Setting up bearer token authentication for Logs」を参照してください。

CloudWatch OTLP エンドポイントでベアラートークン認証を使用してメトリクスを送信する前に、以下の操作を行う必要があります。

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

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

重要

可能な場合は、すべてのワークロードに対して、短期認証情報を使った SigV4 認証を使用することをお勧めします。SigV4 は、最も強力なセキュリティ体制を提供します。API キー (ベアラートークン) の使用は、AWS 以外の環境、サードパーティーベンダー、または AWS SDK をサポートしていないプラットフォームからメトリクスを送信する場合など、短期認証情報に基づく認証が使用できないシナリオに限定してください。セキュリティ要件が高いアプリケーションに CloudWatch Metrics を組み込む準備ができたら、短期認証情報に切り替えます。詳細については、「IAM ユーザーガイド」の「長期的なアクセスキーに対する代替方法」を参照してください。

重要

CloudWatch OTLP エンドポイントでは TLS (HTTPS) が必要になります。プレーン HTTP で送信されたベアラートークンリクエストは拒否されます。クライアントを設定するときは、必ず https://monitoring.AWS Region.amazonaws.com/v1/metrics を使用してください。

オプション 1: AWS コンソールを使用したクイックスタート

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

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

  2. [CloudWatch] > [設定] > [グローバル] の順に移動します。

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

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

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

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

    • [有効期限なし] を選択します (非推奨)。

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

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

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

  • CloudWatchAPIKeyAccess マネージドポリシー (cloudwatch:PutMetricData および cloudwatch:CallWithBearerToken アクセス許可を含む) をアタッチします

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

API キーを保存して検証するには
  1. 表示された認証情報をコピーしてセキュアに保存します。

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

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

    コンソールでは、生成時に API キーを AWS Secrets Manager に直接保存するオプションも用意されています。Secrets Manager に保存することを選択した場合、キーはリセット時に自動的に更新され、キーの削除時に削除されます。

    重要

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

  2. テストメトリクスを送信してセットアップ状態を確認します。

    curl -X POST "https://monitoring.us-east-1.amazonaws.com/v1/metrics" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_API_KEY" \ -d '{"resourceMetrics":[]}'

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

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

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

メトリクス取り込み用の IAM ユーザーを作成します。

メトリクス取り込み用の IAM ユーザーを作成するには
  1. AWS マネジメントコンソールにサインインし、[IAM] に移動します。

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

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

  4. ユーザー名を入力します (例: cloudwatch-metrics-api-key-user)。

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

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

    オプション A: マネージドポリシーを使用する (推奨)

    CloudWatchAPIKeyAccess マネージドポリシーをアタッチします。

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

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

    { "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchMetricsAPIs", "Effect": "Allow", "Action": [ "cloudwatch:CallWithBearerToken", "cloudwatch:PutMetricData" ], "Resource": "*" }, { "Sid": "KMSDecryptForCMKDatasets", "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Condition": { "StringLike": { "kms:ViaService": "cloudwatch.*.amazonaws.com", "kms:EncryptionContext:aws:cloudwatch:arn": "arn:aws:cloudwatch:*:*:dataset/*" } }, "Resource": "arn:aws:kms:*:*:key/*" } ] }
  7. [次へ] を選択してから [ユーザーの作成] を選択します。

注記

カスタマーマネージド KMS キー (CMK) を使用するデータセットにメトリクスを送信する場合は、KMS アクセス許可が必要です。この条件により、KMS へのアクセスは、データセットリソースに対して CloudWatch サービス経由で使用されるキーにのみ制限されます。

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

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

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

aws iam create-service-specific-credential \ --user-name cloudwatch-metrics-api-key-user \ --service-name cloudwatch.amazonaws.com \ --credential-age-days 30

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

重要

ServiceCredentialSecret 値をセキュアに保存します。後で取得することはできません。紛失した場合は、新しい API キーを生成する必要があります。

ステップ 3: メトリクスを送信

ベアラートークンを使用すれば、OTLP エンドポイントにメトリクスを即座に送信できます。

curl -X POST "https://monitoring.us-east-1.amazonaws.com/v1/metrics" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_API_KEY" \ -d '{"resourceMetrics":[]}'

エンドポイントは、application/jsonapplication/x-protobuf の両方のコンテンツタイプを受け入れます。

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

CloudWatch Metrics API キーの生成を制御する

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

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

CloudWatch Metrics API キーの使用を制御する

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

注記

CloudWatch Metrics のベアラートークンは、OTLP メトリクス取り込みエンドポイント (https://monitoring.AWS Region.amazonaws.com/v1/metrics) でのみ使用できます。クエリ API (GetMetricDataListMetricsDescribeAlarms)、PromQL クエリエンドポイント、OTLP トレースエンドポイント、OTLP ログエンドポイントなど、他の CloudWatch API またはエンドポイントを呼び出すために使用することはできません。

ポリシーの例

ID による CloudWatch Metrics API キーの生成および使用を防ぐ

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

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

ID による CloudWatch Metrics API キーの使用を防ぐ

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

CloudWatch Metrics キーの作成は、有効期限が 90 日以内の場合にのみ許可する

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

OpenTelemetry Collector でのベアラートークンの使用

ベアラートークンを使用する場合、sigv4auth 拡張機能は必要ありません。bearertokenauth 拡張機能を使用して、ファイルまたは環境変数から API キーをセキュアに指定します。

extensions: bearertokenauth: filename: "/etc/otel/cw-api-key" exporters: otlphttp: tls: insecure: false endpoint: https://monitoring.us-east-1.amazonaws.com/v1/metrics auth: authenticator: bearertokenauth receivers: otlp: protocols: http: endpoint: 0.0.0.0:4318 processors: batch: send_batch_size: 200 timeout: 10s service: extensions: [bearertokenauth] pipelines: metrics: receivers: [otlp] processors: [batch] exporters: [otlphttp]

あるいは、ファイルの代わりに環境変数を参照することも可能です。

extensions: bearertokenauth: token: "${env:CW_API_KEY}"
重要

API キーをコレクター設定ファイルに直接ハードコーディングしないでください。設定ファイルは、多くの場合、バージョン管理にコミットされるか、デプロイマニフェストに保存されます。マウントされたシークレットから読み込むには filename を、シークレットマネージャーによって挿入された環境変数を読み込むには ${env:VAR} を使用します。

注記

ベアラートークン認証では、sigv4auth 拡張機能、AWS 認証情報ファイル、IAM ロール、または IRSA 設定は必要ありません。これにより、AWS、オンプレミス、またはその他のクラウドプロバイダーなど、あらゆる環境でコレクター設定をポータブルにすることができます。

API キーのローテーション

API キーを定期的にローテーションすることで、不正アクセスのリスクが低減します。組織のセキュリティポリシーに準拠したローテーションスケジュールを策定することをお勧めします。

ローテーションプロセス

メトリクスの配信を中断することなく API キーをローテーションするには、次の手順に従ってください。

API キーをローテンションするには
  1. IAM ユーザーの新しい (セカンダリ) 認証情報を作成します。

    aws iam create-service-specific-credential \ --user-name cloudwatch-metrics-api-key-user \ --service-name cloudwatch.amazonaws.com \ --credential-age-days 90
    注記

    IAM では、IAM ユーザーごとに、サービスあたり 最大 2 つのサービス固有の認証情報を使用できます。この制限に達している場合は、新しい認証情報を作成する前に古い認証情報を削除または無効化します。

  2. (オプション) セキュアな取得と自動ローテーションを実現するために、新しい認証情報を AWS Secrets Manager に保存します。

  3. OpenTelemetry Collector の設定またはアプリケーションを更新して、新しい API キーを使用します。

  4. 元の認証情報を非アクティブに設定します。

    aws iam update-service-specific-credential \ --user-name cloudwatch-metrics-api-key-user \ --service-specific-credential-id ACCA1234EXAMPLE1234 \ --status Inactive
  5. メトリクスの配信に影響がないことを確認します。新しいキーを使用してテストリクエストを送信し、HTTP 200 レスポンスが返されることを確認します。アプリケーションの既存の CloudWatch メトリクスをモニタリングして、データが引き続き受信されていることを確認することもできます。

  6. 新しいキーで正常に配信されたことを確認したら、以前の認証情報を削除します。

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

キーの有効期限のモニタリング

既存の API キーの作成日とステータスを確認するには、list-service-specific-credentials コマンドを使用します。

aws iam list-service-specific-credentials \ --user-name cloudwatch-metrics-api-key-user \ --service-name cloudwatch.amazonaws.com

レスポンスには、各認証情報の CreateDateStatus が含まれています。この情報を使用して、有効期限が迫っているキーや、ローテーションポリシーで許可されているよりも長い期間アクティブな状態にあるキーを特定します。

侵害された API キーへの対応

API キーが侵害された疑いがある場合は、直ちに次の手順を実行してください。

侵害された API キーに対応するには
  1. さらなる不正使用を防ぐため、直ちにキーを無効化します

    aws iam update-service-specific-credential \ --user-name cloudwatch-metrics-api-key-user \ --service-specific-credential-id ACCA1234EXAMPLE1234 \ --status Inactive
  2. CloudTrail ログを確認して、不正アクセスの範囲を特定します。API キーの使用状況の監査を有効にする方法については、「CloudTrail による API キーの使用状況のログ記録」を参照してください。

  3. ローテーションプロセス」で説明されているローテーション手順に従って、置換キーを作成します

  4. 置換が完了したら、侵害されたキーを削除します

    aws iam delete-service-specific-credential \ --service-specific-credential-id ACCA1234EXAMPLE1234
  5. 調査中に IAM ユーザーのすべてのベアラートークンアクセスを直ちにブロックする必要がある場合は、拒否ポリシーをアタッチします

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

API を介してこれらのアクションを実行するには、CloudWatch Metrics API キーではなく、AWS 認証情報を使用して認証する必要があります。ベアラートークンはメトリクスの取り込みにのみ使用でき、IAM 管理オペレーションには使用できません。

次の IAM API オペレーションを使用して、侵害されたキーを管理することもできます。

  • ResetServiceSpecificCredential – 認証情報を削除することなく、キーをリセットして新しいパスワードを生成します。キーの有効期限は切れていないはずです。

API キーのセキュリティのベストプラクティス

CloudWatch Metrics API キーを保護するには、次のベストプラクティスに従います。

  • ソースコードに API キーを埋め込まないでください。アプリケーションコード、コレクター設定ファイル、またはバージョン管理システムに API キーをハードコーディングしないでください。filename または ${env:VAR} とともに bearertokenauth 拡張機能を使用して、ランタイムにシークレットを挿入します。

  • 任意のシークレットマネージャー機能を使用します。API キーを AWS Secrets Manager または同等のシークレット管理ソリューションに保存します。これにより、一元的なアクセスコントロール、監査ログ記録、および自動ローテーションが可能になります。

  • すべてのキーに有効期限を設定します。API キーを作成するときは、必ず --credential-age-days 値を指定してください。組織全体でキーの有効期間の最大値を適用するには、iam:ServiceSpecificCredentialAgeDays IAM 条件キーを使用します。

  • 最小特権アクセス許可を適用します。マネージド CloudWatchAPIKeyAccess ポリシーを開始点として使用し、必要に応じてさらに権限を制限します。

  • CloudTrail ログ記録を有効にします。CloudTrail データイベントで AWS::CloudWatch::Metric を有効にして API キーの使用状況を監査します。「CloudTrail による API キーの使用状況のログ記録」を参照してください。

  • IAM Access Analyzer でモニタリングします。IAM Access Analyzer を使用して、API キーを使用する IAM ユーザーに関連付けられた未使用の認証情報や、過剰に権限を付与するポリシーを特定します。

  • キーを定期的にローテーションします。ローテーションスケジュールを策定し、「API キーのローテーション」で説明されている手順に従います。

CloudTrail による API キーの使用状況のログ記録

AWS CloudTrail を使用して、CloudWatch Metrics OTLP 取り込みのデータイベントをログ記録できます。CloudWatch は OTLP エンドポイントへの呼び出しに対して AWS::CloudWatch::Metric データイベントを出力するため、API キーの使用状況を含むメトリクスの取り込みアクティビティを監査できるようになります。

注記

証跡用に指定する S3 バケットには、CloudTrail がログファイルを書き込むことを許可するバケットポリシーが設定されている必要があります。詳細については、「AWS CloudTrail ユーザーガイド」の「Amazon S3 bucket policy for CloudTrail」を参照してください。

CloudWatch Metrics API キー使用状況の CloudTrail ログ記録を有効にするには
  1. 証跡を作成します。

    aws cloudtrail create-trail \ --name cloudwatch-metrics-api-key-audit \ --s3-bucket-name my-cloudtrail-bucket \ --region us-east-1
  2. CloudWatch Metrics の書き込み (取り込み) データイベントをキャプチャするように、高度なイベントセレクタを設定します。

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

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

readOnly: false フィルターを使用すると、ログ記録の対象が、すべての OTLP 取り込み呼び出しを含む書き込みオペレーション (PutMetricData) に限定されます。これらのイベント内でのベアラートークンの使用状況を特定するには、証跡ログにクエリを実行し (Athena または CloudTrail Lake を使用)、API キーに関連付けられた IAM ユーザー名 (例: cloudwatch-metrics-api-key-user) でフィルタリングします。OTLP 取り込みから生成されるイベントには、イベントペイロード内の OTLP に設定された状態の AdditionalEventData.protocol が含まれており、この情報をポストホッククエリで使用することで、従来の PutMetricData SDK コールと区別することができます。