パラメータ処理の問題のトラブルシューティング
パラメータ処理のよくある問題
- 実行中に環境変数を使用できない
-
問題: 環境変数 (
SSM_
) が見つからないことによりコマンドが失敗する。parameter-name
考えられる原因:
-
SSM Agent バージョンが環境変数補間をサポートしていない
-
interpolationType
がENV_VAR
に設定されていない -
パラメータ名が予想される環境変数名と一致しない
解決策:
-
SSM Agent バージョンが 3.3.2746.0 以降であることを確認する
-
古いエージェントバージョンのフォールバックロジックを追加する
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"
-
パラメータ検証のヒント
次の方法を使ってパラメータ処理を検証します。
-
テスト環境変数の可用性:
#!/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
-
パラメータのパターンを確認します。
parameters: myParameter: type: String allowedPattern: "^[a-zA-Z0-9_-]+$" description: "Test this pattern with sample inputs"
-
エラー処理を含めます。
if [[ ! "$SSM_parameter" =~ ^[a-zA-Z0-9_-]+$ ]]; then echo "Parameter validation failed" exit 1 fi