Skip to content

Commit 59da2d5

Browse files
author
awstools
committed
feat(client-transfer): AWS Transfer Family now supports SetStat server configuration option, which provides the ability to ignore SetStat command issued by file transfer clients, enabling customers to upload files without any errors.
1 parent 4320da0 commit 59da2d5

File tree

3 files changed

+91
-49
lines changed

3 files changed

+91
-49
lines changed

Diff for: clients/client-transfer/src/models/models_0.ts

+64-45
Original file line numberDiff line numberDiff line change
@@ -640,6 +640,11 @@ export enum IdentityProviderType {
640640
SERVICE_MANAGED = "SERVICE_MANAGED",
641641
}
642642

643+
export enum SetStatOption {
644+
DEFAULT = "DEFAULT",
645+
ENABLE_NO_OP = "ENABLE_NO_OP",
646+
}
647+
643648
export enum TlsSessionResumptionMode {
644649
DISABLED = "DISABLED",
645650
ENABLED = "ENABLED",
@@ -704,6 +709,20 @@ export interface ProtocolDetails {
704709
* </ul>
705710
*/
706711
TlsSessionResumptionMode?: TlsSessionResumptionMode | string;
712+
713+
/**
714+
* <p>Use the <code>SetStatOption</code> to ignore the error that is generated when the client attempts to use SETSTAT on a file you are uploading to an S3 bucket.</p>
715+
* <p>Some SFTP file transfer clients can attempt to change the attributes of remote files, including timestamp and permissions, using commands, such as SETSTAT when uploading the file.
716+
* However, these commands are not compatible with object storage systems, such as Amazon S3. Due to this incompatibility, file uploads from these clients can result in errors even when
717+
* the file is otherwise successfully uploaded.</p>
718+
* <p>Set the value to <code>ENABLE_NO_OP</code> to have the Transfer Family server ignore the SETSTAT command, and upload files without needing to make any changes to your SFTP client.
719+
* While the <code>SetStatOption</code>
720+
* <code>ENABLE_NO_OP</code> setting ignores the error, it does generate a log entry in CloudWatch Logs, so you can determine when the client is making a SETSTAT call.</p>
721+
* <note>
722+
* <p>If you want to preserve the original timestamp for your file, and modify other file attributes using SETSTAT, you can use Amazon EFS as backend storage with Transfer Family.</p>
723+
* </note>
724+
*/
725+
SetStatOption?: SetStatOption | string;
707726
}
708727

709728
export namespace ProtocolDetails {
@@ -885,19 +904,8 @@ export interface CreateServerRequest {
885904
EndpointType?: EndpointType | string;
886905

887906
/**
888-
* <p>The RSA or ECDSA private key to use for your server.</p>
889-
*
890-
* <p>Use the following command to generate an RSA 2048 bit key with no passphrase:</p>
891-
* <p>
892-
* <code>ssh-keygen -t rsa -b 2048 -N "" -m PEM -f my-new-server-key</code>.</p>
893-
* <p>Use a minimum value of 2048 for the <code>-b</code> option: you can create a stronger key using 3072 or 4096.</p>
894-
*
895-
* <p>Use the following command to generate an ECDSA 256 bit key with no passphrase:</p>
896-
* <p>
897-
* <code>ssh-keygen -t ecdsa -b 256 -N "" -m PEM -f my-new-server-key</code>.</p>
898-
* <p>Valid values for the <code>-b</code> option for ECDSA are 256, 384, and 521.</p>
899-
*
900-
* <p>For both of these commands, you can replace <i>my-new-server-key</i> with a string of your choice.</p>
907+
* <p>The RSA private key as generated by the <code>ssh-keygen -N "" -m PEM -f
908+
* my-new-server-key</code> command.</p>
901909
*
902910
* <important>
903911
* <p>If you aren't planning to migrate existing users from an existing SFTP-enabled
@@ -1005,12 +1013,24 @@ export interface CreateServerRequest {
10051013

10061014
/**
10071015
* <p>The protocol settings that are configured for your server.</p>
1008-
* <p>
1009-
* Use the <code>PassiveIp</code> parameter to indicate passive mode (for FTP and FTPS protocols).
1010-
* Enter a single dotted-quad IPv4 address, such as the external IP address of a firewall, router, or load balancer.
1011-
* </p>
1012-
* <p>Use the <code>TlsSessionResumptionMode</code> parameter to determine whether or not your Transfer server
1013-
* resumes recent, negotiated sessions through a unique session ID.</p>
1016+
* <ul>
1017+
* <li>
1018+
* <p>
1019+
* Use the <code>PassiveIp</code> parameter to indicate passive mode (for FTP and FTPS protocols).
1020+
* Enter a single dotted-quad IPv4 address, such as the external IP address of a firewall, router, or load balancer.
1021+
* </p>
1022+
* </li>
1023+
* <li>
1024+
* <p>Use the <code>SetStatOption</code> to ignore the error that is generated when the client attempts to use SETSTAT on a file you are uploading to an S3 bucket.
1025+
* Set the value to <code>ENABLE_NO_OP</code> to have the Transfer Family server ignore the SETSTAT command, and upload files without needing to make any changes to your SFTP client.
1026+
* Note that with <code>SetStatOption</code> set to <code>ENABLE_NO_OP</code>, Transfer generates a log entry to CloudWatch Logs, so you can determine when the client
1027+
* is making a SETSTAT call.</p>
1028+
* </li>
1029+
* <li>
1030+
* <p>Use the <code>TlsSessionResumptionMode</code> parameter to determine whether or not your Transfer server
1031+
* resumes recent, negotiated sessions through a unique session ID.</p>
1032+
* </li>
1033+
* </ul>
10141034
*/
10151035
ProtocolDetails?: ProtocolDetails;
10161036

@@ -3872,15 +3892,25 @@ export interface UpdateServerRequest {
38723892
Certificate?: string;
38733893

38743894
/**
3875-
* <p>
3876-
* The protocol settings that are configured for your server.
3877-
* </p>
3878-
* <p>
3879-
* Use the <code>PassiveIp</code> parameter to indicate passive mode (for FTP and FTPS protocols).
3880-
* Enter a single dotted-quad IPv4 address, such as the external IP address of a firewall, router, or load balancer.
3881-
* </p>
3882-
* <p>Use the <code>TlsSessionResumptionMode</code> parameter to determine whether or not your Transfer server
3883-
* resumes recent, negotiated sessions through a unique session ID.</p>
3895+
* <p>The protocol settings that are configured for your server.</p>
3896+
* <ul>
3897+
* <li>
3898+
* <p>
3899+
* Use the <code>PassiveIp</code> parameter to indicate passive mode (for FTP and FTPS protocols).
3900+
* Enter a single dotted-quad IPv4 address, such as the external IP address of a firewall, router, or load balancer.
3901+
* </p>
3902+
* </li>
3903+
* <li>
3904+
* <p>Use the <code>SetStatOption</code> to ignore the error that is generated when the client attempts to use SETSTAT on a file you are uploading to an S3 bucket.
3905+
* Set the value to <code>ENABLE_NO_OP</code> to have the Transfer Family server ignore the SETSTAT command, and upload files without needing to make any changes to your SFTP client.
3906+
* Note that with <code>SetStatOption</code> set to <code>ENABLE_NO_OP</code>, Transfer generates a log entry to CloudWatch Logs, so you can determine when the client
3907+
* is making a SETSTAT call.</p>
3908+
* </li>
3909+
* <li>
3910+
* <p>Use the <code>TlsSessionResumptionMode</code> parameter to determine whether or not your Transfer server
3911+
* resumes recent, negotiated sessions through a unique session ID.</p>
3912+
* </li>
3913+
* </ul>
38843914
*/
38853915
ProtocolDetails?: ProtocolDetails;
38863916

@@ -3917,29 +3947,18 @@ export interface UpdateServerRequest {
39173947
EndpointType?: EndpointType | string;
39183948

39193949
/**
3920-
* <p>The RSA or ECDSA private key to use for your server.</p>
3921-
*
3922-
* <p>Use the following command to generate an RSA 2048 bit key with no passphrase:</p>
3923-
* <p>
3924-
* <code>ssh-keygen -t rsa -b 2048 -N "" -m PEM -f my-new-server-key</code>.</p>
3925-
* <p>Use a minimum value of 2048 for the <code>-b</code> option: you can create a stronger key using 3072 or 4096.</p>
3926-
*
3927-
* <p>Use the following command to generate an ECDSA 256 bit key with no passphrase:</p>
3928-
* <p>
3929-
* <code>ssh-keygen -t ecdsa -b 256 -N "" -m PEM -f my-new-server-key</code>.</p>
3930-
* <p>Valid values for the <code>-b</code> option for ECDSA are 256, 384, and 521.</p>
3931-
*
3932-
* <p>For both of these commands, you can replace <i>my-new-server-key</i> with a string of your choice.</p>
3950+
* <p>The RSA private key as generated by <code>ssh-keygen -N "" -m PEM -f
3951+
* my-new-server-key</code>.</p>
39333952
*
39343953
* <important>
3935-
* <p>If you aren't planning to migrate existing users from an existing SFTP-enabled
3936-
* server to a new server, don't update the host key. Accidentally changing a
3937-
* server's host key can be disruptive.</p>
3954+
* <p>If you aren't planning to migrate existing users from an existing server to a new
3955+
* server, don't update the host key. Accidentally changing a server's host key can
3956+
* be disruptive.</p>
39383957
* </important>
39393958
*
39403959
*
39413960
*
3942-
* <p>For more information, see <a href="https://docs.aws.amazon.com/transfer/latest/userguide/edit-server-config.html#configuring-servers-change-host-key">Change the host key for your SFTP-enabled server</a> in the <i>Amazon Web Services Transfer
3961+
* <p>For more information, see <a href="https://docs.aws.amazon.com/transfer/latest/userguide/edit-server-config.html#configuring-servers-change-host-key">Change the host key for your SFTP-enabled server</a> in the <i>Amazon Web ServicesTransfer
39433962
* Family User Guide</i>.</p>
39443963
*/
39453964
HostKey?: string;

Diff for: clients/client-transfer/src/protocols/Aws_json1_1.ts

+2
Original file line numberDiff line numberDiff line change
@@ -2797,6 +2797,7 @@ const serializeAws_json1_1PosixProfile = (input: PosixProfile, context: __SerdeC
27972797
const serializeAws_json1_1ProtocolDetails = (input: ProtocolDetails, context: __SerdeContext): any => {
27982798
return {
27992799
...(input.PassiveIp !== undefined && input.PassiveIp !== null && { PassiveIp: input.PassiveIp }),
2800+
...(input.SetStatOption !== undefined && input.SetStatOption !== null && { SetStatOption: input.SetStatOption }),
28002801
...(input.TlsSessionResumptionMode !== undefined &&
28012802
input.TlsSessionResumptionMode !== null && { TlsSessionResumptionMode: input.TlsSessionResumptionMode }),
28022803
};
@@ -3770,6 +3771,7 @@ const deserializeAws_json1_1PosixProfile = (output: any, context: __SerdeContext
37703771
const deserializeAws_json1_1ProtocolDetails = (output: any, context: __SerdeContext): ProtocolDetails => {
37713772
return {
37723773
PassiveIp: __expectString(output.PassiveIp),
3774+
SetStatOption: __expectString(output.SetStatOption),
37733775
TlsSessionResumptionMode: __expectString(output.TlsSessionResumptionMode),
37743776
} as any;
37753777
};

0 commit comments

Comments
 (0)