View a markdown version of this page

Utilisation des paramètres dans les modèles PySpark d'analyse - AWS Clean Rooms

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisation des paramètres dans les modèles PySpark d'analyse

Les paramètres augmentent la flexibilité de vos modèles d' PySpark analyse en permettant de fournir différentes valeurs au moment de la soumission des tâches. Les paramètres sont accessibles via l'objet de contexte transmis à votre fonction de point d'entrée.

Note

Les paramètres sont des chaînes fournies par l'utilisateur qui peuvent contenir du contenu arbitraire.

  • Passez en revue le code pour vous assurer que les paramètres sont gérés en toute sécurité afin d'éviter tout comportement inattendu dans votre analyse.

  • Concevez la gestion des paramètres de manière à ce qu'elle fonctionne en toute sécurité, quelles que soient les valeurs des paramètres fournies au moment de la soumission.

Accès aux paramètres

Les paramètres sont disponibles dans le context['analysisParameters'] dictionnaire. Toutes les valeurs des paramètres sont des chaînes de caractères.

Exemple Accès aux paramètres en toute sécurité
def entrypoint(context): # Access parameters from context parameters = context['analysisParameters'] threshold = parameters['threshold'] table_name = parameters['table_name'] # Continue with analysis using parameters spark = context['sparkSession'] input_df = context['referencedTables'][table_name] # Convert threshold value threshold_val = int(threshold) # Use parameter in DataFrame operation filtered_df = input_df.filter(input_df.amount > threshold_val) return { "results": { "output": filtered_df } }

Bonnes pratiques de sécurité pour les paramètres

Avertissement

Les paramètres sont des chaînes fournies par l'utilisateur qui peuvent contenir du contenu arbitraire. Vous devez gérer les paramètres en toute sécurité pour éviter les failles de sécurité dans votre code d'analyse.

Modèles de gestion des paramètres non sécurisés à éviter :

  • Exécution de paramètres sous forme de code — Ne jamais utiliser eval() ou exec() sur des valeurs de paramètres

    # UNSAFE - Don't do this eval(parameters['expression']) # Can execute arbitrary code
  • Interpolation de chaînes SQL — Ne concaténez jamais de paramètres directement dans des chaînes SQL

    # UNSAFE - Don't do this sql = f"SELECT * FROM table WHERE column = '{parameters['value']}'" # SQL injection risk
  • Opérations de chemin de fichier non sécurisées : n'utilisez jamais de paramètres directement dans les opérations du système de fichiers sans validation

    # UNSAFE - Don't do this file_path = f"/data/{parameters['filename']}" # Path traversal risk

Modèles de gestion des paramètres sécurisés :

  • Utiliser les paramètres dans les DataFrame opérations — Spark DataFrames gère les valeurs des paramètres en toute sécurité

    # SAFE - Use parameters in DataFrame operations threshold = int(parameters['threshold']) filtered_df = input_df.filter(input_df.value > threshold)
  • Valider les valeurs des paramètres — Vérifiez que les paramètres répondent aux formats attendus avant utilisation

    # SAFE - Validate parameters before use def validate_date(date_str): try: from datetime import datetime datetime.strptime(date_str, '%Y-%m-%d') return True except ValueError: return False date_param = parameters['date_filter'] or '2024-01-01' if not validate_date(date_param): raise ValueError(f"Invalid date format: {date_param}")
  • Utiliser des listes d'autorisation pour les valeurs des paramètres : dans la mesure du possible, validez les paramètres par rapport aux bonnes valeurs connues

    # SAFE - Use allowlists allowed_columns = ['column1', 'column2', 'column3'] column_param = parameters['column_name'] if column_param not in allowed_columns: raise ValueError(f"Invalid column: {column_param}")
  • Conversion de type avec gestion des erreurs — Convertissez les paramètres de chaîne en types attendus en toute sécurité

    # SAFE - Convert with error handling try: batch_size = int(parameters['batch_size'] or '1000') if batch_size <= 0 or batch_size > 10000: raise ValueError(f"Batch size must be between 1 and 10000") except ValueError as e: print(f"Invalid parameter: {e}") raise
Important

N'oubliez pas que les paramètres ignorent la révision du code lorsque les exécuteurs de tâches fournissent des valeurs différentes. Concevez votre gestion des paramètres pour qu'elle fonctionne en toute sécurité, quelles que soient les valeurs de paramètres fournies.

Exemple de paramètre complet

Exemple Utilisation sécurisée des paramètres dans un PySpark script
def entrypoint(context): try: # Access Spark session and tables spark = context['sparkSession'] input_table = context['referencedTables']['sales_data'] # Access parameters - fail fast if analysisParameters missing parameters = context['analysisParameters'] # Validate and convert numeric parameter (handles empty strings with default) try: threshold = int(parameters['threshold'] or '100') if threshold <= 0: raise ValueError("Threshold must be positive") except (ValueError, TypeError) as e: print(f"Invalid threshold parameter: {e}") raise # Validate date parameter (handles empty strings with default) date_filter = parameters['start_date'] or '2024-01-01' from datetime import datetime try: datetime.strptime(date_filter, '%Y-%m-%d') except ValueError: raise ValueError(f"Invalid date format: {date_filter}") # Use parameters safely in DataFrame operations filtered_df = input_table.filter( (input_table.amount > threshold) & (input_table.date >= date_filter) ) result_df = filtered_df.groupBy("category").agg( {"amount": "sum"} ) return { "results": { "filtered_results": result_df } } except Exception as e: print(f"Error in analysis: {str(e)}") raise