[アップデート] AWS Transfer Family の SFTP コネクターが認証情報のローテーション中も転送を継続できるようになりました

[アップデート] AWS Transfer Family の SFTP コネクターが認証情報のローテーション中も転送を継続できるようになりました

新旧2つの SSH 鍵を用意し、リモート役の SFTP サーバーとコネクターの間で鍵を入れ替えて、シークレットのバージョンが `AWSCURRENT` から `AWSPREVIOUS` へ切り替わってもコネクターを更新せず転送が続くことを確認しました。
2026.09.07

いわさです。

AWS Transfer Family の SFTP コネクターは、AWS 側がクライアントになって外部の SFTP サーバーと S3 の間でファイルをやり取りする機能です。基本的な使い方は以前 DevelopersIO で紹介されています。

https://dev.classmethod.jp/articles/aws-transfer-family-release-sftp-connector/

コネクターが外部サーバーにログインするための認証情報(SFTP ユーザーの秘密鍵やパスワード)は Secrets Manager に置きます。これを定期的に入れ替える運用では、これまでシークレットを更新するたびにコネクター側も新しいバージョンを見るよう設定し直す必要があり、この切り替えがずれるとコネクターが古い鍵のまま接続して認証に失敗することがありました。

先日のアップデートで、鍵を入れ替えている間もコネクターがそのまま転送を続けられるようになりました。コネクターに OrderedUserSecretVersionStages という設定が追加されています。

https://aws.amazon.com/about-aws/whats-new/2026/09/transfer-family-sftp-credential-rotation/

今回こちらを確認してみたので紹介します。

実際に確認してみる

リモート役の SFTP サーバーとして Transfer Family の SFTP サーバー(S3 バックエンド)を用意しました。
SFTP の鍵認証で、秘密鍵はシークレットに入れておきます。今回はこの鍵を新旧2つ(v1・v2)用意して、ローテーションした時の挙動を観察してみます。

50792B75-34E6-4419-9835-F863C2E7113F_1_105_c.jpeg

続いてコネクターを作成します。
マネジメントコンソールを見てみると SFTP 設定に「シークレットバージョンステージ」の欄が追加されていました。

4120E4CA-5F29-4A33-8A73-F027FE0D1893.png

ここで AWSCURRENT(最新版)と AWSPREVIOUS(1つ前)の2つを順番付きで設定できました。
順序の意味が最初よくわからなかったですが、どうやらコネクターはこの順に認証を試し、最初に成功した鍵で接続するという仕様になってるみたいです。

以下は設定後のコンソールの状態です。

7EA60E0D-0046-4424-8BC7-D7D2594D97CD.png

この時点では v1 の秘密鍵が AWSCURRENT に入っています。

この後の接続テストではファイル転送は AWSCURRENT(v1)で問題なく成功しました。

鍵をローテーションしてみる

さて、ここからが今回のアップデートの検証部分ですが鍵をローテーションしてみましょう。
まずサーバー側の SFTP ユーザーに新しい公開鍵(v2)を追加し、新旧どちらでも認証できる状態にします。
次に Secrets Manager に v2 の秘密鍵を投入すると、AWSCURRENT だった v1 が AWSPREVIOUS に退避し、v2 が新しい AWSCURRENT になります。

$ aws secretsmanager describe-secret --secret-id <arn> --query 'VersionIdsToStages'
{
    "1afe4a74-...": ["AWSPREVIOUS"],
    "c16a481b-...": ["AWSCURRENT"]
}

コネクター側は何も更新してないのですが、この状態でもコネクターは先頭の AWSCURRENT(v2)で認証してそのまま転送できました。
従来はここでコネクターの設定を編集して、参照するシークレットバージョンを新しい方に変更する必要がありました。

$ aws transfer test-connection --connector-id c-xxxx --query '{Status:Status,Msg:StatusMessage}'
{
    "Status": "OK",
    "Msg": "Connection succeeded"
}

シークレットは新しい鍵に切り替わったけどもサーバー側の公開鍵の差し替えがまだ間に合っていないケースもありえます。
シークレットは v2 のまま、サーバー側の公開鍵を v1 だけに戻して接続テストしてみました。
コネクターの AWSCURRENT(v2)はサーバーの v1 と合わず認証できませんが、AWSPREVIOUS(v1)で接続できました。

$ aws transfer test-connection --connector-id c-xxxx --query '{Status:Status,Msg:StatusMessage}'
{
    "Status": "OK",
    "Msg": "Connection succeeded"
}

AWSPREVIOUS を設定せず AWSCURRENT だけにしたコネクターでも、同じ状況で接続テストしました。
こちらは AWSCURRENT(v2)で認証できず、次に試す鍵がないので認証エラーになりました。

$ aws transfer test-connection --connector-id c-yyyy --query '{Status:Status,Msg:StatusMessage}'
{
    "Status": "ERROR",
    "Msg": "Authentication failed (Available Authentication Methods: PrivateKey)"
}

さいごに

本日は AWS Transfer Family の SFTP コネクターが認証情報のローテーション中も転送を継続できるようになったので試してみました。

AWSCURRENTAWSPREVIOUS の2つを設定しておくだけで、鍵が切り替わってもコネクターを変更せずに転送使えましたね。

指定できるステージングラベルは1〜2個までで、既存のコネクターにも update-connector で設定できるので、鍵やパスワードを定期的にローテーションしている環境では利用してみても良さそうです。

この記事をシェアする

関連記事