

La version 4 (V4) du AWS SDK pour .NET est sortie \$1

Pour plus d'informations sur les modifications majeures et la migration de vos applications, consultez la [rubrique relative à la migration](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html).

 [https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html)

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.

# Accès Gestion des identités et des accès AWS (IAM) à l'aide du AWS SDK pour .NET
<a name="iam-apis-intro"></a>

The AWS SDK pour .NET supports [Gestion des identités et des accès AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/), qui est un service Web qui permet aux AWS clients de gérer les utilisateurs et les autorisations des utilisateurs dans AWS.

Un *utilisateur Gestion des identités et des accès AWS * (IAM) est une entité que vous créez dans AWS. L'entité représente une personne ou une application qui interagit avec AWS. Pour plus d'informations sur les utilisateurs IAM, voir Utilisateurs [IAM et [limites IAM et STS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html) dans le Guide de l'utilisateur](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html) IAM.

Vous accordez des autorisations à un utilisateur en créant une *politique* IAM. La politique contient un *document de politique* qui répertorie les actions qu'un utilisateur peut effectuer et les ressources que ces actions peuvent affecter. Pour plus d'informations sur les politiques IAM, consultez la section [Politiques et autorisations](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) du Guide de l'*utilisateur IAM*.

**Avertissement**  
Afin d’éviter les risques de sécurité, n’employez pas les utilisateurs IAM pour l’authentification lorsque vous développez des logiciels spécialisés ou lorsque vous travaillez avec des données réelles. Préférez la fédération avec un fournisseur d’identité tel que [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html).

## APIs
<a name="w2aac19c15c23c13"></a>

Les AWS SDK pour .NET offres APIs pour les clients IAM. Ils vous APIs permettent de travailler avec les fonctionnalités IAM telles que les utilisateurs, les rôles et les clés d'accès.

Cette section contient un petit nombre d'exemples qui vous montrent les modèles que vous pouvez suivre lorsque vous travaillez avec ces outils APIs. Pour voir l'ensemble complet de APIs, consultez la [référence de l'AWS SDK pour .NET API](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/) (et faites défiler la page jusqu'à « Amazon »). IdentityManagement«).

Cette section contient également [un exemple](net-dg-hosm.md) qui explique comment associer un rôle IAM aux instances Amazon EC2 afin de faciliter la gestion des informations d'identification.

[Les IAM APIs sont fournis par leAWSSDK. IdentityManagement](https://www.nuget.org/packages/AWSSDK.IdentityManagement) NuGetcolis.

## Conditions préalables
<a name="w2aac19c15c23c15"></a>

Avant de commencer, assurez-vous d'avoir [configuré votre environnement](net-dg-config.md) [et votre projet](configuring-the-sdk.md). Consultez également les informations contenues dans[Utilisation de l'SDK](net-dg-sdk-features.md).

## Rubriques
<a name="w2aac19c15c23c17"></a>

**Topics**
+ [APIs](#w2aac19c15c23c13)
+ [Conditions préalables](#w2aac19c15c23c15)
+ [Rubriques](#w2aac19c15c23c17)
+ [Création de politiques gérées à partir de JSON](iam-policies-create-json.md)
+ [Afficher les documents de politique](iam-policies-display.md)
+ [Octroi d'accès avec un rôle](net-dg-hosm.md)

# Création de politiques gérées par IAM à partir de JSON
<a name="iam-policies-create-json"></a>

Cet exemple vous montre comment utiliser le pour créer une [politique gérée par IAM AWS SDK pour .NET](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) à partir d'un document de stratégie donné au format JSON. L'application crée un objet client IAM, lit le document de politique à partir d'un fichier, puis crée la stratégie.

**Note**  
Pour un exemple de document de politique au format JSON, consultez les [considérations supplémentaires](#iam-policies-create-json-additional) à la fin de cette rubrique.

Les sections suivantes fournissent des extraits de cet exemple. Le [code complet de l'exemple](#iam-policies-create-json-complete-code) est affiché ensuite et peut être créé et exécuté tel quel.

**Topics**
+ [Création de la stratégie](#iam-policies-create-json-create)
+ [Code complet](#iam-policies-create-json-complete-code)
+ [Considérations supplémentaires](#iam-policies-create-json-additional)

## Création de la stratégie
<a name="iam-policies-create-json-create"></a>

L'extrait de code suivant crée une politique gérée par IAM avec le nom et le document de stratégie indiqués.

L'exemple [à la fin de cette rubrique](#iam-policies-create-json-complete-code) montre cet extrait en cours d'utilisation.

```
    //
    // Method to create an IAM policy from a JSON file
    private static async Task<CreatePolicyResponse> CreateManagedPolicy(
      IAmazonIdentityManagementService iamClient, string policyName, string jsonFilename)
    {
      return await iamClient.CreatePolicyAsync(new CreatePolicyRequest{
        PolicyName = policyName,
        PolicyDocument = File.ReadAllText(jsonFilename)});
    }
```

## Code complet
<a name="iam-policies-create-json-complete-code"></a>

Cette section présente les références pertinentes et le code complet de cet exemple.

### Références du SDK
<a name="w2aac19c15c23c21c17b5b1"></a>

NuGet colis :
+ [AWSSDK.IdentityManagement](https://www.nuget.org/packages/AWSSDK.IdentityManagement)

Éléments de programmation :
+ Espace de noms [Amazon. IdentityManagement](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/IAM/NIAM.html)

  Classe [AmazonIdentityManagementServiceClient](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/IAM/TIAMServiceClient.html)
+ Espace de noms [Amazon. IdentityManagement.Modèle](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/IAM/NIAMModel.html)

  Classe [CreatePolicyRequest](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/IAM/TCreatePolicyRequest.html)

  Classe [CreatePolicyResponse](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/IAM/TCreatePolicyResponse.html)

### Le code
<a name="w2aac19c15c23c21c17b7b1"></a>

```
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Amazon.IdentityManagement;
using Amazon.IdentityManagement.Model;

namespace IamCreatePolicyFromJson
{
  // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
  // Class to create an IAM policy with a given policy document
  class Program
  {
    private const int MaxArgs = 2;

    static async Task Main(string[] args)
    {
      // Parse the command line and show help if necessary
      var parsedArgs = CommandLine.Parse(args);
      if((parsedArgs.Count == 0) || (parsedArgs.Count > MaxArgs))
      {
        PrintHelp();
        return;
      }

      // Get the application arguments from the parsed list
      string policyName =
        CommandLine.GetArgument(parsedArgs, null, "-p", "--policy-name");
      string policyFilename =
        CommandLine.GetArgument(parsedArgs, null, "-j", "--json-filename");
      if(   string.IsNullOrEmpty(policyName)
         || (string.IsNullOrEmpty(policyFilename) || !policyFilename.EndsWith(".json")))
        CommandLine.ErrorExit(
          "\nOne or more of the required arguments is missing or incorrect." +
          "\nRun the command with no arguments to see help.");

      // Create an IAM service client
      var iamClient = new AmazonIdentityManagementServiceClient();

      // Create the new policy
      var response = await CreateManagedPolicy(iamClient, policyName, policyFilename);
      Console.WriteLine($"\nPolicy {response.Policy.PolicyName} has been created.");
      Console.WriteLine($"  Arn: {response.Policy.Arn}");
    }


    //
    // Method to create an IAM policy from a JSON file
    private static async Task<CreatePolicyResponse> CreateManagedPolicy(
      IAmazonIdentityManagementService iamClient, string policyName, string jsonFilename)
    {
      return await iamClient.CreatePolicyAsync(new CreatePolicyRequest{
        PolicyName = policyName,
        PolicyDocument = File.ReadAllText(jsonFilename)});
    }


    //
    // Command-line help
    private static void PrintHelp()
    {
      Console.WriteLine(
        "\nUsage: IamCreatePolicyFromJson -p <policy-name> -j <json-filename>" +
        "\n  -p, --policy-name: The name you want the new policy to have." +
        "\n  -j, --json-filename: The name of the JSON file with the policy document.");
    }
  }


  // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
  // Class that represents a command line on the console or terminal.
  // (This is the same for all examples. When you have seen it once, you can ignore it.)
  static class CommandLine
  {
    //
    // Method to parse a command line of the form: "--key value" or "-k value".
    //
    // Parameters:
    // - args: The command-line arguments passed into the application by the system.
    //
    // Returns:
    // A Dictionary with string Keys and Values.
    //
    // If a key is found without a matching value, Dictionary.Value is set to the key
    //  (including the dashes).
    // If a value is found without a matching key, Dictionary.Key is set to "--NoKeyN",
    //  where "N" represents sequential numbers.
    public static Dictionary<string,string> Parse(string[] args)
    {
      var parsedArgs = new Dictionary<string,string>();
      int i = 0, n = 0;
      while(i < args.Length)
      {
        // If the first argument in this iteration starts with a dash it's an option.
        if(args[i].StartsWith("-"))
        {
          var key = args[i++];
          var value = key;

          // Check to see if there's a value that goes with this option?
          if((i < args.Length) && (!args[i].StartsWith("-"))) value = args[i++];
          parsedArgs.Add(key, value);
        }

        // If the first argument in this iteration doesn't start with a dash, it's a value
        else
        {
          parsedArgs.Add("--NoKey" + n.ToString(), args[i++]);
          n++;
        }
      }

      return parsedArgs;
    }

    //
    // Method to get an argument from the parsed command-line arguments
    //
    // Parameters:
    // - parsedArgs: The Dictionary object returned from the Parse() method (shown above).
    // - defaultValue: The default string to return if the specified key isn't in parsedArgs.
    // - keys: An array of keys to look for in parsedArgs.
    public static string GetArgument(
      Dictionary<string,string> parsedArgs, string defaultReturn, params string[] keys)
    {
      string retval = null;
      foreach(var key in keys)
        if(parsedArgs.TryGetValue(key, out retval)) break;
      return retval ?? defaultReturn;
    }

    //
    // Method to exit the application with an error.
    public static void ErrorExit(string msg, int code=1)
    {
      Console.WriteLine("\nError");
      Console.WriteLine(msg);
      Environment.Exit(code);
    }
  }

}
```

## Considérations supplémentaires
<a name="iam-policies-create-json-additional"></a>
+ Voici un exemple de document de politique que vous pouvez copier dans un fichier JSON et utiliser comme entrée pour cette application :

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Id"  : "DotnetTutorialPolicy",
    "Statement" : [
      {
        "Sid" : "DotnetTutorialPolicyS3",
        "Effect" : "Allow",
        "Action" : [
          "s3:Get*",
          "s3:List*"
        ],
        "Resource" : "*"
      },
      {
        "Sid" : "DotnetTutorialPolicyPolly",
        "Effect": "Allow",
        "Action": [
          "polly:DescribeVoices",
          "polly:SynthesizeSpeech"
        ],
        "Resource": "*"
      }
    ]
  }
  ```

------
+ Vous pouvez vérifier que la politique a été créée en consultant la [console IAM.](https://console.aws.amazon.com/iam/home#/policies) Dans la liste déroulante des **politiques de filtrage**, sélectionnez **Géré par le client**. Supprimez la politique lorsque vous n'en avez plus besoin.
+  Pour plus d'informations sur la création de politiques, consultez [Création de politiques IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) et la [référence de politique IAM JSON](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html) dans le guide de l'utilisateur [IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/)

# Afficher le document de politique d'une politique gérée par IAM
<a name="iam-policies-display"></a>

Cet exemple montre comment utiliser le AWS SDK pour .NET pour afficher un document de politique. L'application crée un objet client IAM, trouve la version par défaut de la politique gérée IAM donnée, puis affiche le document de stratégie au format JSON.

Les sections suivantes fournissent des extraits de cet exemple. Le [code complet de l'exemple](#iam-policies-display-complete-code) est affiché ensuite et peut être créé et exécuté tel quel.

**Topics**
+ [Trouvez la version par défaut](#iam-policies-display-version)
+ [Afficher le document de politique](#iam-policies-display-doc)
+ [Code complet](#iam-policies-display-complete-code)

## Trouvez la version par défaut
<a name="iam-policies-display-version"></a>

L'extrait suivant trouve la version par défaut de la politique IAM donnée.

L'exemple [à la fin de cette rubrique](#iam-policies-display-complete-code) montre cet extrait en cours d'utilisation.

```
    //
    // Method to determine the default version of an IAM policy
    // Returns a string with the version
    private static async Task<string> GetDefaultVersion(
      IAmazonIdentityManagementService iamClient, string policyArn)
    {
      // Retrieve all the versions of this policy
      string defaultVersion = string.Empty;
      ListPolicyVersionsResponse reponseVersions =
        await iamClient.ListPolicyVersionsAsync(new ListPolicyVersionsRequest{
          PolicyArn = policyArn});

      // Find the default version
      foreach(PolicyVersion version in reponseVersions.Versions)
      {
        if(version.IsDefaultVersion)
        {
          defaultVersion = version.VersionId;
          break;
        }
      }

      return defaultVersion;
    }
```

## Afficher le document de politique
<a name="iam-policies-display-doc"></a>

L'extrait suivant affiche le document de politique au format JSON de la stratégie IAM donnée.

L'exemple [à la fin de cette rubrique](#iam-policies-display-complete-code) montre cet extrait en cours d'utilisation.

```
    //
    // Method to retrieve and display the policy document of an IAM policy
    private static async Task ShowPolicyDocument(
      IAmazonIdentityManagementService iamClient, string policyArn, string defaultVersion)
    {
      // Retrieve the policy document of the default version
      GetPolicyVersionResponse responsePolicy =
        await iamClient.GetPolicyVersionAsync(new GetPolicyVersionRequest{
          PolicyArn = policyArn,
          VersionId = defaultVersion});

      // Display the policy document (in JSON)
      Console.WriteLine($"Version {defaultVersion} of the policy (in JSON format):");
      Console.WriteLine(
        $"{HttpUtility.UrlDecode(responsePolicy.PolicyVersion.Document)}");
    }
```

## Code complet
<a name="iam-policies-display-complete-code"></a>

Cette section présente les références pertinentes et le code complet de cet exemple.

### Références du SDK
<a name="w2aac19c15c23c23c19b5b1"></a>

NuGet colis :
+ [AWSSDK.IdentityManagement](https://www.nuget.org/packages/AWSSDK.IdentityManagement)

Éléments de programmation :
+ Espace de noms [Amazon. IdentityManagement](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/IAM/NIAM.html)

  Classe [AmazonIdentityManagementServiceClient](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/IAM/TIAMServiceClient.html)
+ Espace de noms [Amazon. IdentityManagement.Modèle](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/IAM/NIAMModel.html)

  Classe [GetPolicyVersionRequest](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/IAM/TGetPolicyVersionRequest.html)

  Classe [GetPolicyVersionResponse](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/IAM/TGetPolicyVersionResponse.html)

  Classe [ListPolicyVersionsRequest](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/IAM/TListPolicyVersionsRequest.html)

  Classe [ListPolicyVersionsResponse](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/IAM/TListPolicyVersionsResponse.html)

  Classe [PolicyVersion](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/IAM/TPolicyVersion.html)

### Le code
<a name="w2aac19c15c23c23c19b7b1"></a>

```
using System;
using System.Web;
using System.Threading.Tasks;
using Amazon.IdentityManagement;
using Amazon.IdentityManagement.Model;

namespace IamDisplayPolicyJson
{
  class Program
  {
    static async Task Main(string[] args)
    {
      // Parse the command line and show help if necessary
      if(args.Length != 1)
      {
        Console.WriteLine("\nUsage: IamDisplayPolicyJson policy-arn");
        Console.WriteLine("   policy-arn: The ARN of the policy to retrieve.");
        return;
      }
      if(!args[0].StartsWith("arn:"))
      {
        Console.WriteLine("\nCould not find policy ARN in the command-line arguments:");
        Console.WriteLine($"{args[0]}");
        return;
      }

      // Create an IAM service client
      var iamClient = new AmazonIdentityManagementServiceClient();

      // Retrieve and display the policy document of the given policy
      string defaultVersion = await GetDefaultVersion(iamClient, args[0]);
      if(string.IsNullOrEmpty(defaultVersion))
        Console.WriteLine($"Could not find the default version for policy {args[0]}.");
      else
        await ShowPolicyDocument(iamClient, args[0], defaultVersion);
    }


    //
    // Method to determine the default version of an IAM policy
    // Returns a string with the version
    private static async Task<string> GetDefaultVersion(
      IAmazonIdentityManagementService iamClient, string policyArn)
    {
      // Retrieve all the versions of this policy
      string defaultVersion = string.Empty;
      ListPolicyVersionsResponse reponseVersions =
        await iamClient.ListPolicyVersionsAsync(new ListPolicyVersionsRequest{
          PolicyArn = policyArn});

      // Find the default version
      foreach(PolicyVersion version in reponseVersions.Versions)
      {
        if(version.IsDefaultVersion)
        {
          defaultVersion = version.VersionId;
          break;
        }
      }

      return defaultVersion;
    }


    //
    // Method to retrieve and display the policy document of an IAM policy
    private static async Task ShowPolicyDocument(
      IAmazonIdentityManagementService iamClient, string policyArn, string defaultVersion)
    {
      // Retrieve the policy document of the default version
      GetPolicyVersionResponse responsePolicy =
        await iamClient.GetPolicyVersionAsync(new GetPolicyVersionRequest{
          PolicyArn = policyArn,
          VersionId = defaultVersion});

      // Display the policy document (in JSON)
      Console.WriteLine($"Version {defaultVersion} of the policy (in JSON format):");
      Console.WriteLine(
        $"{HttpUtility.UrlDecode(responsePolicy.PolicyVersion.Document)}");
    }
  }
}
```

# Octroi d'accès à l'aide d'un rôle IAM
<a name="net-dg-hosm"></a>

Ce didacticiel explique comment utiliser le AWS SDK pour .NET pour activer les rôles IAM sur les instances Amazon EC2.

## Présentation de
<a name="hosm-overview"></a>

Toutes les demandes AWS doivent être signées cryptographiquement à l'aide des informations d'identification émises par AWS. Par conséquent, vous avez besoin d'une stratégie pour gérer les informations d'identification des applications qui s'exécutent sur des instances Amazon EC2. Vous devez distribuer, stocker et faire pivoter ces informations d'identification en toute sécurité, mais également les garder accessibles aux applications.

Les rôles IAM vous permettent de gérer efficacement ces informations d'identification. Vous créez un rôle IAM et vous le configurez avec les autorisations requises par une application, puis vous attachez ce rôle à une instance EC2. Pour en savoir plus sur les avantages de l'utilisation des rôles IAM, consultez la section Rôles [IAM pour Amazon EC2 dans](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html) le guide de l'utilisateur Amazon [EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/). Consultez également les informations sur les [rôles IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) dans le guide de l'utilisateur IAM.

Pour une application créée à l'aide du AWS SDK pour .NET, lorsque l'application construit un objet client pour un AWS service, l'objet recherche des informations d'identification provenant de plusieurs sources potentielles. L'ordre dans lequel la recherche est effectué est indiqué dans[Résolution des informations d'identification et des profils](creds-assign.md).

Si l'objet client ne trouve pas d'informations d'identification provenant d'une autre source, il récupère des informations d'identification temporaires dotées des mêmes autorisations que celles qui ont été configurées dans le rôle IAM et figurent dans les métadonnées de l'instance EC2. Ces informations d'identification sont utilisées pour effectuer des appels AWS depuis l'objet client.

## À propos de ce didacticiel
<a name="about-hosm-tutorial"></a>

Au fur et à mesure que vous suivez ce didacticiel, vous utilisez le AWS SDK pour .NET (et d'autres outils) pour lancer une instance Amazon EC2 avec un rôle IAM attaché, puis vous verrez une application sur l'instance utilisant les autorisations du rôle IAM.

**Topics**
+ [Présentation de](#hosm-overview)
+ [À propos de ce didacticiel](#about-hosm-tutorial)
+ [Création d'un exemple d'application Amazon S3](#net-dg-hosm-sample-s3-app)
+ [Créer un rôle IAM](#net-dg-hosm-create-the-role)
+ [Lancez une instance EC2 et attachez le rôle IAM](#net-dg-hosm-launch-ec2-instance)
+ [Connectez-vous à l'instance EC2](#net-dg-hosm-connect)
+ [Exécutez l'exemple d'application sur l'instance EC2](#net-dg-hosm-run-the-app)
+ [Nettoyage](#net-dg-hosm-cleanup)

## Création d'un exemple d'application Amazon S3
<a name="net-dg-hosm-sample-s3-app"></a>

Cet exemple d'application récupère un objet depuis Amazon S3. Pour exécuter l'application, vous avez besoin des éléments suivants :
+ Un compartiment Amazon S3 contenant un fichier texte.
+ AWS informations d'identification sur votre machine de développement qui vous permettent d'accéder au bucket.

Pour plus d'informations sur la création d'un compartiment Amazon S3 et le téléchargement d'un objet, consultez le [guide de l'utilisateur d'Amazon Simple Storage Service](https://docs.aws.amazon.com/AmazonS3/latest/userguide/). Pour plus d'informations sur les AWS informations d'identification, consultez[Authentifier le AWS SDK pour .NET avec AWS](creds-idc.md).

Créez un projet .NET Core avec le code suivant. Testez ensuite l'application sur votre machine de développement.

**Note**  
Sur votre machine de développement, le .NET Core Runtime est installé, ce qui vous permet d'exécuter l'application sans la publier. Lorsque vous créerez une instance EC2 ultérieurement dans ce didacticiel, vous pouvez choisir d'installer le .NET Core Runtime sur l'instance. Cela vous donne une expérience similaire et un transfert de fichiers plus réduit.  
 Toutefois, vous pouvez également choisir de ne pas installer le .NET Core Runtime sur l'instance. Si vous choisissez cette option, vous devez publier l'application afin que toutes les dépendances soient incluses lorsque vous la transférez vers l'instance.

### Références du SDK
<a name="w2aac19c15c23c25c17c13b1"></a>

NuGet colis :
+ [AWSSDKS.3](https://www.nuget.org/packages/AWSSDK.S3)

Éléments de programmation :
+ [Espace de noms Amazon.S3](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/S3/NS3.html)

  Classe : [Amazon S3 Client](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/S3/TS3Client.html)
+ [Espace de noms Amazon.S3.Model](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/S3/NS3Model.html)

  Classe [GetObjectResponse](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/S3/TGetObjectResponse.html)

### Le code
<a name="w2aac19c15c23c25c17c15b1"></a>

```
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Amazon.S3;
using Amazon.S3.Model;

namespace S3GetTextItem
{
  // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
  // Class to retrieve a text file from an S3 bucket and write it to a local file
  class Program
  {
    static async Task Main(string[] args)
    {
      // Parse the command line and show help if necessary
      var parsedArgs = CommandLine.Parse(args);
      if(parsedArgs.Count == 0)
      {
        PrintHelp();
        return;
      }

      // Get the application arguments from the parsed list
      string bucket =
        CommandLine.GetArgument(parsedArgs, null, "-b", "--bucket-name");
      string item =
        CommandLine.GetArgument(parsedArgs, null, "-t", "--text-object");
      string outFile =
        CommandLine.GetArgument(parsedArgs, null, "-o", "--output-filename");
      if(   string.IsNullOrEmpty(bucket)
         || string.IsNullOrEmpty(item)
         || string.IsNullOrEmpty(outFile))
        CommandLine.ErrorExit(
          "\nOne or more of the required arguments is missing or incorrect." +
          "\nRun the command with no arguments to see help.");

      // Create the S3 client object and get the file object from the bucket.
      var response = await GetObject(new AmazonS3Client(), bucket, item);

      // Write the contents of the file object to the given output file.
      var reader = new StreamReader(response.ResponseStream);
      string contents = reader.ReadToEnd();
      using (var s = new FileStream(outFile, FileMode.Create))
      using (var writer = new StreamWriter(s))
        writer.WriteLine(contents);
    }


    //
    // Method to get an object from an S3 bucket.
    private static async Task<GetObjectResponse> GetObject(
      IAmazonS3 s3Client, string bucket, string item)
    {
        Console.WriteLine($"Retrieving {item} from bucket {bucket}.");
        return await s3Client.GetObjectAsync(bucket, item);
    }


    //
    // Command-line help
    private static void PrintHelp()
    {
      Console.WriteLine(
        "\nUsage: S3GetTextItem -b <bucket-name> -t <text-object> -o <output-filename>" +
        "\n  -b, --bucket-name: The name of the S3 bucket." +
        "\n  -t, --text-object: The name of the text object in the bucket." +
        "\n  -o, --output-filename: The name of the file to write the text to.");
    }
  }


  // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
  // Class that represents a command line on the console or terminal.
  // (This is the same for all examples. When you have seen it once, you can ignore it.)
  static class CommandLine
  {
    //
    // Method to parse a command line of the form: "--key value" or "-k value".
    //
    // Parameters:
    // - args: The command-line arguments passed into the application by the system.
    //
    // Returns:
    // A Dictionary with string Keys and Values.
    //
    // If a key is found without a matching value, Dictionary.Value is set to the key
    //  (including the dashes).
    // If a value is found without a matching key, Dictionary.Key is set to "--NoKeyN",
    //  where "N" represents sequential numbers.
    public static Dictionary<string,string> Parse(string[] args)
    {
      var parsedArgs = new Dictionary<string,string>();
      int i = 0, n = 0;
      while(i < args.Length)
      {
        // If the first argument in this iteration starts with a dash it's an option.
        if(args[i].StartsWith("-"))
        {
          var key = args[i++];
          var value = key;

          // Check to see if there's a value that goes with this option?
          if((i < args.Length) && (!args[i].StartsWith("-"))) value = args[i++];
          parsedArgs.Add(key, value);
        }

        // If the first argument in this iteration doesn't start with a dash, it's a value
        else
        {
          parsedArgs.Add("--NoKey" + n.ToString(), args[i++]);
          n++;
        }
      }

      return parsedArgs;
    }

    //
    // Method to get an argument from the parsed command-line arguments
    //
    // Parameters:
    // - parsedArgs: The Dictionary object returned from the Parse() method (shown above).
    // - defaultValue: The default string to return if the specified key isn't in parsedArgs.
    // - keys: An array of keys to look for in parsedArgs.
    public static string GetArgument(
      Dictionary<string,string> parsedArgs, string defaultReturn, params string[] keys)
    {
      string retval = null;
      foreach(var key in keys)
        if(parsedArgs.TryGetValue(key, out retval)) break;
      return retval ?? defaultReturn;
    }

    //
    // Method to exit the application with an error.
    public static void ErrorExit(string msg, int code=1)
    {
      Console.WriteLine("\nError");
      Console.WriteLine(msg);
      Environment.Exit(code);
    }
  }

}
```

Si vous le souhaitez, vous pouvez supprimer temporairement les informations d'identification que vous utilisez sur votre machine de développement pour voir comment l'application répond. (Mais assurez-vous de restaurer les informations d'identification lorsque vous aurez terminé.)

## Créer un rôle IAM
<a name="net-dg-hosm-create-the-role"></a>

Créez un rôle IAM doté des autorisations appropriées pour accéder à Amazon S3.

1. Ouvrez la [console IAM](https://console.aws.amazon.com/iam/).

1. Dans le volet de navigation, choisissez **Rôles**, puis **Create Role**.

1. Sélectionnez le **AWS service**, recherchez et choisissez **EC2**, puis choisissez **Next : Permissions**.

1. Sous **Joindre les politiques d'autorisation**, recherchez et sélectionnez **AmazonS3 ReadOnlyAccess**. Passez en revue la politique si vous le souhaitez, puis choisissez **Next : Tags**.

1. Ajoutez des balises si vous le souhaitez, puis choisissez **Suivant : Révision**.

1. Tapez un nom et une description pour le rôle, puis choisissez **Créer un rôle**. Conservez bien ce nom, car il vous sera utile lorsque vous lancerez votre instance EC2.

## Lancez une instance EC2 et attachez le rôle IAM
<a name="net-dg-hosm-launch-ec2-instance"></a>

Lancez une instance EC2 avec le rôle IAM que vous avez créé précédemment. Vous pouvez le faire de différentes manières.
+ **Utilisation de la console EC2**

  Pour lancer une instance à l'aide de la console EC2, consultez [Lancer une instance à l'aide du nouvel assistant de lancement d'instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html) dans le guide de l'[utilisateur Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/).

  Lorsque vous parcourez la page de lancement, vous devez au moins développer le volet **Détails avancés** afin de pouvoir spécifier le rôle IAM que vous avez créé précédemment dans le profil d'**instance IAM**.
+ **En utilisant le AWS SDK pour .NET**

  Pour plus d'informations à ce sujet[Lancement d'une instance Amazon EC2](run-instance.md), voir, y compris la [Considérations supplémentaires](run-instance.md#run-instance-additional) fin de cette rubrique.

Pour lancer une instance EC2 à laquelle un rôle IAM est attaché, la configuration d'un utilisateur IAM doit inclure certaines autorisations. Pour plus d'informations sur les autorisations requises, consultez la section [Accorder à un utilisateur l'autorisation de transmettre un rôle IAM à une instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#permission-to-pass-iam-roles) dans le guide de l'utilisateur [Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/).

## Connectez-vous à l'instance EC2
<a name="net-dg-hosm-connect"></a>

Connectez-vous à l'instance EC2 afin de pouvoir y transférer l'exemple d'application, puis exécuter l'application. Vous aurez besoin du fichier contenant la partie privée de la paire de clés que vous avez utilisée pour lancer l'instance, c'est-à-dire le fichier PEM.

Pour plus d'informations sur la connexion à une instance, consultez [Connect to your Linux instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html) ou [Connect to your Windows instance](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/connecting_to_windows_instance.html) dans le guide de l'[utilisateur Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/). Lorsque vous vous connectez, faites-le de manière à pouvoir transférer des fichiers de votre machine de développement vers votre instance.

Si vous utilisez Visual Studio sous Windows, vous pouvez également vous connecter à l'instance à l'aide du Toolkit for Visual Studio. Pour plus d'informations, consultez la section [Connexion à une instance Amazon EC2](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/tkv-ec2-ami.html#connect-ec2) dans le guide de l' AWS Toolkit for Visual Studio utilisateur.

## Exécutez l'exemple d'application sur l'instance EC2
<a name="net-dg-hosm-run-the-app"></a>

1. Copiez les fichiers d'application de votre disque local vers votre instance.

   Les fichiers que vous transférez dépendent de la façon dont vous avez créé l'application et de l'installation du .NET Core Runtime sur votre instance. Pour plus d'informations sur le transfert de fichiers vers votre instance, consultez [Connect to your Linux](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html) (voir la sous-section appropriée) ou [Transférer des fichiers vers des instances Windows](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instanceWindowsFileTransfer.html) dans le guide de l'[utilisateur Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/).

1. Lancez l'application et vérifiez qu'elle s'exécute avec les mêmes résultats que sur votre machine de développement.

1. Vérifiez que l'application utilise les informations d'identification fournies par le rôle IAM.

   1. Ouvrez la [console Amazon EC2](https://console.aws.amazon.com/ec2/).

   1. Sélectionnez l'instance et détachez le rôle IAM via **Actions**, **Paramètres de l'instance**, **Attacher/remplacer** le rôle IAM.

   1. Exécutez à nouveau l'application et vérifiez qu'elle renvoie une erreur d'autorisation.

## Nettoyage
<a name="net-dg-hosm-cleanup"></a>

Lorsque vous aurez terminé ce didacticiel, et si vous ne souhaitez plus utiliser l'instance EC2 que vous avez créée, veillez à mettre fin à l'instance pour éviter des coûts inutiles. Vous pouvez le faire dans la [console Amazon EC2](https://console.aws.amazon.com/ec2/) ou par programmation, comme décrit dans. [Interruption d'une instance Amazon EC2](terminate-instance.md) Si vous le souhaitez, vous pouvez également supprimer d'autres ressources que vous avez créées pour ce didacticiel. Il peut s'agir d'un rôle IAM, d'une paire de clés EC2 et d'un fichier PEM, d'un groupe de sécurité, etc.