ベアラートークン認証の設定 - Amazon CloudWatch Logs

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

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

いずれかの HTTP 取り込みエンドポイントでベアラートークン認証を使用してログを送信する前に、以下を行う必要があります。

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

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

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

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

重要

これが可能なすべてのワークロードに対して、短期認証情報で SigV4 認証を使用することをお勧めします。SigV4 は、最も強力なセキュリティ体制を提供します。API キー (ベアラートークン) の使用は、短期的な認証情報ベースの認証が不可能なシナリオに制限します。セキュリティ要件が高いアプリケーションに CloudWatch Logs を組み込む準備ができたら、短期認証情報に切り替える必要があります。詳細については、IAM ユーザーガイドの「長期アクセスキーの代替」を参照してください。

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

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

コンソールを使用して HTTP エンドポイントアクセスを設定するには
  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 設定をより詳細に制御する場合、またはアクセス許可をカスタマイズする必要がある場合は、HTTP エンドポイントアクセスを手動で設定できます。

ステップ 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

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" } } } ] }

API キーの更新

API キーを定期的にローテーションすると、不正アクセスのリスクが軽減されます。組織のセキュリティポリシーに沿ったローテーションスケジュールを確立することをお勧めします。

ローテーションプロセス

ログ配信を中断せずに API キーをローテーションするには、次の手順に従います。

  1. IAM ユーザーの新しい (セカンダリ) 認証情報を作成します。

    aws iam create-service-specific-credential \ --user-name cloudwatch-logs-hlc-user \ --service-name logs.amazonaws.com \ --credential-age-days 90
  2. (オプション) 安全な取得と自動ローテーション AWS Secrets Manager のために、新しい認証情報を に保存します。

  3. 新しい認証情報をベンダーのポータルにインポートするか、アプリケーション設定を更新して新しい API キーを使用します。

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

    aws iam update-service-specific-credential \ --user-name cloudwatch-logs-hlc-user \ --service-specific-credential-id ACCA1234EXAMPLE1234 \ --status Inactive
  5. CloudWatch でロググループのIncomingBytesメトリクスをモニタリングすることで、ログ配信に影響がないことを確認します。詳細については、「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-logs-hlc-user \ --service-name logs.amazonaws.com

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

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

API キーが侵害された疑いがある場合は、すぐに次の手順を実行します。

  1. キーをすぐに無効にして、それ以上の不正使用を防止します。

    aws iam update-service-specific-credential \ --user-name cloudwatch-logs-hlc-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": "logs:CallWithBearerToken", "Resource": "*" } }
注記

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

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

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

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

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

  • ソースコードに API キーを埋め込まないでください。アプリケーションコードで API キーをハードコードしたり、バージョン管理システムにコミットしたりしないでください。キーが誤ってパブリックリポジトリにコミットされた場合、 AWS 自動スキャンはキーにフラグを付ける可能性があるため、すぐにキーをローテーションする必要があります。

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

  • すべてのキーの有効期限を設定します。API キーを作成するときは、常に--credential-age-days値を指定します。組織全体でキーの最大有効期間を適用するには、IAM iam:ServiceSpecificCredentialAgeDays 条件キーを使用します。例については、CloudWatch Logs キーが 90 日以内に期限切れになる場合にのみ作成を許可するを参照してください。

  • 最小特権のアクセス許可を適用します。IAM ユーザーのアクセス許可の範囲を、必要なロググループとアクションのみに設定します。マネージド CloudWatchLogsAPIKeyAccess ポリシーを開始点として使用し、必要に応じてさらに制限します。

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

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

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

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