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.
Utilisation de répertoires logiques pour simplifier vos structures de répertoires Transfer Family
Pour simplifier la structure des répertoires de votre AWS Transfer Family serveur, vous pouvez utiliser des répertoires logiques. Avec les répertoires logiques, vous pouvez créer une structure de répertoire virtuel qui utilise des noms faciles à utiliser par vos utilisateurs lorsqu'ils se connectent à votre compartiment Amazon S3 ou à votre système de EFS fichiers Amazon. Lorsque vous utilisez des répertoires logiques, vous pouvez éviter de divulguer les chemins de répertoire absolus, les noms des compartiments Amazon S3 et les noms des systèmes de EFS fichiers à vos utilisateurs finaux.
Note
Bien que cela dépende de votre utilisation des politiques de session et d'autres exigences internes, vous n'avez généralement pas besoin à la fois de stratégies de session et de répertoires logiques pour garantir que vos utilisateurs accèdent uniquement aux fichiers que vous souhaitez qu'ils utilisent. Si vous configurez des répertoires logiques, ne créez pas également de politiques de session, car le fait de disposer des deux peut entraîner des erreurs de refus d'autorisation.
Vous pouvez utiliser des répertoires logiques pour placer le répertoire racine de l'utilisateur à l'emplacement souhaité dans votre hiérarchie de stockage, en effectuant ce que l'on appelle une chroot opération. Dans ce mode, les utilisateurs ne peuvent pas accéder à un répertoire en dehors du répertoire de base ou du répertoire racine que vous avez configuré pour eux.
Par exemple, bien qu'un utilisateur Amazon S3 ait été limité à l'accès uniquement/
, certains clients autorisent les utilisateurs à parcourir un dossier vers mybucket
/home
/${transfer:UserName
}/
le haut. Dans ce cas, l'utilisateur revient sur le répertoire de base prévu uniquement après s'être déconnecté et reconnecté au serveur Transfer Family. L'exécution d'une chroot opération peut empêcher cette situation de se produire.mybucket
/home
Vous pouvez créer votre propre structure de répertoire à partir de buckets et de préfixes. Cette fonctionnalité est utile si votre flux de travail attend une structure de répertoire spécifique que vous ne pouvez pas répliquer via des préfixes de compartiment. Vous pouvez également créer un lien vers plusieurs emplacements non contigus dans Amazon S3, comme pour créer un lien symbolique dans un système de fichiers Linux où le chemin de votre répertoire fait référence à un emplacement différent dans le système de fichiers.
FILEMappages de répertoires logiques
Le type de HomeDirectoryMapEntry
données inclut désormais un Type
paramètre. Avant que ce paramètre n'existe, vous auriez pu créer un mappage de répertoire logique dont la cible était un fichier. Si vous avez déjà créé l'un de ces types de mappages de répertoires logiques, vous devez définir explicitement le Type
toFILE
, sinon ces mappages ne fonctionneront plus correctement à l'avenir.
Pour ce faire UpdateUser
API, vous pouvez appeler le et définir le Type
to FILE
pour le mappage existant.
Règles d'utilisation des répertoires logiques
Avant de créer vos mappages de répertoires logiques, vous devez comprendre les règles suivantes :
-
Dans
Entry
ce cas"/"
, vous ne pouvez avoir qu'un seul mappage car les chemins qui se chevauchent ne sont pas autorisés. -
Les répertoires logiques prennent en charge des mappages allant jusqu'à 2,1 Mo (pour les utilisateurs gérés par des services, cette limite est de 2 000 entrées). C'est-à-dire que la structure de données contenant les mappages a une taille maximale de 2,1 Mo. Si vous avez un grand nombre de mappages, vous pouvez calculer la taille de vos mappages comme suit :
-
Rédigez un mappage type dans le format
{"Entry":"/
, oùentry-path
","Target":"/target-path
"}
etentry-path
sont les valeurs réelles que vous allez utiliser.target-path
-
Comptez les caractères de cette chaîne, puis ajoutez-en un (1).
-
Multipliez ce nombre par le nombre approximatif de mappages dont vous disposez pour votre serveur.
Si le nombre que vous avez estimé à l'étape 3 est inférieur à 2,1 Mo, vos mappages se situent dans la limite acceptable.
-
-
Les cibles peuvent utiliser la
${transfer:UserName}
variable si le chemin du bucket ou du système de fichiers a été paramétré en fonction du nom d'utilisateur. -
Les cibles peuvent être des chemins situés dans différents compartiments ou systèmes de fichiers, mais vous devez vous assurer que le rôle mapped AWS Identity and Access Management (IAM) (le
Role
paramètre de la réponse) donne accès à ces compartiments ou systèmes de fichiers. -
Ne spécifiez pas le
HomeDirectory
paramètre, car cette valeur est implicite par lesEntry
Target
paires lorsque vous utilisez laLOGICAL
valeur duHomeDirectoryType
paramètre. -
Les cibles doivent commencer par une barre oblique (
/
), mais n'utilisez pas de barre oblique (/
) lorsque vous spécifiez le.Target
Par exemple,/
c'est acceptable, maisDOC-EXAMPLE-BUCKET
/images/
neDOC-EXAMPLE-BUCKET
/images/
l'est pas.DOC-EXAMPLE-BUCKET
/images -
Amazon S3 est un magasin d'objets, ce qui signifie que les dossiers sont un concept virtuel et qu'il n'existe aucune hiérarchie de répertoires réelle. Si votre application émet une
stat
opération depuis un client, tout est classé dans un fichier lorsque vous utilisez Amazon S3 pour le stockage. Ce comportement est décrit dans la section Organisation des objets dans la console Amazon S3 à l'aide de dossiers du guide de l'utilisateur d'Amazon Simple Storage Service. Si votre application nécessite d'indiquerstat
avec précision s'il s'agit d'un fichier ou d'un dossier, vous pouvez utiliser Amazon Elastic File System (AmazonEFS) comme option de stockage pour vos serveurs Transfer Family. -
Si vous spécifiez des valeurs de répertoire logiques pour votre utilisateur, le paramètre que vous utilisez dépend du type d'utilisateur :
-
Pour les utilisateurs gérés par des services, fournissez des valeurs de répertoire logiques dans.
HomeDirectoryMappings
-
Pour les utilisateurs de fournisseurs d'identité personnalisés, fournissez des valeurs de répertoire logiques dans
HomeDirectoryDetails
.
-
Important
À moins que vous ne choisissiez d'optimiser les performances de vos annuaires Amazon S3 (lorsque vous créez ou mettez à jour un serveur), le répertoire racine doit exister au démarrage. Pour Amazon S3, cela signifie que vous devez déjà avoir créé un objet de zéro octet se terminant par une barre oblique (/
) pour créer le dossier racine. Éviter ce problème est une raison pour envisager d'optimiser les performances d'Amazon S3.
Implémentation de répertoires logiques et chroot
Pour utiliser les répertoires et les chroot fonctionnalités logiques, vous devez effectuer les opérations suivantes :
Activez les répertoires logiques pour chaque utilisateur. Pour ce faire, définissez le HomeDirectoryType
paramètre sur LOGICAL
lorsque vous créez ou mettez à jour votre utilisateur.
"HomeDirectoryType": "LOGICAL"
chroot
Pour chroot créer une structure de répertoire composée d'un répertoire unique Entry
et d'un Target
appariement pour chaque utilisateur. Le dossier racine est le Entry
point et l'Target
emplacement de votre bucket ou de votre système de fichiers vers lequel mapper.
Vous pouvez utiliser un chemin absolu comme dans l'exemple précédent, ou vous pouvez utiliser une substitution dynamique pour le nom d'utilisateur par${transfer:UserName}
, comme dans l'exemple suivant.
[{"Entry": "/", "Target": "/mybucket/${transfer:UserName}"}]
Dans l'exemple précédent, l'utilisateur est verrouillé dans son répertoire racine et ne peut pas monter plus haut dans la hiérarchie.
Structure du répertoire virtuel
Pour une structure de répertoire virtuel, vous pouvez créer plusieurs Entry
Target
paires, avec des cibles n'importe où dans vos compartiments ou systèmes de EFS fichiers S3, y compris dans plusieurs compartiments ou systèmes de fichiers, à condition que le mappage des IAM rôles de l'utilisateur soit autorisé à y accéder.
Dans l'exemple de structure virtuelle suivant, lorsque l'utilisateur se connecte AWS SFTP, il se trouve dans le répertoire racine avec les sous-répertoires/pics
, /doc
/reporting
, et/anotherpath/subpath/financials
.
Note
À moins que vous ne choisissiez d'optimiser les performances de vos annuaires Amazon S3 (lorsque vous créez ou mettez à jour un serveur), l'utilisateur ou un administrateur doit créer les annuaires s'ils n'existent pas déjà. Éviter ce problème est une raison pour envisager d'optimiser les performances d'Amazon S3.
Pour AmazonEFS, vous avez toujours besoin de l'administrateur pour créer les mappages logiques ou le /
répertoire.
[ {"Entry": "/pics", "Target": "/bucket1/pics"}, {"Entry": "/doc", "Target": "/bucket1/anotherpath/docs"}, {"Entry": "/reporting", "Target": "/reportingbucket/Q1"}, {"Entry": "/anotherpath/subpath/financials", "Target": "/reportingbucket/financials"}]
Note
Vous ne pouvez télécharger des fichiers que dans les dossiers spécifiques que vous mappez. Cela signifie que dans l'exemple précédent, vous ne pouvez pas télécharger vers /anotherpath
des anotherpath/subpath
répertoires ; uniquementanotherpath/subpath/financials
. Vous ne pouvez pas non plus mapper directement ces tracés, car les tracés qui se chevauchent ne sont pas autorisés.
Supposons, par exemple, que vous créez les mappages suivants :
{ "Entry": "/pics", "Target": "/mybucket/pics" }, { "Entry": "/doc", "Target": "/mybucket/mydocs" }, { "Entry": "/temp", "Target": "/mybucket" }
Vous ne pouvez télécharger des fichiers que dans ces compartiments. Lorsque vous vous connectez pour la première foissftp
, vous êtes déposé dans le répertoire racine,/
. Si vous essayez de télécharger un fichier dans ce répertoire, le téléchargement échoue. Les commandes suivantes présentent un exemple de séquence :
sftp> pwd Remote working directory: / sftp> put file Uploading file to /file remote open("/file"): No such file or directory
Pour télécharger vers n'importe quel fichierdirectory/sub-directory
, vous devez mapper explicitement le chemin vers lesub-directory
.
Pour plus d'informations sur la configuration des répertoires logiques et chroot pour vos utilisateurs, y compris un AWS CloudFormation modèle que vous pouvez télécharger et utiliser, consultez Simplifier votre AWS SFTP structure avec un chroot et des répertoires logiques
Exemple de configuration de répertoires logiques
Dans cet exemple, nous créons un utilisateur et lui attribuons deux répertoires logiques. La commande suivante crée un nouvel utilisateur (pour un serveur Transfer Family existant) avec des répertoires logiques pics
etdoc
.
aws transfer create-user --user-name marymajor-logical --server-id s-11112222333344445 --role arn:aws:iam::1234abcd5678:role/marymajor-role --home-directory-type LOGICAL \ --home-directory-mappings "[{\"Entry\":\"/pics\", \"Target\":\"/
DOC-EXAMPLE-BUCKET1
/pics\"}, {\"Entry\":\"/doc\", \"Target\":\"/DOC-EXAMPLE-BUCKET2
/test/mydocs\"}]" \ --ssh-public-key-body file://~/.ssh/id_rsa.pub
S'il s'marymajor
agit d'un utilisateur existant et que son répertoire personnel est de typePATH
, vous pouvez le remplacer LOGICAL
par une commande similaire à la précédente.
aws transfer update-user --user-name marymajor-logical \ --server-id s-11112222333344445 --role arn:aws:iam::1234abcd5678:role/marymajor-role \ --home-directory-type LOGICAL --home-directory-mappings "[{\"Entry\":\"/pics\", \"Target\":\"/
DOC-EXAMPLE-BUCKET1
/pics\"}, \ {\"Entry\":\"/doc\", \"Target\":\"/DOC-EXAMPLE-BUCKET2
/test/mydocs\"}]"
Notez ce qui suit :
-
Si
/
les répertoiresDOC-EXAMPLE-BUCKET1
/pics/
n'existent pas déjà, l'utilisateur (ou un administrateur) doit les créer.DOC-EXAMPLE-BUCKET2
/test/mydocs -
Lorsqu'elle
marymajor
se connecte au serveur et exécute lals -l
commande, elle voit ce qui suit :drwxr--r-- 1 - - 0 Mar 17 15:42 doc drwxr--r-- 1 - - 0 Mar 17 16:04 pics
-
marymajor
Impossible de créer des fichiers ou des répertoires à ce niveau. Cependant, danspics
etdoc
, elle peut ajouter des sous-répertoires. -
Les fichiers qu'elle ajoute
pics
etdoc
sont ajoutés aux chemins Amazon S3/
etDOC-EXAMPLE-BUCKET1
/pics/
respectivement.DOC-EXAMPLE-BUCKET2
/test/mydocs -
Dans cet exemple, nous indiquons deux compartiments différents pour illustrer cette possibilité. Toutefois, vous pouvez utiliser le même compartiment pour plusieurs ou tous les répertoires logiques que vous spécifiez pour l'utilisateur.
Configuration de répertoires logiques pour Amazon EFS
Si votre serveur Transfer Family utilise AmazonEFS, le répertoire personnel de l'utilisateur doit être créé avec un accès en lecture et en écriture pour que l'utilisateur puisse travailler dans son répertoire de base logique. L'utilisateur ne peut pas créer ce répertoire lui-même, car il n'aurait pas les autorisations nécessaires pour mkdir
accéder à son répertoire de base logique.
Si le répertoire personnel de l'utilisateur n'existe pas et que celui-ci exécute une ls
commande, le système répond comme suit :
sftp> ls remote readdir ("/"): No such file or directory
Un utilisateur disposant d'un accès administratif au répertoire parent doit créer le répertoire de base logique de l'utilisateur.
AWS Lambda Réponse personnalisée
Vous pouvez utiliser des répertoires logiques dotés d'une fonction Lambda qui se connecte à votre fournisseur d'identité personnalisé. Pour ce faire, dans votre fonction Lambda, vous spécifiez les Target
valeurs HomeDirectoryType
asLOGICAL
, add Entry
et pour le HomeDirectoryDetails
paramètre. Par exemple :
HomeDirectoryType: "LOGICAL" HomeDirectoryDetails: "[{\"Entry\": \"/\", \"Target\": \"/
DOC-EXAMPLE-BUCKET
/theRealFolder"}]"
Le code suivant est un exemple de réponse réussie à un appel d'authentification Lambda personnalisé.
aws transfer test-identity-provider --server-id s-1234567890abcdef0 --user-name myuser { "Url": "https://a1b2c3d4e5.execute-api.us-east-2.amazonaws.com/prod/servers/s-1234567890abcdef0/users/myuser/config", "Message": "", "Response": "{\"Role\": \"arn:aws:iam::123456789012:role/bob-usa-role\",\"HomeDirectoryType\": \"LOGICAL\",\"HomeDirectoryDetails\": \"[{\\\"Entry\\\":\\\"/myhome\\\",\\\"Target\\\":\\\"/
DOC-EXAMPLE-BUCKET
/theRealFolder\\\"}]\",\"PublicKeys\": \"[ssh-rsa myrsapubkey]\"}", "StatusCode": 200 }
Note
La "Url":
ligne n'est renvoyée que si vous utilisez une méthode API Gateway comme fournisseur d'identité personnalisé.