Solução de problemas de tratamento de parâmetros - AWS Systems Manager

Solução de problemas de tratamento de parâmetros

Problemas comuns de tratamento de parâmetros

Variáveis de ambiente não disponíveis durante a execução

Problema: os comandos falham porque as variáveis de ambiente (SSM_parameter-name) não foram encontradas.

Causas possíveis:

  • A versão do SSM Agent não é compatível com a interpolação de variáveis de ambiente

  • interpolationType não está definido como ENV_VAR

  • O nome do parâmetro não corresponde ao nome da variável de ambiente esperada

Solução:

  • Verifique se a versão do SSM Agent é 3.3.2746.0 ou posterior

  • Adicione uma lógica de fallback para as versões mais antigas do agente:

    if [ -z "${SSM_parameterName+x}" ]; then export SSM_parameterName="{{parameterName}}" fi
Valores de parâmetros com caracteres especiais

Problema: os comandos falham quando os valores dos parâmetros contêm espaços, aspas ou outros caracteres especiais.

Solução:

  • Use as aspas adequadas ao referenciar variáveis de ambiente:

    # Correct echo "$SSM_parameter-name" # Incorrect echo $SSM_parameter-name
  • Adicione validação de entrada usando allowedPattern para restringir caracteres especiais

Comportamento inconsistente entre plataformas

Problema: o tratamento de parâmetros funciona de forma diferente nos sistemas Linux e Windows Server.

Solução:

  • Use a sintaxe da variável de ambiente específica da plataforma:

    # PowerShell $env:SSM_parameter-name # Bash $SSM_parameter-name
  • Use verificações de pré-condições específicas da plataforma em seu documento

Valores dos parâmetros não foram devidamente escapados

Problema: vulnerabilidades de injeção de comando, apesar de usar a interpolação de variáveis de ambiente.

Solução:

  • Sempre use o escape adequado ao incluir valores de parâmetros nos comandos:

    # Correct mysql_command="mysql -u \"$SSM_username\" -p\"$SSM_password\"" # Incorrect mysql_command="mysql -u $SSM_username -p$SSM_password"

Dicas de validação de parâmetros

Use estas técnicas para validar o tratamento de parâmetros:

  1. Verifique a disponibilidade de variáveis de ambiente:

    #!/bin/bash # Print all SSM_ environment variables env | grep ^SSM_ # Test specific parameter if [ -n "$SSM_parameter" ]; then echo "Parameter is available" else echo "Parameter is not available" fi
  2. Verifique os padrões dos parâmetros:

    parameters: myParameter: type: String allowedPattern: "^[a-zA-Z0-9_-]+$" description: "Test this pattern with sample inputs"
  3. Inclua o tratamento de erros:

    if [[ ! "$SSM_parameter" =~ ^[a-zA-Z0-9_-]+$ ]]; then echo "Parameter validation failed" exit 1 fi