對參數處理問題進行疑難排解 - AWS Systems Manager

AWS Systems ManagerChange Manager 不再開放給新客戶。現有客戶可以繼續正常使用該服務。如需詳細資訊,請參閱AWS Systems ManagerChange Manager可用性變更

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

對參數處理問題進行疑難排解

常見的參數處理問題

執行期間無法使用的環境變數

問題:由於找不到環境變數 (SSM_parameter-name),命令失敗。

可能原因:

  • SSM Agent 版本不支援環境變數插補

  • interpolationType 未設定為 ENV_VAR

  • 參數名稱不符合預期的環境變數名稱

解決方案

  • 驗證 SSM Agent 版本是否為 3.3.2746.0 或更新版本

  • 新增舊版 Agent 的備用邏輯:

    if [ -z "${SSM_parameterName+x}" ]; then export SSM_parameterName="{{parameterName}}" fi
參數值包含特殊字元

問題:當參數值包含空格、引號或其他特殊字元時,命令失敗。

解決方案

  • 引用環境變數時使用適當的引號:

    # Correct echo "$SSM_parameter-name" # Incorrect echo $SSM_parameter-name
  • 使用 allowedPattern 新增輸入驗證以限制特殊字元

跨平台的不一致行為

問題:參數處理在 Linux 和 Windows Server 系統上的運作方式不同。

解決方案

  • 使用平台特定的環境變數語法:

    # PowerShell $env:SSM_parameter-name # Bash $SSM_parameter-name
  • 在您的文件中使用平台特定的先決條件檢查

參數值未正確逸出

問題:儘管使用了環境變數插補,仍存在命令注入漏洞。

解決方案

  • 命令中包含參數值時,一律使用適當的逸出:

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

參數驗證技巧

使用以下技巧來驗證參數處理:

  1. 測試環境變數可用性:

    #!/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. 驗證參數模式:

    parameters: myParameter: type: String allowedPattern: "^[a-zA-Z0-9_-]+$" description: "Test this pattern with sample inputs"
  3. 包含錯誤處理:

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