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

Lecture de 5 minute(s)
0

Je souhaite que mon serveur AWS Transfer Family du compte A accède à un compartiment Amazon Simple Storage Service (Amazon S3) dans un autre compte, c'est-à-dire le compte B. Je souhaite configurer mon serveur avec un accès intercompte au compartiment.

Brève description

Procédez comme suit :

  1. Créez un rôle AWS Identity and Access Management (IAM) dans le compte A avec accès au compartiment.
  2. Mettez à jour la politique de compartiment pour accorder l'accès intercompte au rôle IAM dans le compte B.
  3. Créez un utilisateur de serveur Transfer Family configuré avec le rôle IAM dans le compte A.
  4. Vérifiez que l'utilisateur du serveur Transfer Family du compte A peut accéder au compartiment S3 du compte B.
  5. (Facultatif) Définissez la propriété de l'objet S3 sur le propriétaire du compartiment préféré dans le compte B.

Remarque : la console AWS Transfer Family affiche uniquement les compartiments Amazon S3 dans le même compte. Pour utiliser le serveur Transfer Family avec un compartiment dans un autre compte, vous devez utiliser AWS Command Line Interface (AWS CLI) ou un kit SDK AWS.

Solution

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

Créez un rôle IAM pour les utilisateurs de votre serveur. Pour la politique IAM du rôle, utilisez ce qui suit :

Remarque : remplacez destination-DOC-EXAMPLE-BUCKET par le nom du compartiment S3 auquel votre serveur 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"
      ]
    }
  ]
}

Remarque : La console Transfer Family doit avoir l'autorisation s3:PutObjectAcl pour effectuer des chargements S3 entre différents comptes.

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-ci :

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

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

Mettez à jour la politique de compartiment pour accorder l'accès intercompte au rôle IAM dans le compte B

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éez un utilisateur de serveur Transfer Family configuré avec le rôle IAM dans le compte A

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 "/destination-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 de serveur pour appliquer la politique de limitation que vous avez créée.

Vérifiez que l'utilisateur de serveur Transfer Family du compte A peut accéder au compartiment du compte B

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 intercompte au compartiment.

(Facultatif) Définissez la propriété de l'objet S3 sur le propriétaire du compartiment préféré dans le compte B

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 intercompte, définissez la propriété de l'objet S3 du compartiment de destination sur le propriétaire du compartiment préféré. Après cette opération, tous les nouveaux objets chargés via le serveur AWS Transfer Family appartiennent automatiquement au compte du compartiment de destination.


Informations connexes

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 ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans