使用している AWS アカウントの AWS Transfer Family サーバーを、別のアカウント内の Amazon Elastic File System (Amazon EFS) ファイルシステムにアクセスできるようにしたり、Amazon EFS ファイルシステムへのクロスアカウントアクセスが可能な Transfer Family サーバーを設定したりしようとしています。
解決策
注: AWS CLI のコマンドの実行時にエラーが発生する場合は、「AWS CLI でのエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
Transfer Family サーバーを設定するために、アカウント A に AWS Identity and Access Management (IAM) ロールを作成し、アカウント B 内のファイルシステムへのアクセスを許可します。次に、アカウント A 内の IAM ロールを使用して設定した Transfer Family サーバーを作成します。アカウント A の Transfer Family サーバーユーザーがアカウント B 内のファイルシステムにアクセスできることを検証します。
注: AWS Transfer Family コンソールには、同じアカウント内の Amazon EFS ファイルシステムのみが表示されます。Transfer Family サーバーを別のアカウントのファイルシステムで使用するには、AWS CLI または AWS SDK を使用します。
アカウント A 内に、ファイルシステムにアクセスできる IAM ロールを作成する
サーバーユーザー用の IAM ロールを作成します。ロールの IAM ポリシーには、次のポリシーステートメントを使用します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RootFileSystemAccess",
"Effect": "Allow",
"Action": [
"elasticfilesystem:ClientRootAccess",
"elasticfilesystem:ClientMount",
"elasticfilesystem:ClientWrite"
],
"Resource": "arn:aws:elasticfilesystem:region:accountB-id:file-system/file-system-id"
}
]
}
アカウント A の IAM ロールにアクセス許可を付与するポリシーを、アカウント B のファイルシステムに追加します。
{
"Sid": "EFS-TransferFamily",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccounA-id:role/RoleName"
},
"Action": [
"elasticfilesystem:ClientRootAccess",
"elasticfilesystem:ClientWrite",
"elasticfilesystem:ClientMount"
],
"Resource": "arn:aws:elasticfilesystem:region:accountB-id:file-system/file-system-id"
}
アカウント A の IAM ロールを持つ Transfer Family サーバーユーザーを作成する
次の AWS CLI コマンド create-user を実行して Transfer Family ユーザーを作成します。
aws transfer create-user --user-name "sftp" --server-id "SERVER-ID" --role "arn:aws:iam::accountA-id:role/RoleName" --home-directory "/file-system-id/username"
このコマンドは、サーバー ID とユーザー名を返します。
出力例:
{
"ServerId": "MY_SERVER_ID",
"UserName": "MY_SERVER_USER_NAME"
}
アカウント A の Transfer Family サーバーユーザーがアカウント B のファイルシステムにアクセスできることを確認する
次の手順を実行します。
-
作成したユーザーとしてサーバーに接続します。接続には、次の OpenSSH コマンド sftp を実行します。
sftp -i myserveruser MY_SERVER_USER_NAME@MY_SERVER_ID.server.transfer.us-east-1.amazonaws.com
-
バケットのホームディレクトリをリスト表示します。OpenSSH を使用する場合は、ls コマンドを実行します。
ls
コマンドがホームディレクトリを返す場合、そのサーバーユーザーは Amazon EFS ファイルシステムへのクロスアカウントアクセスが許可されています。
関連情報
SFTP 対応サーバーを作成する
ファイルシステムポリシーを作成する
他の AWS アカウント内の Amazon S3 バケットを使用するために AWS Transfer Family を設定する方法を教えてください
Transfer Family にクロスアカウントアクセスを設定する