Utilización de perfiles de Chef InSpec con la conformidad de Systems Manager
AWS Systems Manager se integra con Chef
InSpec
-
Comprobar si determinados puertos están abiertos o cerrados.
-
Comprobar si determinadas aplicaciones se están ejecutando.
-
Comprobar si determinados paquetes están instalados.
-
Comprobar las claves de registro de Windows de determinadas propiedades.
Puede crear perfiles de InSpec para las instancias de Amazon Elastic Compute Cloud (Amazon EC2) y los servidores locales o las máquinas virtuales que administre con Systems Manager. El siguiente ejemplo de perfil de Chef InSpec verifica si el puerto 22 está abierto.
control 'Scan Port' do impact 10.0 title 'Server: Configure the service port' desc 'Always specify which port the SSH server should listen to. Prevent unexpected settings.' describe sshd_config do its('Port') { should eq('22') } end end
InSpec incluye una colección de recursos que le ayudan a escribir rápidamente comprobaciones y controles de auditoría. InSpec utiliza el lenguaje específico de dominio (DSL) de InSpec
Funcionamiento
El proceso de utilización de perfiles de InSpec con Compliance funciona de la siguiente manera:
-
Identifique los perfiles predefinidos de InSpec que quiera utilizar o créelos. Puede utilizar perfiles predefinidos
de GitHub para comenzar. Para obtener información sobre cómo crear perfiles de InSpec propios, consulte Perfiles de Chef InSpec . -
Almacene perfiles en un repositorio público o privado de GitHub o en un bucket de S3.
-
Ejecute Compliance con los perfiles de InSpec mediante el documento de Systems Manager (documento de SSM)
AWS-RunInspecChecks
. Puede empezar un análisis de Compliance con Run Command, una capacidad de AWS Systems Manager, para efectuar análisis bajo demanda, o bien, puede programar análisis regulares de Compliance a través de State Manager, otra capacidad de AWS Systems Manager. -
Utilice la API de Compliance o la consola de Compliance para identificar nodos no conformes.
nota
Observe la siguiente información.
-
Chef utiliza un cliente en los nodos para procesar el perfil. No es necesario instalar el cliente. Cuando Systems Manager ejecuta el documento de SSM
AWS-RunInspecChecks
, el sistema verifica si el cliente está instalado. Si no lo está, Systems Manager instala el cliente de Chef durante el análisis y lo desinstala al terminar. -
Como se describe en este tema, cuando se ejecuta el documento de SSM
AWS-RunInspecChecks
, se asigna una entrada de conformidad de tipoCustom:Inspec
a cada nodo de destino. Para asignar este tipo de conformidad, el documento llama a la operación PutComplianceItems de la API.
Ejecutar un análisis de InSpec Compliance
Esta sección contiene información acerca de cómo ejecutar un análisis de conformidad de InSpec con la consola de Systems Manager y la AWS Command Line Interface (AWS CLI). En el procedimiento con la consola, se muestra cómo configurar State Manager para que ejecute el análisis. En el procedimiento con la AWS CLI, se muestra cómo configurar Run Command para que ejecute el análisis.
Ejecución de un análisis de conformidad de InSpec con State Manager (consola)
Para ejecutar un análisis de InSpec Compliance con State Manager mediante la consola de AWS Systems Manager
Abra la consola de AWS Systems Manager en https://console.aws.amazon.com/systems-manager/
. En el panel de navegación, elija State Manager.
-
Elija Crear asociación.
-
En la sección Provide association details (Proporcionar detalles de la asociación), escriba un nombre.
-
En la lista Document (Documento), elija
AWS-RunInspecChecks
. -
En la lista Document version (Versión del documento), elija Latest at runtime (El último durante el tiempo de ejecución).
-
En la sección Parámetros, en la lista Tipo de origen, seleccione GitHub o S3.
Si selecciona GitHub, introduzca a continuación la ruta hacia un perfil InSpec en un repositorio público o privado de GitHub en el campo Información del origen. A continuación, se muestra un ejemplo de ruta hacia un perfil público proporcionado por el equipo de Systems Manager desde la siguiente ubicación: https://github.com/awslabs/amazon-ssm/tree/master/Compliance/InSpec/PortCheck
. {"owner":"awslabs","repository":"amazon-ssm","path":"Compliance/InSpec/PortCheck","getOptions":"branch:master"}
Si elige S3, escriba a continuación una URL válida hacia un perfil de InSpec en un bucket de S3 en el campo Source Info (Información del origen).
Para obtener más información sobre cómo se integra Systems Manager en GitHub y Amazon S3, consulte Ejecución de scripts desde GitHub.
En la sección Targets (Destinos), para elegir los nodos administrados en los que desea ejecutar esta operación, especifique las etiquetas, seleccione las instancias o los dispositivos de borde manualmente o especifique un grupo de recursos.
sugerencia
Si un nodo administrado que espera ver no aparece en la lista, consulte Solución de problemas de disponibilidad de nodos administrados para obtener consejos de solución de problemas.
-
En la sección Specify schedule (Especificar programación), utilice las opciones del generador de programaciones para crear una que especifique cuándo desea que se ejecute el análisis de Compliance.
En Rate control (Control de velocidad):
-
En Concurrency (Simultaneidad), especifique un número o un porcentaje de los nodos administrados en los que desea ejecutar el comando al mismo tiempo.
nota
Si seleccionó los destinos mediante la especificación de etiquetas aplicadas a nodos administrados o de grupos de recursos de AWS y no está seguro de cuántos nodos administrados tienen destino, limite el número de destinos que puede ejecutar el documento al mismo tiempo. Para ello, especifique un porcentaje.
-
En Error threshold (Umbral de errores), especifique cuándo desea parar la ejecución del comando en los demás nodos administrados después de que haya fallado en un número o un porcentaje de los nodos. Por ejemplo, si especifica tres errores, Systems Manager dejará de enviar el comando cuando se reciba el cuarto error. Los nodos administrados que estén procesando el comando todavía pueden enviar errores.
-
(Opcional) En Opciones de salida, para guardar la salida del comando en un archivo, seleccione el cuadro Write command output to an S3 bucket. Ingrese los nombres del bucket y del prefijo (carpeta) en los cuadros.
nota
Los permisos de S3 que conceden la capacidad de escribir datos en un bucket de S3 son los del perfil de instancia (para instancias de EC2) o rol de servicio de IAM (máquinas activadas de manera híbrida) asignados a la instancia, no los del usuario de IAM que realiza esta tarea. Para obtener más información, consulte Configuración de permisos de instancia requeridos para Systems Manager o Creación de un rol de servicio de IAM para un entorno híbrido. Además, si el bucket de S3 especificado se encuentra en una Cuenta de AWS diferente, asegúrese de que el perfil de instancias o el rol de servicio de IAM asociado al nodo administrado tenga los permisos necesarios para escribir en ese bucket.
-
Elija Crear asociación. El sistema crea la asociación y ejecuta el análisis de Compliance automáticamente.
-
Espere unos minutos para hasta que finalice el análisis y, a continuación, elija Compliance (Conformidad) en el panel de navegación.
-
En Corresponding managed instances (Instancias administradas correspondientes), localice los nodos en los que la columna Compliance Type (Tipo de conformidad) sea Custom:Inspec.
-
Elija un ID de nodo para ver los detalles de los estados no conformes.
Ejecución de un análisis de conformidad de InSpec con Run Command (AWS CLI)
Si aún no lo ha hecho, instale y configure la AWS Command Line Interface (AWS CLI).
Para obtener más información, consulte Instalación o actualización de la última versión de la AWS CLI.
-
Ejecute uno de los siguientes comandos para ejecutar un perfil de InSpec desde GitHub o Amazon S3.
El comando de la usa los siguientes parámetros:
-
sourceType: GitHub o Amazon S3
-
sourceInfo: URL de la carpeta del perfil InSpec en GitHub o en un bucket de S3. La carpeta debe contener el archivo base InSpec (*.yml) y todos los controles relacionados (*.rb).
GitHub
aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:
tag_name
","Values":["tag_value
"]}]' --parameters '{"sourceType":["GitHub"],"sourceInfo":["{\"owner\":\"owner_name
\", \"repository\":\"repository_name
\", \"path\": \"Inspec.yml_file
"}"]}'A continuación se muestra un ejemplo.
aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:testEnvironment","Values":["webServers"]}]' --parameters '{"sourceType":["GitHub"],"getOptions":"branch:master","sourceInfo":["{\"owner\":\"awslabs\", \"repository\":\"amazon-ssm\", \"path\": \"Compliance/InSpec/PortCheck\"}"]}'
Amazon S3
aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:
tag_name
","Values":["tag_value
"]}]' --parameters'{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://s3.aws-api-domain
/amzn-s3-demo-bucket
/Inspec.yml_file
\"}"]}'A continuación se muestra un ejemplo.
aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:testEnvironment","Values":["webServers"]}]' --parameters'{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://s3.
aws-api-domain
/amzn-s3-demo-bucket/InSpec/PortCheck.yml\"}"]}' -
-
Ejecute el siguiente comando para ver un resumen del análisis de Compliance.
aws ssm list-resource-compliance-summaries --filters Key=ComplianceType,Values=Custom:Inspec
-
Ejecute el siguiente comando para ver los detalles de un nodo no conforme.
aws ssm list-compliance-items --resource-ids
node_ID
--resource-type ManagedInstance --filters Key=DocumentName,Values=AWS-RunInspecChecks