WinSCPからAWS Transfer FamilyのS3にファイル転送時のエラー回避方法を教えて下さい

2023.01.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

AWS Transfer Family の S3 に対して、WinSCP でファイル転送等をしようとした際に下記のようなエラーが表示されます。

解決策を教えて下さい。

エラー

ファイル ファイル名 のアップロードは成功しましたが、パーミッション/タイムスタンプの設定中にエラーが発生しました。

問題が解決しない場合は、パーミッションの設定・タイムスタンプの設定を無効にするか、パーミッション設定時のエラーを無視するように設定してください。


サポートされていない操作です
エラー コード: 8
(US-ASCII) からのエラー メッセージ: SETSTAT unsupported


どう対応すればいいの?

AWS Transfer Family にて SETSTAT エラーを回避するために、 ENABLE_NO_OP を設定してください。

1, 現在ご利用のサーバーが "SetStatOption": "DEFAULT" になっていることを確認します。

  • 【s-SFTPホスト名】には、『s-』から始まる AWS Transfer Family のホスト名へ変更してください。

実行するコマンド

aws transfer describe-server --server-id 【s-SFTPホスト名】 --query Server.ProtocolDetails

実行例

$ aws transfer describe-server --server-id 【s-SFTPホスト名】 --query Server.ProtocolDetails
{
    "PassiveIp": "AUTO",
    "TlsSessionResumptionMode": "ENFORCED",
    "SetStatOption": "DEFAULT"
}


2, SETSTATコマンドを無効化します。

実行するコマンド

aws transfer update-server --server-id 【s-SFTPホスト名】 --protocol-details SetStatOption=ENABLE_NO_OP

実行例

$ aws transfer update-server --server-id 【s-SFTPホスト名】 --protocol-details SetStatOption=ENABLE_NO_OP
{
    "ServerId": "【s-SFTPホスト名】"
}


3, SETSTATコマンドが無効化されているかを確認します。

  • "SetStatOption": "ENABLE_NO_OP" になっていれば変更完了です。

実行するコマンド

aws transfer describe-server --server-id 【s-SFTPホスト名】 --query Server.ProtocolDetails

実行例

$ aws transfer describe-server --server-id 【s-SFTPホスト名】 --query Server.ProtocolDetails
{
    "PassiveIp": "AUTO",
    "TlsSessionResumptionMode": "ENFORCED",
    "SetStatOption": "ENABLE_NO_OP"
}

再度、WinSCPで AWS Transfer Family の S3 にファイルをアップロードすると回避されている事を確認し、以上で設定変更の完了です。

原因

setstatエラーを回避 - クライアントを使用してファイルを転送する

一部の SFTP ファイル転送クライアント(WinSCP等)は、ファイルをアップロードする場合に、SETSTAT などのコマンドを使用して、タイムスタンプやアクセス権限などを含んだリモートファイルの属性を変更しようとすることがあります。

ただし、これらのコマンドは Amazon S3 などのオブジェクトストレージシステムと互換性がありません。

この非互換性が原因で、これらのクライアントからファイルをアップロードする際に、ファイルが正常にアップロードされた場合でもエラーが発生する可能性があります。

Q&A

Q, 設定変更後は、再起動の必要はありますか?
A, いいえ。不要です。

Q, 設定を戻すには、どうしたら良いですか?
A, 下記コマンドを実行で戻すことが可能です。

aws transfer update-server --server-id 【s-SFTPホスト名】 --protocol-details SetStatOption=DEFAULT

参考資料