Usar os perfis do Chef InSpec com o Systems Manager Compliance
O AWS Systems Manager é integrado ao Chef
InSpec
-
Verificar se portas específicas estão abertas ou fechadas.
-
Verificar se aplicativos específicos estão em execução.
-
Verificar se determinados pacotes estão instalados.
-
Verificar propriedades específicas em chaves do Registro do Windows.
Você pode criar perfis do InSpec para instâncias do Amazon Elastic Compute Cloud (Amazon EC2) e para servidores on-premises ou máquinas virtuais (VMs) que você gerencia com o Systems Manager. O seguinte exemplo do perfil do Chef InSpec verifica se a porta 22 está aberta.
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
O InSpec inclui um conjunto de recursos que ajudam você a escrever rapidamente verificações e controles de auditoria. O InSpec usa a Domain-specific Language (DSL) do InSpec
Como funciona
Veja a seguir a forma como o processo de usar perfis do InSpec com o Compliance funciona:
-
Identifique perfis do InSpec predefinidos que você deseja usar ou crie seus próprios. Você pode usar perfis predefinidos
no GitHub para começar. Para obter informações sobre como criar seus próprios perfis do InSpec, consulte Perfis do Chef InSpec -
Armazene perfis em um repositório GitHub público ou privado ou em um bucket do S3.
-
Execute o Compliance com seus perfis do InSpec usando o documento do Systems Manager (documento do SSM)
AWS-RunInspecChecks
. Você pode iniciar uma verificação do Compliance usando o Run Command, um recurso do AWS Systems Manager, para verificações sob demanda ou programar verificações regulares do Compliance usando o State Manager, um recurso do AWS Systems Manager. -
Identifique os nós incompatíveis usando a API Compliance ou o console do Compliance.
nota
Observe as seguintes informações:
-
O Chef usa um cliente em seus nós gerenciados para processar o perfil. Você não precisa instalar o cliente. Quando o Systems Manager executa o documento
AWS-RunInspecChecks
, o sistema verifica se o cliente está instalado. Caso contrário, o Systems Manager instala o cliente do Chef durante a verificação e, em seguida, desinstala o cliente após a verificação ser concluída. -
A execução do documento do SSM
AWS-RunInspecChecks
, conforme descrito neste tópico, atribui uma entrada de conformidade do tipoCustom:Inspec
para cada nó de destino. Para atribuir esse tipo de conformidade, o documento chama a operação de API PutComplianceItems.
Executar uma verificação de conformidade no InSpec
Esta seção inclui informações sobre como executar uma verificação de conformidade do InSpec usando o console do Systems Manager e a AWS Command Line Interface (AWS CLI). O procedimento do console mostra como configurar o State Manager para executar a verificação. O procedimento da AWS CLI mostra como configurar o Run Command para executar a verificação.
Executar uma verificação de conformidade no InSpec com State Manager (console)
Como executar uma verificação de conformidade no InSpec com o State Manager usando o console do AWS Systems Manager
Abra o console AWS Systems Manager em https://console.aws.amazon.com/systems-manager/
. No painel de navegação, escolha State Manager.
-
Escolha Create association (Criar associação).
-
Na seção Provide association details (Fornecer detalhes da associação), digite um nome.
-
Na lista Document (Documento), escolha
AWS-RunInspecChecks
. -
Na lista Document version (Versão do documento), escolha Latest at runtime (Mais recente em runtime).
-
Na seção Parâmetros, na lista Tipo de origem, escolha GitHub ou S3.
Se você escolher GitHub, digite o caminho para um perfil do InSpec em um repositório do GitHub público ou privado no campo Informações da origem. Este é um caminho de exemplo para um perfil público fornecido pela equipe do Systems Manager no seguinte local: https://github.com/awslabs/amazon-ssm/tree/master/Compliance/InSpec/PortCheck
. {"owner":"awslabs","repository":"amazon-ssm","path":"Compliance/InSpec/PortCheck","getOptions":"branch:master"}
Se você escolher S3, insira um URL válido para um perfil do InSpec em um bucket do S3, no campo Source Info (Informações de origem).
Para obter mais informações sobre como o Systems Manager se integra com o GitHub e com o Amazon S3, consulte Executar scripts do GitHub.
Na seção Targets (Destinos), escolha os nós gerenciados nos quais você quer executar essa operação, especificando as tags, selecionando as instâncias ou dispositivos de borda manualmente ou especificando um grupo de recursos.
dica
Se um nó gerenciado que você espera ver não estiver listado, consulte Solução de problemas de disponibilidade do nó gerenciado para obter dicas de solução de problemas.
-
Na seção Specify schedule (Especificar programação), use as opções do construtor de programação para criar uma programação que especifica quando você deseja que a verificação do Compliance seja executada.
Para Rate control (Controle de taxa):
-
Em Concurrency (Concorrência), especifique um número ou uma porcentagem de nós gerenciados nos quais executar o comando ao mesmo tempo.
nota
Se você selecionou destinos especificando tags aplicadas a instâncias a nós gerenciados ou especificando grupos de recursos da AWS, e não tiver certeza de quantas instâncias são direcionadas, restrinja o número de instâncias que poderão executar o documento ao mesmo tempo, especificando uma porcentagem.
-
Em Error threshold (Limite de erro), especifique quando parar de executar o comando em outros nós depois de falhar em alguns ou em uma porcentagem de nós. Por exemplo, se você especificar três erros, o Systems Manager deixará de enviar o comando quando o 4° erro for recebido. Os nós gerenciados que continuam processando o comando também podem enviar erros.
-
(Opcional) Em Output options (Opções de saída), para salvar a saída do comando em um arquivo, selecione a caixa Write command output to an S3 bucket (Gravar saída do comando em um bucket do S3). Digite os nomes de bucket e prefixo (pastas) nas caixas de texto.
nota
As permissões do S3 que concedem a possibilidade de gravar os dados em um bucket do S3 são as do perfil de instância (para instâncias do EC2) ou perfil de serviço do IAM (máquinas ativadas para ambientes híbridos) atribuído à instância, e não as do usuário do IAM que realiza essa tarefa. Para obter mais informações, consulte Configurar permissões de instância obrigatórias para o Systems Manager ou Criar um perfil de serviço do IAM para um ambiente híbrido. Além disso, se o bucket do S3 especificado estiver em uma conta da Conta da AWS diferente, verifique se o perfil da instância ou a função de serviço do IAM associado ao nó gerenciado tenha as permissões necessárias para gravar nesse bucket.
-
Escolha Create Association (Criar associação). O sistema cria a associação e executa automaticamente a verificação do Compliance.
-
Aguarde vários minutos até que a verificação seja concluída e, em seguida, escolha Compliance no painel de navegação.
-
Em Corresponding managed instances (Instâncias gerenciadas correspondentes), localize os nós em que a coluna Compliance Type (Tipo de compatibilidade) seja Custom:Inspec.
-
Escolha o ID de um nó para visualizar os detalhes dos status de incompatibilidade.
Executar uma verificação de conformidade no InSpec com Run Command (AWS CLI)
Instale e configure a AWS Command Line Interface (AWS CLI), caso ainda não o tenha feito.
Para obter informações, consulte Instalar ou atualizar a versão mais recente da AWS CLI.
-
Execute um dos seguintes comandos para executar um perfil do InSpec no GitHub ou no Amazon S3.
O comando usa os seguintes parâmetros:
-
sourceType: GitHub ou Amazon S3
-
sourceInfo: URL para a pasta de perfil do InSpec no GitHub ou em um bucket do S3. A pasta base deve conter o arquivo base do InSpec (*.yml) e todos os 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
"}"]}'Aqui está um exemplo.
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
\"}"]}'Aqui está um exemplo.
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\"}"]}' -
-
Execute o comando a seguir para visualizar um resumo da verificação do Compliance.
aws ssm list-resource-compliance-summaries --filters Key=ComplianceType,Values=Custom:Inspec
-
Execute o comando a seguir para ver detalhes de um nó que não é compatível.
aws ssm list-compliance-items --resource-ids
node_ID
--resource-type ManagedInstance --filters Key=DocumentName,Values=AWS-RunInspecChecks