我无法连接到AWS Transfer for SFTP。我成功设置了服务器并尝试使用WinSCP进行连接。
我设置了一个具有信任关系的IAM角色,如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "transfer.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
我使用主目录described in the documentation和主目录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”和“readdir”失败等不透明错误。这一切都与我的IAM政策问题非常相似,但我无法弄明白。
我们遇到了类似的问题,使得范围缩减政策与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}*"
}
]
}
我有类似的问题,但有不同的错误行为。我成功登录,但随后连接几乎立即关闭。我做了以下事情:
我希望有所帮助。编辑:添加了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}
注意您不能在IAM角色定义中使用前面列出的变量作为策略变量。您可以在IAM策略中创建这些变量,并在设置用户时直接提供这些变量。此外,您不能在此范围缩减策略中使用$ {aws:Username}变量。此变量引用IAM用户名,而不是AWS SFTP所需的用户名。
无法发表评论,抱歉,如果我发布的内容不正确。
小心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