# Transfer Family **Protocol:** JSON 1.1 **Endpoint:** `http://localhost:4566/` **X-Amz-Target prefix:** `TransferService.` AWS Transfer Family managed file transfer server management. This implementation covers the management-plane API for server and user lifecycle, SSH public key management, and tagging. Actual SFTP/FTP protocol handling is out of scope — server state is simulated in-process. ## Supported Actions ### Servers | Action | Description | |---|---| | `CreateServer` | Create a managed file transfer server | | `DescribeServer` | Get server metadata and configuration | | `UpdateServer` | Update protocols, endpoint type, logging role, security policy | | `DeleteServer` | Delete a server in any state, along with its users | | `ListServers` | Paginated list of servers | | `StartServer` | Transition server from `OFFLINE` to `ONLINE` | | `StopServer` | Transition server from `ONLINE` to `OFFLINE` | ### Users | Action | Description | |---|---| | `CreateUser` | Associate a user with a server | | `DescribeUser` | Get user configuration and SSH keys | | `UpdateUser` | Update role, home directory, or home directory mappings | | `DeleteUser` | Remove a user from a server | | `ListUsers` | Paginated list of users on a server | ### SSH Public Keys | Action | Description | |---|---| | `ImportSshPublicKey` | Attach an SSH public key to a user | | `DeleteSshPublicKey` | Remove an SSH public key from a user | ### Tagging | Action | Description | |---|---| | `TagResource` | Add or update tags on a server or user | | `UntagResource` | Remove tags from a server or user | | `ListTagsForResource` | List tags for a server or user | ## Configuration | Environment variable | Default | Description | |---|---|---| | `FLOCI_SERVICES_TRANSFER_ENABLED` | `true` | Enable or disable Transfer Family | ## ARN Format ``` arn:aws:transfer:{region}:{accountId}:server/{serverId} arn:aws:transfer:{region}:{accountId}:user/{serverId}/{userName} ``` Server IDs have the format `s-` followed by 17 lowercase alphanumeric characters (e.g. `s-01234567890abcdef`). ## Example Usage ```bash export AWS_ENDPOINT_URL=http://localhost:4566 # Create a server aws transfer create-server \ --protocols SFTP \ --endpoint-type PUBLIC # List servers aws transfer list-servers # Stop a server (must be ONLINE) aws transfer stop-server --server-id s-01234567890abcdef # Start a server (must be OFFLINE) aws transfer start-server --server-id s-01234567890abcdef # Create a user aws transfer create-user \ --server-id s-01234567890abcdef \ --user-name alice \ --role arn:aws:iam::000000000000:role/transfer-role \ --home-directory /uploads # Import an SSH public key aws transfer import-ssh-public-key \ --server-id s-01234567890abcdef \ --user-name alice \ --ssh-public-key-body "ssh-rsa AAAA..." # List users on a server aws transfer list-users --server-id s-01234567890abcdef # Tag a server aws transfer tag-resource \ --arn arn:aws:transfer:us-east-1:000000000000:server/s-01234567890abcdef \ --tags Key=env,Value=dev # Delete a user then the server aws transfer delete-user \ --server-id s-01234567890abcdef \ --user-name alice aws transfer stop-server --server-id s-01234567890abcdef aws transfer delete-server --server-id s-01234567890abcdef ``` ## Notes - **Phase 1** covers the management-plane API only. Data-plane SFTP connectivity (actual file transfer) is not emulated. - Server `EndpointType` defaults to `PUBLIC`. The `State` field transitions between `ONLINE` and `OFFLINE` via `StartServer` / `StopServer`. - SSH key bodies are stored and returned as-is; no cryptographic validation is performed.