Configurar la autenticación por token de portador para métricas
nota
En esta página, se trata la autenticación por token de portador para el punto de conexión de OTLP de Métricas de CloudWatch. Para obtener información sobre la autenticación por token de portador de Registros de CloudWatch, consulte Configuración de autenticación por token de portador para Registros en la Guía del usuario de Registros de CloudWatch.
Antes de poder enviar métricas mediante la autenticación por token de portador con el punto de conexión de OTLP de CloudWatch, debe hacer lo siguiente:
-
Crear un usuario de IAM con permisos de Métricas de CloudWatch
-
Generar credenciales específicas del servicio (clave de API)
importante
Siempre que sea posible, recomendamos utilizar la autenticación por SigV4 con credenciales de corta duración para todas las cargas de trabajo. SigV4 proporciona la posición de seguridad más sólida. Restrinja el uso de claves de API (tokens de portador) a situaciones en las que la autenticación de corta duración basada en credenciales no sea factible, como el envío de métricas desde entornos que no son de AWS, proveedores externos o plataformas que no sean compatibles con el AWS SDK. Cuando lo tenga todo listo para incorporar Métricas de CloudWatch en aplicaciones con mayores requisitos de seguridad, cambie a credenciales de corta duración. Para obtener más información, consulte Alternativas para las claves de acceso a largo plazo en la Guía del usuario de IAM.
importante
El punto de conexión de OTLP de CloudWatch requiere TLS (HTTPS). Se rechazan las solicitudes de token de portador enviadas a través de HTTP sin formato. Use siempre https://monitoring. al configurar el cliente.AWS Region.amazonaws.com/v1/metrics
Opción 1: inicio rápido con la consola de AWS
La Consola de administración de AWS proporciona un flujo de trabajo simplificado para generar claves de API para el acceso a los puntos de conexión de OTLP.
Configuración del acceso a los puntos de conexión de OTLP mediante la consola
-
Inicie sesión en la Consola de AWS License Manager.
-
Vaya a CloudWatch > Configuración > Global.
-
En la sección Claves de API, elija Generar clave de API.
-
Para Expiración de la clave de API, realice una de las siguientes acciones:
-
Seleccione una duración de la expiración de la clave de API de 1, 5, 30, 90 o 365 días.
-
Elija Duración personalizada para especificar una fecha de expiración personalizada de la clave de API.
-
Seleccione Nunca caduca (no se recomienda).
-
-
Seleccione Generar clave de API.
La consola automáticamente:
-
Crea un nuevo usuario de IAM con los permisos adecuados
-
Adjunta la política administrada CloudWatchAPIKeyAccess (incluye los permisos
cloudwatch:PutMetricDataycloudwatch:CallWithBearerToken) -
Genera credenciales específicas del servicio (clave de API)
Guardado y verificación de la clave de API
-
Copie y guarde de forma segura las credenciales mostradas:
-
ID de clave de API (ID de credencial específica del servicio)
-
Secreto de clave de API (token de portador)
La consola también ofrece la opción de almacenar la clave de API directamente en AWS Secrets Manager durante la generación. Si elige guardarla en Secrets Manager, la clave se actualiza automáticamente al restablecerla y se elimina al eliminarla.
importante
Guarde el secreto de clave de API inmediatamente. No podrá recuperarla posteriormente. Si la pierde, debe generar una nueva clave de API.
-
-
Envíe una métrica de prueba para verificar la configuración:
curl -X POST "https://monitoring.us-east-1.amazonaws.com/v1/metrics" \ -H "Content-Type: application/json" \ -H "Authorization: BearerYOUR_API_KEY" \ -d '{"resourceMetrics":[]}'
Opción 2: configuración manual
Si prefiere tener más control sobre la configuración de IAM o necesita personalizar los permisos, puede configurar el acceso al punto de conexión de OTLP de forma manual.
Paso 1: Crear un usuario de IAM
Cree un usuario de IAM para la ingesta de métricas:
Creación de un usuario de IAM para la ingesta de métricas
-
Inicie sesión en la Consola de administración de AWS y vaya a IAM.
-
En el panel de navegación izquierdo, elija Usuarios.
-
Seleccione la opción Crear un usuario.
-
Escriba un nombre de usuario (por ejemplo,
cloudwatch-metrics-api-key-user). -
Elija Siguiente.
-
Adjunte una de las siguientes políticas de IAM:
Opción A: uso de la política administrada (recomendada)
Adjunte la política CloudWatchAPIKeyAccess.
Opción B: creación de una política personalizada
Cree y adjunte la siguiente política de 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/*" } ] } -
Elija Siguiente y, a continuación, Crear usuario.
nota
Los permisos de KMS son obligatorios si tiene previsto enviar métricas a conjuntos de datos que utilizan claves de KMS administradas por el cliente (CMK). Las condiciones restringen el acceso a KMS solo a las claves utilizadas a través del servicio de CloudWatch para los recursos del conjunto de datos.
Paso 2: generación de credenciales específicas del servicio (clave de API)
Genere la clave de API de Métricas de CloudWatch con la API CreateServiceSpecificCredential API. También puede usar el comando create-service-specific-credential
Para generar una clave de API con una caducidad de 30 días:
aws iam create-service-specific-credential \ --user-name cloudwatch-metrics-api-key-user \ --service-name cloudwatch.amazonaws.com \ --credential-age-days 30
La respuesta es un objeto ServiceSpecificCredential. El valor de ServiceCredentialSecret es la clave de API de Métricas de CloudWatch (token de portador).
importante
Guarde el valor de ServiceCredentialSecret de forma segura. No podrá recuperarla posteriormente. Si la pierde, debe generar una nueva clave de API.
Paso 3: envío de las métricas
Puede enviar las métricas inmediatamente al punto de conexión de OTLP con el token de portador:
curl -X POST "https://monitoring.us-east-1.amazonaws.com/v1/metrics" \ -H "Content-Type: application/json" \ -H "Authorization: BearerYOUR_API_KEY" \ -d '{"resourceMetrics":[]}'
El punto de conexión acepta los tipos de contenido application/json y application/x-protobuf.
Control de los permisos para generar y usar claves de API de Métricas de CloudWatch
Control de la generación de claves de API de Métricas de CloudWatch
La acción iam:CreateServiceSpecificCredential controla la generación de una clave específica del servicio (como una clave de API de Métricas de CloudWatch). Puede limitar esta acción a los usuarios de IAM como una forma de restringir el número de usuarios para los que se puede generar una clave.
Puede utilizar las siguientes claves de condición para imponer condiciones al permiso de la acción iam:CreateServiceSpecificCredential:
-
iam:ServiceSpecificCredentialAgeDays: permite especificar, en la condición, el tiempo de caducidad de la clave en días. -
iam:ServiceSpecificCredentialServiceName: permite especificar, en la condición, el nombre de un servicio.
Control del uso de claves de API de Métricas de CloudWatch
La acción cloudwatch:CallWithBearerToken controla el uso de una clave de API de Métricas de CloudWatch. Para impedir que una identidad use las claves de API de Métricas de CloudWatch, adjunte una política que deniegue la acción cloudwatch:CallWithBearerToken al usuario de IAM asociado a la clave.
nota
Los tokens de portador de Métricas de CloudWatch solo se pueden usar con el punto de conexión de ingesta de métricas de OTLP (https://monitoring.). No se pueden usar para llamar a ningún otro punto de conexión o API de CloudWatch, incluidas las API de consulta (AWS Region.amazonaws.com/v1/metricsGetMetricData, ListMetrics, DescribeAlarms), el punto de conexión de consulta PromQL, el punto de conexión de rastros de OTLP o el punto de conexión de registros de OTLP.
Ejemplos de políticas
Impida que una identidad genere y utilice claves de API de Métricas de CloudWatch:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyCWMetricsAPIKeys", "Effect": "Deny", "Action": [ "iam:CreateServiceSpecificCredential", "cloudwatch:CallWithBearerToken" ], "Resource": "*" } ] }
aviso
Esta política impide la creación de credenciales para todos los servicios de AWS que admiten la creación de credenciales específicas de un servicio. Para obtener más información, consulte Credenciales específicas del servicio para los usuarios de IAM en la Guía del usuario de IAM.
Impida que una identidad utilice claves de API de Métricas de CloudWatch:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "cloudwatch:CallWithBearerToken", "Resource": "*" } ] }
Permita la creación de claves de Métricas de CloudWatch solo si caducan en un plazo de 90 días:
{ "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" } } } ] }
Uso de tokens de portador con el recopilador de OpenTelemetry
Al utilizar tokens de portador, no necesita la extensión sigv4auth. Use la extensión bearertokenauth
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]
Como alternativa, puede hacer referencia a una variable de entorno en lugar de un archivo:
extensions: bearertokenauth: token: "${env:CW_API_KEY}"
importante
Nunca codifique las claves de API de forma rígida directamente en los archivos de configuración del recopilador. Los archivos de configuración suelen confirmarse en el control de versiones o se almacenan en los manifiestos de implementación. Use filename para leer un secreto montado o ${env:VAR} para leer una variable de entorno inyectada por su administrador de secretos.
nota
Con la autenticación por token de portador, no necesita la extensión sigv4auth, los archivos de credenciales de AWS, los roles de IAM ni la configuración de IRSA. Esto hace que la configuración del recopilador se pueda llevar a cualquier entorno: AWS, en las instalaciones u otros proveedores de nube.
Rotación de las claves de API
Rotar las claves de API reduce el riesgo de acceso no autorizado. Recomendamos establecer un programa de rotación que se ajuste a las políticas de seguridad de la organización.
Proceso de rotación
Para rotar una clave de API sin interrumpir la entrega de métricas, siga este procedimiento:
Rotación de una clave de API
-
Cree una nueva credencial (secundaria) para el usuario de IAM:
aws iam create-service-specific-credential \ --user-name cloudwatch-metrics-api-key-user \ --service-name cloudwatch.amazonaws.com \ --credential-age-days 90nota
IAM permite un máximo de 2 credenciales específicas del servicio por usuario de IAM por servicio. Elimine o desactive las credenciales antiguas antes de crear otras nuevas si ha alcanzado este límite.
-
(Opcional) Almacene la nueva credencial en AWS Secrets Manager para recuperarla de forma segura y rotarla automáticamente.
-
Actualice la aplicación o la configuración del recopilador de OpenTelemetry para utilizar la nueva clave de API.
-
Establezca la credencial original como inactiva:
aws iam update-service-specific-credential \ --user-name cloudwatch-metrics-api-key-user \ --service-specific-credential-idACCA1234EXAMPLE1234\ --status Inactive -
Verifique que la entrega de métricas no se vea afectada. Envíe una solicitud de prueba con la nueva clave y confirme que se reciba una respuesta HTTP 200. También puede supervisar las métricas de CloudWatch actuales de la aplicación para confirmar que los datos continúen llegando.
-
Después de confirmar que la entrega se ha efectuado correctamente con la nueva clave, elimine la credencial anterior:
aws iam delete-service-specific-credential \ --service-specific-credential-idACCA1234EXAMPLE1234
Supervisión de la caducidad de claves
Para comprobar la fecha de creación y el estado de las claves de API existentes, use el comando list-service-specific-credentials
aws iam list-service-specific-credentials \ --user-name cloudwatch-metrics-api-key-user \ --service-name cloudwatch.amazonaws.com
La respuesta incluye CreateDate y Status para cada credencial. Use esta información para identificar las claves que están a punto de caducar o que han estado activas durante más tiempo del que permite la política de rotación.
Respuesta a una clave de API comprometida
Si sospecha que una clave de API se ha visto comprometida, siga estos pasos de inmediato:
Cómo responder a una clave de API comprometida
-
Desactive la clave inmediatamente para evitar un uso no autorizado posterior:
aws iam update-service-specific-credential \ --user-name cloudwatch-metrics-api-key-user \ --service-specific-credential-idACCA1234EXAMPLE1234\ --status Inactive -
Revise los registros de CloudTrail para determinar el ámbito del acceso no autorizado. Consulte Registro del uso de claves de API con CloudTrail para obtener información sobre cómo habilitar la auditoría del uso de claves de API.
-
Cree una clave de reemplazo según el proceso de rotación descrito en Proceso de rotación.
-
Elimine la clave comprometida una vez que se haya hecho la sustitución:
aws iam delete-service-specific-credential \ --service-specific-credential-idACCA1234EXAMPLE1234 -
Adjunte una política de denegación si necesita bloquear inmediatamente todo acceso al token de portador para el usuario de IAM mientras lo investiga:
{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "cloudwatch:CallWithBearerToken", "Resource": "*" } }
nota
Para llevar a cabo estas acciones a través de la API, debe autenticarse con las credenciales de AWS y no con una clave de API de Métricas de CloudWatch. Los tokens de portador solo se pueden usar para la ingesta de métricas, no para las operaciones de administración de IAM.
También puede usar las siguientes operaciones de la API de IAM para administrar las claves comprometidas:
-
ResetServiceSpecificCredential: restablece la clave para generar una nueva contraseña sin eliminar la credencial. La clave no debe haber caducado.
Prácticas recomendadas de seguridad para claves de API
Siga estas prácticas recomendadas para proteger las claves de API de Métricas de CloudWatch:
-
Nunca inserte claves de API en el código fuente. No codifique las claves de API de forma rígida en el código de la aplicación, los archivos de configuración del recopilador o los sistemas de control de versiones. Use la extensión
bearertokenauthconfilenameo${env:VAR}para inyectar secretos en tiempo de ejecución. -
Use un administrador de secretos. Almacene las claves de API en AWS Secrets Manager o en una solución de administración de secretos equivalente. Esto permite el control de acceso centralizado, el registro de auditorías y la rotación automática.
-
Establezca una caducidad para todas las claves. Especifique siempre un valor de
--credential-age-daysal crear las claves de API. Para garantizar una vida útil máxima de las claves en toda la organización, utilice la clave de condición deiam:ServiceSpecificCredentialAgeDaysIAM. -
Aplique permisos de privilegio mínimo. Utilice la política administrada CloudWatchAPIKeyAccess como punto de partida y restrinja aún más según sea necesario.
-
Habilite el registro de CloudTrail. Para auditar el uso de las claves de API, habilite los eventos de datos de CloudTrail para
AWS::CloudWatch::Metric. Consulte Registro del uso de claves de API con CloudTrail. -
Supervise con el Analizador de acceso de IAM. Utilice el Analizador de acceso de IAM para identificar las credenciales no utilizadas y las políticas excesivamente permisivas asociadas a los usuarios de IAM de la clave de API.
-
Rote las claves con regularidad. Establezca una planificación de rotación y siga el proceso descrito en Rotación de las claves de API.
Registro del uso de claves de API con CloudTrail
Puede usar AWS CloudTrail para registrar eventos de datos para la ingesta de OTLP de Métricas de CloudWatch. CloudWatch emite eventos de datos AWS::CloudWatch::Metric para las llamadas al punto de conexión de OTLP, lo que le permite auditar la actividad de ingesta de métricas, incluido el uso de claves de API.
nota
El bucket de S3 que especifique para el registro de seguimiento debe tener una política de bucket que permita a CloudTrail escribir archivos de registro en él. Para obtener más información, consulte Política de bucket de Amazon S3 para CloudTrail en la Guía del usuario de AWS CloudTrail.
Habilitación del registro de CloudTrail para el uso de claves de API de Métricas de CloudWatch
-
Cree un registro de seguimiento:
aws cloudtrail create-trail \ --name cloudwatch-metrics-api-key-audit \ --s3-bucket-namemy-cloudtrail-bucket\ --region us-east-1 -
Configure selectores de eventos avanzados para capturar los eventos de escritura (ingesta) de datos de Métricas de CloudWatch:
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"] } ] }]' -
Inicie el registro de seguimiento:
aws cloudtrail start-logging \ --name cloudwatch-metrics-api-key-audit \ --region us-east-1
El filtro readOnly: false limita el registro a las operaciones de escritura (PutMetricData), que incluyen todas las llamadas de ingesta de OTLP. Para identificar el uso del token de portador entre estos eventos, consulte los registros de seguimiento (a través de Athena o CloudTrail Lake) y filtre por el nombre de usuario de IAM asociado a la clave de API (por ejemplo, cloudwatch-metrics-api-key-user). Los eventos de ingesta de OTLP incluyen AdditionalEventData.protocol establecido en OTLP en la carga útil del evento, que puede usar en consultas más adelante para distinguirlos de las llamadas clásicas al SDK PutMetricData.