Comment configurer mon serveur AWS Transfer for SFTP afin d’utiliser un compartiment Amazon S3 qui se trouve dans un autre compte AWS?

Dernière mise à jour : 25/09/2020

Je souhaite que mon serveur AWS Transfer for SFTP (AWS SFTP) accède à un compartiment Amazon Simple Storage Service (Amazon S3) dans un autre compte AWS. Comment configurer mon serveur avec un accès entre comptes au compartiment ?

Brève description

Procédez comme suit :

  1. Créez un rôle AWS Identity and Access Management (IAM) avec accès au compartiment.
  2. Mettez à jour la stratégie de compartiment pour accorder l'accès intercomptes au rôle IAM.
  3. Créez un utilisateur de serveur SFTP configuré avec le rôle IAM.
  4. Vérifiez que l'utilisateur du serveur SFTP peut accéder au compartiment.

Remarque : la console AWS Transfer Family affiche uniquement les compartiments S3 du même compte. Pour utiliser votre serveur SFTP avec un compartiment dans un autre compte, vous devez utiliser l'interface de ligne de commande AWS (CLI AWS) ou un kit SDK AWS.

Solution

Créer un rôle IAM avec accès au compartiment

Créez un rôle IAM pour les utilisateurs de votre serveur SFTP. Pour la stratégie IAM du rôle, utilisez les éléments suivants :

Remarque : remplacez EXEMPLE-COMPARTIMENT-DOC-de-destination par le nom du compartiment S3 auquel vous voulez que votre serveur SFTP accède.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowListingBucketReadandWriteandDelete",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:PutObjectAcl",
        "s3:GetObject",
        "s3:DeleteObjectVersion",
        "s3:DeleteObject",
        "s3:GetObjectVersion",
        "s3:ListBucket",
        "s3:GetBucketLocation"
      ],
      "Resource": [
        "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/*",
        "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET"
      ]
    }
  ]
}

Une fois que vous avez créé le rôle IAM, obtenez l'ID du rôle en exécutant la commande get-role similaire à celle-ici :

$ aws iam get-role --role-name "ROLE_NAME"

Vous aurez besoin de l'ID de rôle pour l'étape suivante.

Mettre à jour la stratégie de compartiment pour accorder l'accès intercomptes au rôle IAM

Modifiez la stratégie du compartiment de destination pour accorder l'accès au rôle IAM que vous avez créé. Vous pouvez utiliser une stratégie de compartiment analogue à celle-ci :

Remarque : remplacez arn:aws:iam::123456789012:root par l'Amazon Resource Name (ARN) du compte auquel appartient votre serveur SFTP. Remplacez EXMPLE-COMPARTIMENT-DOC-de-destination par le nom du compartiment. Remplacez AROA1234567890 par l'ID du rôle IAM que vous avez créé.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "BucketPolicyForSFTP",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:root"
      },
      "Action": [
        "s3:PutObject",
        "s3:PutObjectAcl",
        "s3:GetObject",
        "s3:DeleteObjectVersion",
        "s3:DeleteObject",
        "s3:GetObjectVersion",
        "s3:ListBucket",
        "s3:GetBucketLocation"
      ],
      "Resource": [
        "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/*"
      ],
      "Condition": {
        "StringLike": {
          "aws:userId": "AROA1234567890:*"
        }
      }
    }
  ]
}

L'élément Condition de cet exemple de stratégie est facultatif. Incluez l'élément Condition pour accorder l'accès au compartiment uniquement au rôle IAM que vous spécifiez. Vous pouvez également supprimer l'élément pour accorder l'accès à tous les rôles IAM et aux utilisateurs du compte auquel votre serveur SFTP appartient.

Créer un utilisateur de serveur SFTP configuré avec le rôle IAM

1.    Générez des clés SSH pour votre serveur SFTP.

2.    Obtenez l'ID de votre serveur SFTP.

3.    Exécutez la commande create-user à l'aide de l'interface de ligne de commande (CLI) AWS. Pour --server-id, entrez l’ID de votre serveur SFTP. Pour --role, entrez l'ARN du rôle IAM que vous avez créé. Pour --ssh-public-key-body, entrez le contenu du fichier .pub que vous avez généré lorsque vous avez créé des clés SSH.

$ aws transfer create-user --user-name "MY_SFTP_USER_NAME" --server-id "MY_SERVER_ID"  --role "MY_IAM_ROLE_ARN" --home-directory "/DOC-EXAMPLE-BUCKET/MY_SFTP_USER_NAME" --ssh-public-key-body "CONTENTS_OF_MY_SSH_.PUB_FILE"

Remarque : si vous recevez des erreurs lors de l'exécution des commandes de l'interface de ligne de commande (CLI) AWS, vérifiez que vous utilisez la toute dernière version de l’interface de ligne de commande (CLI) AWS.

La commande renvoie l'ID de serveur et l'utilisateur que vous avez créé :

{
  "ServerId": "MY_SERVER_ID",
  "UserName": "MY_SFTP_USER_NAME"
}

Important : pour limiter l'accès de l'utilisateur du serveur SFTP à son répertoire de base uniquement, créez une stratégie de limitation dans IAM. Ensuite, modifiez les propriétés de l'utilisateur serveur pour appliquer la stratégie de limitation que vous avez créée.

Vérifiez que l'utilisateur de votre serveur SFTP peut accéder au compartiment.

1.    Connectez-vous à votre serveur SFTP en tant qu'utilisateur que vous avez créé. Par exemple, exécutez cette commande OpenSSH pour vous connecter à votre serveur :

$ sftp -i mysftpuser MY_SFTP_USER_NAME@MY_SERVER_ID.server.transfer.us-east-1.amazonaws.com

2.    À titre de test, listez le répertoire de base du compartiment. Si vous utilisez OpenSSH, exécutez la commande suivante :

$ ls 

Si la commande renvoie le répertoire de base, cela implique que l'utilisateur du serveur SFTP dispose d'un accès entre comptes au compartiment.


Création d’un utilisateur (Guide de l'utilisateur AWS Transfer Family)

Ajout d’un utilisateur (Guide de l'utilisateur AWS Transfer Family)

Comment Amazon S3 autorise-t-il une demande ?

 

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?