我无法连接到AWS Transfer for SFTP。我成功设置了服务器,并尝试使用WinSCP进行连接。
我设置了具有以下信任关系的IAM角色:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "transfer.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
我使用主目录homebucket
和主目录homedir
将范围调整策略与described in the documentation配对使用
{
"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”和“ readdir”失败。这一切都非常像我的IAM政策问题,但我无法弄清楚。
答案 0 :(得分:9)
我们在将范围缩小策略与AWS Transfer上的用户一起使用时遇到类似的问题。对我们有用的解决方案是创建两种不同的策略。
{transfer:UserName}
之类的传输服务变量。我们得出的结论是,也许只有附加的策略才能解析传输服务变量。我们不确定这是否正确以及这是否是最佳解决方案,因为这在允许附加范围缩小策略以创建一种“管理员”用户时会带来潜在的风险。因此,我很乐意得到进一步将其锁定的输入。
这是我们使用的两项政策:
附加到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}*"
}
]
}
答案 1 :(得分:6)
我有一个类似的问题,但是有不同的错误行为。我设法成功登录,但是随后几乎立即关闭了连接。 我做了以下事情:
我希望能有所帮助。 编辑:为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问题。
答案 2 :(得分:1)
根据有点神秘的文档,@ limfinity是正确的。要缩小访问范围,您需要一个常规的角色/策略组合来授予访问权限以查看存储桶。该角色将应用于您创建的SFTP用户。另外,您需要一个自定义策略,该策略仅将CRUD权限授予用户的存储桶。自定义策略也适用于SFTP用户。
从本文档的第24页... wait(2)
man page
要创建范围缩小策略,请在IAM策略中使用以下策略变量:
AWS Transfer for SFTP用户指南 创建范围缩小策略
• ${transfer:HomeBucket}
• ${transfer:HomeDirectory}
• ${transfer:HomeFolder}
• ${transfer:UserName}
注意 您不能在IAM角色定义中使用前面列出的变量作为策略变量。您可以在IAM策略中创建这些变量,并在设置用户时直接提供它们。另外,您不能在此范围缩小策略中使用$ {aws:Username}变量。此变量引用的是IAM用户名,而不是AWS SFTP所需的用户名。
答案 3 :(得分:0)
无法发表评论,对不起,如果我发帖不正确。
注意AWS的默认策略!
此解决方案确实对我有用,因为我能够按预期对SFTP用户使用范围缩小策略。但是,有一个问题:
{
"Sid": "AWSTransferRequirements",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Resource": "*"
},
该部分的政策将使SFTP用户可以使用该政策将目录更改为root,并列出您帐户的所有存储桶。他们没有读取或写入的权限,但可以发现可能不必要的内容。我可以确认将以上内容更改为:
{
"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=0
答案 4 :(得分:0)
我们使用带有用户名和密码的SFTP的更新版本,并且不得不花费很多时间来找出所有详细信息。对于新版本,“范围缩小”策略需要在Secrets Manager中指定为“策略”键。这对于整个工作流程非常重要。
我们已经在我们的网站上记录了完整的设置-https://coderise.io/sftp-on-aws-with-username-and-password/
希望有帮助!