SFTPのAWS転送 への接続に問題があります。サーバーを正常にセットアップし、WinSCPを使用して接続しようとしました。
次のような信頼関係を持つIAMロールを設定しました。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "transfer.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
ドキュメントで説明 ホームディレクトリhomebucket
およびホームディレクトリhomedir
を使用して、これをスコープダウンポリシーとペアにしました。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListHomeDir",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketAcl"
],
"Resource": "arn:aws:s3:::${transfer:HomeBucket}"
},
{
"Sid": "AWSTransferRequirements",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Resource": "*"
},
{
"Sid": "HomeDirObjectAccess",
"Effect": "Allow",
"Action": [
"s3:DeleteObjectVersion",
"s3:DeleteObject",
"s3:PutObject",
"s3:GetObjectAcl",
"s3:GetObject",
"s3:GetObjectVersionAcl",
"s3:GetObjectTagging",
"s3:PutObjectTagging",
"s3:PutObjectAcl",
"s3:GetObjectVersion"
],
"Resource": "arn:aws:s3:::${transfer:HomeDirectory}*"
}
]
}
Sshキーを使用して認証することはできましたが、実際にファイルの読み取り/書き込みを行うと、「homedir up homedir」や「readdir」の失敗などの不透明なエラーが表示され続けました。これはすべてIAMポリシーの問題に非常によく似ていますが、私はそれを理解することができませんでした。
AWS Transferでユーザーと連携するスコープダウンポリシーを取得する際にも、同様の問題がありました。私たちのために働いた解決策は、2種類のポリシーを作成することでした。
{transfer:UserName}
などの転送サービス変数を使用します。おそらく、追加の添付ポリシーのみが転送サービス変数を解決できると結論付けました。これが正しいかどうか、またこれが最良のソリューションであるかどうかはわかりません。これは、スコープダウンポリシーをアタッチして一種の「管理者」ユーザーを作成することを許すときに、リスクを招く可能性があるためです。それで、これをもう少しロックダウンするための入力ができてうれしいです。
転送ユーザーの詳細を見ると、コンソールでどのように見えるかを以下に示します。
使用する2つのポリシーは次のとおりです。
IAMロールにアタッチする一般ポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowListingOfUserFolder",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::my-s3-bucket"
]
},
{
"Sid": "HomeDirObjectAccess",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObjectVersion",
"s3:DeleteObject",
"s3:GetObjectVersion"
],
"Resource": "arn:aws:s3::: my-s3-bucket/*"
}
]
}
転送ユーザーに適用するスコープダウンポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowListingOfUserFolder",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::${transfer:HomeBucket}"
],
"Condition": {
"StringLike": {
"s3:prefix": [
"${transfer:UserName}/*",
"${transfer:UserName}"
]
}
}
},
{
"Sid": "AWSTransferRequirements",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Resource": "*"
},
{
"Sid": "HomeDirObjectAccess",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObjectVersion",
"s3:DeleteObject",
"s3:GetObjectVersion"
],
"Resource": "arn:aws:s3:::${transfer:HomeDirectory}*"
}
]
}
同様の問題が発生しましたが、エラーの動作が異なります。何とかログインに成功しましたが、その後すぐに接続が閉じられました。私は次のことをしました:
それがお役に立てば幸いです。編集:CloudWatchロールの設定の図を追加しました:
IAMユーザーロールのバケットポリシーは次のようになります。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::<your bucket>"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::<your bucket>/*"
]
}
]
}
最後に、上記のユーザーIAMロールの信頼関係も追加します。
Sftpに接続できるが、コンテンツを一覧表示しようとしたときにreaddirエラーが発生する場合、たとえばコマンド「ls」を使用すると、それはバケット権限がないことを示しています。接続がすぐに閉じられる場合は、信頼関係の問題またはKMSの問題のようです。
やや不可解なドキュメントによると、@ limfinityは正しかった。スコープダウンアクセスをスコープするには、バケットを表示するためのアクセスを許可する一般的なロール/ポリシーの組み合わせが必要です。このロールは、作成したSFTPユーザーに適用されます。さらに、ユーザーのバケットにのみCRUD権限を付与するカスタムポリシーが必要です。カスタムポリシーはSFTPユーザーにも適用されます。
このドキュメントの24ページから... https://docs.aws.Amazon.com/transfer/latest/userguide/sftp.ug.pdf#page=28&zoom=100,0,776
スコープダウンポリシーを作成するには、IAMポリシーで次のポリシー変数を使用します。
AWS Transfer for SFTPユーザーガイドスコープダウンポリシーの作成
• ${transfer:HomeBucket}
• ${transfer:HomeDirectory}
• ${transfer:HomeFolder}
• ${transfer:UserName}
Note前にリストした変数は、IAMロール定義のポリシー変数として使用できません。 IAMポリシーでこれらの変数を作成し、ユーザーをセットアップするときにそれらを直接指定します。また、このスコープダウンポリシーでは$ {aws:Username}変数を使用できません。この変数は、AWS SFTPで必要なユーザー名ではなく、IAMユーザー名を参照します。
コメントできません。間違って投稿していると申し訳ありません。
AWSのデフォルトポリシーに注意してください!
このソリューションは、期待どおりにSFTPユーザーにスコープダウンポリシーを使用できるという点で、私にとってはうまくいきました。ただし、キャッチがあります。
{
"Sid": "AWSTransferRequirements",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Resource": "*"
},
ポリシーのこのセクションでは、このポリシーを使用するSFTPユーザーがディレクトリをルートに変更し、アカウントのすべてのバケットを一覧表示できるようにします。読み書きすることはできませんが、おそらく不要なものを発見できます。上記を次のように変更することを確認できます。
{
"Sid": "AWSTransferRequirements",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Resource": "${transfer:HomeBucket}"
},
... SFTPユーザーがバケットをリストできないように見えます。ただし、存在するバケットを知っている場合は、ディレクトリへのcd
を引き続き使用できます。ここでも、読み取り/書き込みはできませんが、これは依然として不要なアクセスです。私のポリシーではこれを防ぐためにおそらく何かが欠けています。
適切なjailing
はバックログトピックのようです: https://forums.aws.Amazon.com/thread.jspa?threadID=297509&tstart=