기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
논리적 디렉터리를 사용하여 Transfer Family 디렉터리 구조를 단순화합니다.
AWS Transfer Family 서버 디렉터리 구조를 단순화하기 위해 논리적 디렉터리를 사용할 수 있습니다. 논리적 디렉터리를 사용하면 사용자가 Amazon S3 버킷 또는 Amazon EFS 파일 시스템에 연결할 때 탐색하는 사용자 친화적 이름을 사용하는 가상 디렉터리 구조를 구성할 수 있습니다. 논리적 디렉터리를 사용하면 최종 사용자에게 절대 디렉터리 경로, Amazon S3 버킷 이름 및 EFS 파일 시스템 이름을 공개하지 않아도 됩니다.
참고
세션 정책 및 기타 내부 요구 사항의 사용에 따라 다르지만 일반적으로 사용자가 의도한 파일만 액세스하도록 하기 위해 세션 정책과 논리적 디렉터리가 모두 필요하지는 않습니다. 논리적 디렉터리를 설정하는 경우 세션 정책도 생성하지 마세요. 둘 다 있으면 권한 거부 오류가 발생할 수 있습니다.
논리적 디렉터리를 사용하여 chroot 작업을 수행하여 스토리지 계층 내에서 사용자의 루트 디렉터리를 원하는 위치로 설정할 수 있습니다. 이 모드에서는 사용자가 구성한 홈 또는 루트 디렉터리 외부의 디렉터리를 탐색할 수 없습니다.
예를 들어 Amazon S3 사용자는 /
까지만 액세스하도록 제한되었지만 일부 클라이언트는 사용자가 폴더를 mybucket
/home
/${transfer:UserName
}/
로 이동할 수 있도록 허용합니다. 이 경우 사용자는 Transfer Family 서버에서 로그아웃했다가 다시 로그인한 후에야 의도한 홈 디렉터리로 돌아갑니다. chroot 작업을 수행하면 이러한 상황이 발생하는 것을 방지할 수 있습니다.mybucket
/home
버킷 및 접두사 전체에 고유한 디렉터리 구조를 만들 수 있습니다. 이 기능은 버킷 접두사를 통해 복제할 수 없는 특정 디렉터리 구조가 필요한 워크플로가 있는 경우에 유용합니다. 디렉터리 경로가 파일 시스템의 다른 위치를 참조하는 Linux 파일 시스템에 심볼릭 링크를 생성하는 것과 비슷하게 Amazon S3 내의 여러 비연속 위치에 연결할 수도 있습니다.
논리적 디렉터리 FILE 매핑
이제 HomeDirectoryMapEntry
데이터 유형에 Type
파라미터가 포함됩니다. 이 파라미터가 존재하기 전에 대상이 파일인 논리적 디렉터리 매핑을 만들 수 있었습니다. 이전에 이러한 종류의 논리적 디렉터리 매핑을 생성한 경우 를 Type
로 명시적으로 설정해야 합니다. FILE
그렇지 않으면 이러한 매핑이 제대로 작동하지 않습니다.
이렇게 하는 한 가지 방법은 UpdateUser
를 호출API하고 기존 매핑을 FILE
위해 를 Type
로 설정하는 것입니다.
논리적 디렉터리 사용 규칙
논리적 디렉터리 매핑을 구축하기 전에 다음 규칙을 이해해야 합니다.
-
Entry
이(가)"/"
인 경우 경로가 겹칠 수 없으므로 매핑을 하나만 사용할 수 있습니다. -
논리적 디렉터리는 최대 2.1MB의 매핑을 지원합니다(서비스 관리형 사용자의 경우 이 제한은 2,000개 항목임). 즉, 매핑이 포함된 데이터 구조는 최대 크기가 2.1MB입니다. 매핑이 많은 경우 다음과 같이 매핑 크기를 계산할 수 있습니다.
-
일반적인 매핑을 형식으로 작성합니다.
{"Entry":"/
여기서entry-path
","Target":"/target-path
"}
및entry-path
는 사용할 실제 값입니다.target-path
-
해당 문자열의 문자 수를 계산한 다음 하나(1)를 추가합니다.
-
해당 수에 서버에 대해 가지고 있는 대략적인 매핑 수를 곱합니다.
3단계에서 추정한 수가 2.1MB 미만인 경우 매핑이 허용 한도 내에 있는 것입니다.
-
-
버킷 또는 파일 시스템 경로가 사용자 이름을 기반으로 파라미터화된 경우 타겟은
${transfer:UserName}
변수를 사용할 수 있습니다. -
대상은 서로 다른 버킷 또는 파일 시스템의 경로일 수 있지만 매핑된 AWS Identity and Access Management (IAM) 역할(응답의
Role
파라미터)이 이러한 버킷 또는 파일 시스템에 대한 액세스를 제공하는지 확인해야 합니다. -
HomeDirectory
파라미터 값을 사용할 때Entry
Target
페어에서 이 값을 암시하므로LOGICAL
HomeDirectoryType
파라미터를 지정하지 마세요. -
대상은 순방향 슬래시(
/
) 문자로 시작해야 하지만 를 지정할 때는 후행 슬래시(/
)를 사용하지 마세요Target
. 예를 들어/
는 허용되지만DOC-EXAMPLE-BUCKET
/imagesDOC-EXAMPLE-BUCKET
/images/
는 허용되지 않습니다.DOC-EXAMPLE-BUCKET
/images/ -
Amazon S3는 객체 스토어입니다. 즉, 폴더가 가상 개념이고 실제 디렉터리 계층 구조가 없습니다. 애플리케이션에서 클라이언트의
stat
작업을 발급하는 경우 Amazon S3를 스토리지로 사용할 때 모든 항목이 파일로 분류됩니다. 이 동작은 Amazon Simple Storage Service 사용 설명서의 폴더를 사용하여 Amazon S3 콘솔에서 객체 구성에 설명되어 있습니다. 애플리케이션에 파일 또는 폴더가 있는지stat
정확하게 표시해야 하는 경우 Transfer Family 서버의 스토리지 옵션으로 Amazon Elastic File System(AmazonEFS)을 사용할 수 있습니다. -
사용자의 논리적 디렉터리 값을 지정하는 경우 사용하는 파라미터는 사용자 유형에 따라 달라집니다.
-
서비스 관리 사용자의 경우
HomeDirectoryMappings
에서 논리적 디렉터리 값을 제공하세요. -
사용자 지정 자격 증명 공급자 사용자의 경우 에 논리적 디렉터리 값을 제공합니다
HomeDirectoryDetails
.
-
중요
Amazon S3 디렉터리(서버를 생성하거나 업데이트할 때)의 성능을 최적화하도록 선택하지 않는 한 루트 디렉터리는 시작 시 존재해야 합니다. Amazon S3의 경우 루트 폴더를 생성하려면 슬래시(/
)로 끝나는 0바이트 객체를 이미 생성했어야 합니다. 이 문제를 피하는 것은 Amazon S3 성능 최적화를 고려해야 하는 이유입니다.
논리적 디렉터리 구현 및 chroot
논리적 디렉터리와 chroot 기능을 사용하려면 다음을 수행해야 합니다:
각 사용자에 대해 논리적 디렉터리를 활성화하세요. 사용자를 만들거나 업데이트할 때 HomeDirectoryType
파라미터를 LOGICAL
로 설정하면 됩니다.
"HomeDirectoryType": "LOGICAL"
chroot
chroot의 경우, 각 사용자에 대한 단일 Entry
및 Target
쌍으로 구성된 디렉터리 구조를 만드세요. 루트 폴더는 Entry
지점이고 매핑할 버킷 또는 파일 시스템의 Target
위치입니다.
이전 예와 같이 절대 경로를 사용하거나, 다음 예와 같이 사용자 이름을 동적으로 ${transfer:UserName}
로 대체할 수 있습니다.
[{"Entry": "/", "Target": "/mybucket/${transfer:UserName}"}]
위 예에서 사용자는 루트 디렉터리에 잠겨 있어 계층 구조에서 상위 위치로 이동할 수 없습니다.
가상 디렉터리 구조
가상 디렉터리 구조의 경우 사용자의 IAM 역할 매핑에 액세스할 수 있는 권한이 있는 한 여러 버킷 또는 EFS 파일 시스템을 포함하여 S3 버킷 또는 파일 시스템의 모든 위치에 대상으로 여러 Entry
Target
페어링을 생성할 수 있습니다.
다음 가상 구조 예제에서는 사용자가 에 로그인하면 AWS SFTP, , 및 하위 디렉터리가 있는 루트 디렉터리에 있습니다/pics
/doc
/reporting
/anotherpath/subpath/financials
.
참고
Amazon S3 디렉터리의 성능을 최적화하기로 선택하지 않는 한(서버를 생성하거나 업데이트할 때) 사용자 또는 관리자가 디렉터리가 아직 없는 경우 디렉터리를 생성해야 합니다. 이 문제를 피하는 것은 Amazon S3 성능 최적화를 고려해야 하는 이유입니다.
Amazon 의 EFS경우 관리자가 논리적 매핑 또는 /
디렉터리를 생성해야 합니다.
[ {"Entry": "/pics", "Target": "/bucket1/pics"}, {"Entry": "/doc", "Target": "/bucket1/anotherpath/docs"}, {"Entry": "/reporting", "Target": "/reportingbucket/Q1"}, {"Entry": "/anotherpath/subpath/financials", "Target": "/reportingbucket/financials"}]
참고
매핑한 특정 폴더에만 파일을 업로드할 수 있습니다. 즉, 이전 예에서는 /anotherpath
또는 anotherpath/subpath
디렉터리에는 업로드할 수 없고; anotherpath/subpath/financials
에만 업로드할 수 있습니다. 또한 경로가 겹칠 수 없으므로 이러한 경로에 직접 매핑할 수 없습니다.
예를 들어, 다음 매핑을 형성한다고 가정하겠습니다:
{ "Entry": "/pics", "Target": "/mybucket/pics" }, { "Entry": "/doc", "Target": "/mybucket/mydocs" }, { "Entry": "/temp", "Target": "/mybucket" }
해당 버킷에만 파일을 업로드할 수 있습니다. sftp
를 통해 처음 연결하면 루트 디렉터리인 /
(으)로 이동됩니다. 해당 디렉터리에 파일을 업로드하려고 하면 업로드가 실패합니다. 다음 명령은 예 순서를 나타냅니다:
sftp> pwd Remote working directory: / sftp> put file Uploading file to /file remote open("/file"): No such file or directory
임의의 directory/sub-directory
위치에 업로드하려면 경로를 sub-directory
에 명시적으로 매핑해야 합니다.
다운로드하여 사용할 수 있는 AWS CloudFormation 템플릿을 포함하여 사용자를 chroot 위한 논리적 디렉터리 구성에 대한 자세한 내용은 AWS 스토리지 블로그의 chroot 및 논리적 디렉터리를 사용하여 구조 단순화를 참조하세요 AWS SFTP
논리적 디렉터리 구성 예
이 예에서는 사용자를 생성하고 두 개의 논리적 디렉터리를 할당합니다. 다음 명령을 실행하면 (기존 Transfer Family 서버의 경우) 논리적 디렉터리 pics
및 doc
를 사용하여 새 사용자가 만들어집니다.
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
marymajor
가 기존 사용자이고 홈 디렉터리 타입이 PATH
인 경우 이전 사용자와 비슷한 명령을 사용하여 그것을 LOGICAL
로 변경할 수 있습니다.
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\"}]"
유념할 사항:
-
디렉터리
/
및DOC-EXAMPLE-BUCKET1
/pics/
없는 경우 사용자 (또는 관리자) 가 해당 디렉터리를 만들어야 합니다.DOC-EXAMPLE-BUCKET2
/test/mydocs -
marymajor
이 서버에 연결되어ls -l
명령을 실행하면 다음과 같은 내용이 표시됩니다:drwxr--r-- 1 - - 0 Mar 17 15:42 doc drwxr--r-- 1 - - 0 Mar 17 16:04 pics
-
marymajor
은(는) 이 수준에서는 파일이나 디렉터리를 만들 수 없습니다. 하지만pics
및doc
내에서 하위 디렉토리를 추가할 수는 있습니다. -
pics
및doc
에 추가되는 파일은 각각 Amazon S3 경로/
및DOC-EXAMPLE-BUCKET1
/pics/
에 추가됩니다.DOC-EXAMPLE-BUCKET2
/test/mydocs -
이 예에서는 이러한 가능성을 설명하기 위해 서로 다른 두 개의 버킷을 지정합니다. 하지만 사용자에 대해 지정한 여러 논리 디렉터리 또는 모든 논리적 디렉터리에 동일한 버킷을 사용할 수 있습니다.
Amazon용 논리적 디렉터리 구성 EFS
Transfer Family 서버가 Amazon 를 사용하는 경우 사용자가 논리적 EFS홈 디렉터리에서 작업하기 전에 읽기 및 쓰기 액세스 권한으로 사용자의 홈 디렉터리를 생성해야 합니다. 사용자는 논리적 홈 디렉터리 상의 mkdir
에 대한 권한이 없기 때문에 이 디렉터리를 직접 만들 수는 없습니다.
사용자의 홈 디렉터리가 존재하지 않고 사용자가 ls
명령을 실행하면 시스템은 다음과 같이 응답합니다:
sftp> ls remote readdir ("/"): No such file or directory
상위 디렉터리에 대한 관리 액세스 권한이 있는 사용자는 사용자의 논리적 홈 디렉터리를 생성해야 합니다.
사용자 지정 AWS Lambda 응답
맞춤 ID 공급자에 연결하는 Lambda 함수와 함께 논리적 디렉터리를 사용할 수 있습니다. 이렇게 하려면 Lambda 함수에서 HomeDirectoryType
를 LOGICAL
(으)로 지정하고, HomeDirectoryDetails
파라미터에 Entry
와(과) Target
를 추가합니다. 예:
HomeDirectoryType: "LOGICAL" HomeDirectoryDetails: "[{\"Entry\": \"/\", \"Target\": \"/
DOC-EXAMPLE-BUCKET
/theRealFolder"}]"
다음 코드는 맞춤 Lambda 인증 호출로부터의 응답 성공의 예입니다.
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 }
참고
Gateway API 메서드를 사용자 지정 자격 증명 공급자로 사용하는 경우에만 "Url":
라인이 반환됩니다.