

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.

# Gestion des secrets
<a name="secrets"></a>

Lorsque vous développez des applications à l'aide de .NET, vous devez stocker des secrets tels que l'identifiant de l'application, le secret de l'application et les chaînes de connexion à la base de données. Ces secrets et chaînes de connexion sont stockés dans `appsettings.json` ou`web.config`. Les développeurs ajoutent généralement ces fichiers de configuration dans un référentiel public, ce qui augmente le risque d'atteinte à la sécurité. Vous pouvez atténuer ce risque en utilisant AWS Secrets Manager un magasin de paramètres, qui vous permet de stocker et de récupérer ces valeurs en toute sécurité pour votre application. Les sections suivantes expliquent comment configurer Secrets Manager et Parameter Store pour vos applications .NET Framework.

**Topics**
+ [Configuration AWS Secrets Manager](configure-asm.md)
+ [Configuration du magasin de paramètres](configure-store.md)

# Configuration AWS Secrets Manager
<a name="configure-asm"></a>

AWS Secrets Manager vous aide à protéger les secrets dont vous avez besoin pour accéder à vos applications, services et ressources informatiques. Le service stocke, gère, chiffre et fait pivoter en toute sécurité les informations d'identification de base de données, les clés d'API et autres secrets, y compris les OAuth jetons, et fournit une intégration native avec Amazon Relational Database Service (Amazon RDS), Amazon Redshift et Amazon DocumentDB. Les utilisateurs et les applications récupèrent les secrets en appelant Secrets Manager APIs, ce qui élimine le besoin de coder en dur les informations sensibles en texte brut. Secrets Manager inclut des autorisations de contrôle d'accès détaillées et fournit un emplacement centralisé pour auditer la rotation des secrets dans les AWS Cloud environnements, locaux et tiers.

## Conditions préalables à l'utilisation de Secrets Manager avec les applications .NET Framework
<a name="configure-asm-prereq"></a>
+ Un actif Compte AWS
+ [Microsoft Visual Studio](https://visualstudio.microsoft.com/downloads/), installé
+ AWS Command Line Interface (AWS CLI) version 2, installée et configurée pour accéder à votre Compte AWS (voir [les instructions](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html))
+ AWS Toolkit for Visual Studio, configuré (voir [les instructions](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/setup.html))
+ Un secret, créé et récupéré à l'aide de la console Secrets Manager ou du AWS CLI (voir [les instructions](https://docs.aws.amazon.com/secretsmanager/latest/userguide/managing-secrets.html))

## Exemple
<a name="configure-asm-example"></a>

Pour accéder aux secrets depuis Secrets Manager dans l'API Web ASP.NET Core (.NET 6) :

1. Ajoutez le NuGet package suivant à l'API Web ASP.NET Core.

   ```
   AWSSDK.SecretsManager.Caching
   ```

1. Dans le `Program.cs` fichier, apportez les modifications suivantes.
   + Ajoutez l'`Amazon.SecretsManager`espace de noms (1).

     ```
     using Amazon.SecretsManager;
     ```
   + Enregistrez le service (2).

     ```
     builder.Services.AddScoped<IAmazonSecretsManager>(x =>
           new AmazonSecretsManagerClient(RegionEndpoint.EUWest2)
        );
     ```  
![\[Modifications apportées au fichier Program.cs pour accéder à Secrets Manager\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/modernization-net-applications-security/images/asm-program-cs.png)

1. Pour récupérer les secrets depuis Secrets Manager, apportez les modifications suivantes au fichier de classe du contrôleur (par exemple,`ValuesController.cs`). 
   + Ajoutez le constructeur (1).

     ```
     private readonly IAmazonSecretsManager _secretsManager;
     
     public SecretsController(IAmazonSecretsManager secretsManager)
     {
         _secretsManager = secretsManager;
     }
     ```
   + Implémentez la `GetSecret` méthode (2).

     ```
     string secretName = "arn:aws:secretsmanager:eu-west-2:111122223333:secret:dev/myapp/tenant-gSj6qd";
     GetSecretValueRequest request = new GetSecretValueRequest();
     request.SecretId = secretName;
     request.VersionStage = "AWSCURRENT";
     Task<GetSecretValueResponse> response = _secretsManager.GetSecretValueAsync(request);
     return Ok(new { Secret = response.Result.SecretString });
     ```

     où *111122223333* fait référence à l'ID du compte.  
![\[Modifications apportées au fichier de classe du contrôleur pour récupérer les secrets depuis Secrets Manager\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/modernization-net-applications-security/images/asm-controller-class.png)
**Note**  
`secretName`fait référence au nom ou au nom Amazon Resource Name (ARN) du secret. Après la création d'un secret, cette valeur peut être récupérée depuis la console Secrets Manager. Vous devez appeler `secretName` dynamiquement ou à partir de variables d'environnement. Ne codez pas cette valeur en dur dans les environnements de production. 

# Configuration du magasin de paramètres
<a name="configure-store"></a>

Parameter Store est une fonctionnalité de AWS Systems Manager. Il fournit un stockage hiérarchique sécurisé pour la gestion des données de configuration et la gestion des secrets. Vous pouvez stocker des données telles que des mots de passe, des chaînes de base de données, Amazon Machine Image (AMI) IDs et des codes de licence sous forme de valeurs de paramètres. 

## Conditions préalables à l'utilisation de Parameter Store avec les applications .NET Framework
<a name="configure-store-prereq"></a>
+ Un actif Compte AWS
+ [Microsoft Visual Studio](https://visualstudio.microsoft.com/downloads/), installé
+ AWS Command Line Interface (AWS CLI) version 2, installée et configurée pour accéder à votre Compte AWS (voir [les instructions](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html))
+ AWS Toolkit for Visual Studio, configuré (voir [les instructions](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/setup.html))
+ Un paramètre de Systems Manager, créé à l'aide de la [console Secrets Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html) ou du [AWS CLI](https://docs.aws.amazon.com/systems-manager/latest/userguide/param-create-cli.html)

## Exemple
<a name="configure-store-example"></a>

Pour récupérer des valeurs depuis le magasin de paramètres dans les applications Web ou l'API ASP.NET Core, procédez comme suit :

1. Ajoutez le NuGet package suivant à l'API Web ASP.NET Core.

   ```
   Amazon.Extensions.Configuration.SystemsManager
   ```

1. Dans le `Program.cs` fichier, apportez les modifications suivantes.
   + Ajoutez `using` des déclarations (1).

     ```
     using Amazon;
     using Amazon.Extensions.NETCore.Setup;
     ```
   + Ajoutez la AWS Systems Manager configuration (2).

     ```
     builder.Configuration.AddSystemsManager("/dev/myapp", new AWSOptions
     {
         Region = RegionEndpoint.EUWest2
     });
     ```  
![\[Modifications apportées au fichier Program.cs pour accéder au magasin de paramètres\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/modernization-net-applications-security/images/ps-program-cs.png)
**Note**  
Vous devez appeler les `RegionEndPoint` paramètres `/myapp/dev` et dynamiquement ou à partir des variables d'environnement (`Region = RegionEndpoint.GetBySystemName("eu-west-2")`). Ne codez pas ces valeurs en dur dans les environnements de production.

1. Créez un nouveau fichier de classe et nommez-le`ParameterOptions.cs`. Ouvrez le fichier et ajoutez le code suivant.

   ```
   public class ParameterOptions
       {
           public const string ParameterName = "Tenant";
           public string key1 { get; set; } = string.Empty;
           public string key2 { get; set; } = string.Empty;
       }
   ```

1. Pour récupérer les valeurs depuis le Parameter Store, apportez les modifications suivantes au fichier de classe du contrôleur (par exemple,`ValuesController.cs`). 
   + Ajoutez le constructeur (1).

     ```
     private readonly IConfiguration _configuration;
     public ParametersController(IConfiguration configuration)
     {
         _configuration = configuration;
     }
     ```
   + Récupérez les valeurs dans Parameter Store (2).

     ```
     var parameterOptions = new ParameterOptions();
     _configuration.GetSection(ParameterOptions.ParameterName).Bind(parameterOptions);
     
     return new string[] {
         parameterOptions.key1,
         parameterOptions.key2
     };
     ```  
![\[Modifications apportées au fichier de classe du contrôleur pour récupérer des valeurs depuis le Parameter Store\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/modernization-net-applications-security/images/ps-controller-class.png)

## Ressources
<a name="configure-store-resources"></a>
+ [AWS Secrets Manager Fonctions Lambda de rotation (référentiel](https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas)) GitHub 
+ [AWS Extension de configuration .NET pour Systems Manager, dossier Samples](https://github.com/aws/aws-dotnet-extensions-configuration/tree/master/samples/Samples) (GitHubréférentiel)
+ [Comment utiliser la mise en cache côté client de Secrets Manager dans .NET (blog sur la sécurité](https://aws.amazon.com/blogs/security/how-to-use-aws-secrets-manager-client-side-caching-in-dotnet/))AWS 