Comment configurer mon serveur AWS Transfer Family pour utiliser un compartiment Amazon S3 se trouvant dans un autre compte AWS ?

Dernière mise à jour : 15/01/2021

Je souhaite que mon serveur AWS Transfer Family 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 politique de compartiment pour accorder l'accès entre comptes au rôle IAM.
  3. Créez un utilisateur de serveur Transfer Family configuré avec le rôle IAM.
  4. Vérifiez que l'utilisateur du serveur Transfer Family peut accéder au compartiment.
  5. (Facultatif) Définissez le propriétaire de compartiment préféré comme propriétaire des objets S3.

Remarque : la console AWS Transfer Family affiche uniquement les compartiments S3 d'un même compte. Pour utiliser le serveur Transfer Family avec un compartiment dans un autre compte, vous devez utiliser l'interface de ligne de commande (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 du serveur . Pour la politique IAM du rôle, utilisez ce qui suit :

Remarque : remplacez EXEMPLE-COMPARTIMENT-DOC-de-destination par le nom du compartiment S3 auquel le serveur SFTP doit accèder.

{
  "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 une 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 politique du compartiment de destination pour accorder l'accès au rôle IAM que vous avez créé. Vous pouvez utiliser une politique de compartiment similaire à celle-ci :

Remarque : remplacez arn:aws:iam::123456789012:root par l'Amazon Resource Name (ARN) du compte auquel appartient votre serveur. 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": "BucketPolicyForTransferFamily",
      "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 le serveur appartient.

Créer un utilisateur serveur Transfer Family configuré avec le rôle IAM

1.    Générez des clés SSH pour le serveur Transfer Family.

2.    Obtenez l'ID du serveur.

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

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

Remarque : si vous recevez des erreurs lors de l'exécution de commandes CLI AWS, vérifiez que vous utilisez la dernière version 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_SERVER_USER_NAME"
}

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

Vérifiez que votre utilisateur du serveur Transfer Family peut accéder au compartiment

1.    Connectez-vous au serveur sous le nom d'utilisateur que vous avez créé. Par exemple, cette commande OpenSSH permet de se connecter à un serveur SFTP :

$ sftp -i myserveruser MY_SERVER_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 dispose d'un accès entre comptes au compartiment.

(Facultatif) Définir le propriétaire de compartiment préféré comme propriétaire des objets S3

Par défaut, un objet Amazon S3 appartient au compte AWS qui a chargé l'objet. Cela signifie que les objets chargés dans le compartiment de destination appartiennent par défaut au compte du serveur source.

Pour permettre au compte de destination de posséder automatiquement des objets à partir des chargements entre comptes, définissez le propriétaire de compartiment préféré comme propriétaire des objets S3 du compartiment de destination. Ensuite, tous les nouveaux objets chargés via le serveur AWS Transfer Family appartiennent automatiquement au compte du compartiment de destination.


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 ?