Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 连接到用于SFTP的AWS传输_Amazon Web Services_Amazon S3_Sftp_Amazon Iam - Fatal编程技术网

Amazon web services 连接到用于SFTP的AWS传输

Amazon web services 连接到用于SFTP的AWS传输,amazon-web-services,amazon-s3,sftp,amazon-iam,Amazon Web Services,Amazon S3,Sftp,Amazon Iam,我无法连接到。我成功地设置了服务器并尝试使用WinSCP进行连接 我设置了一个具有如下信任关系的IAM角色: { “版本”:“2012-10-17”, “声明”:[ { “效果”:“允许”, “委托人”:{ “服务”:“transfer.amazonaws.com” }, “操作”:“sts:假定角色” } ] } 我将其与范围缩小策略配对使用主目录homebucket和主目录homedir { “版本”:“2012-10-17”, “声明”:[ { “Sid”:“ListHomeDir”,

我无法连接到。我成功地设置了服务器并尝试使用WinSCP进行连接

我设置了一个具有如下信任关系的IAM角色:

{
“版本”:“2012-10-17”,
“声明”:[
{
“效果”:“允许”,
“委托人”:{
“服务”:“transfer.amazonaws.com”
},
“操作”:“sts:假定角色”
}
]
}
我将其与范围缩小策略配对使用主目录
homebucket
和主目录
homedir

{
“版本”:“2012-10-17”,
“声明”:[
{
“Sid”:“ListHomeDir”,
“效果”:“允许”,
“行动”:[
“s3:ListBucket”,
“s3:GetBucketAcl”
],
“资源”:“arn:aws:s3::${transfer:HomeBucket}”
},
{
“Sid”:“AWSTransferRequirements”,
“效果”:“允许”,
“行动”:[
“s3:ListAllMyBucket”,
“s3:GetBucketLocation”
],
“资源”:“*”
},
{
“Sid”:“HomeDirObjectAccess”,
“效果”:“允许”,
“行动”:[
“s3:DeleteObjectVersion”,
“s3:DeleteObject”,
“s3:PutObject”,
“s3:GetObjectAcl”,
“s3:GetObject”,
“s3:GetObjectVersionAcl”,
“s3:GetObjectTagging”,
“s3:PutObjectTagging”,
“s3:PutObjectAcl”,
“s3:GetObjectVersion”
],
“资源”:“arn:aws:s3::${transfer:HomeDirectory}*”
}
]
}

我能够使用ssh密钥进行身份验证,但当涉及到实际读取/写入文件时,我总是遇到不透明的错误,如“查找homedir时出错”和“readdir”失败。这一切闻起来很像我的IAM策略的问题,但我一直无法解决。

我也有类似的问题,但错误行为不同。我成功登录,但随后连接几乎立即关闭。 我做了以下几件事:

  • 如果您的bucket已加密,请确保允许bucket访问的IAM角色也包含KMS访问
  • 确保信任关系也是该角色的一部分

  • 确保服务器本身具有Cloudwatch角色,并且与transfer.amazonaws.com具有信任关系!这就是我的解决方案。我不明白为什么需要这样做,但如果在Cloudwatch角色中没有信任关系,我的连接就会关闭
我希望这有帮助。 编辑:为CloudWatch角色的设置添加了一张图片:

IAM用户角色的bucket策略可以如下所示:

{
"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>/*"
        ]
    }
]
{
“版本”:“2012-10-17”,
“声明”:[
{
“效果”:“允许”,
“行动”:[
“s3:ListBucket”
],
“资源”:[
“arn:aws:s3::”
]
},
{
“效果”:“允许”,
“行动”:[
“s3:PutObject”,
“s3:GetObject”,
“s3:DeleteObject”
],
“资源”:[
“arn:aws:s3::/*”
]
}
]
}

最后,还要为用户IAM角色添加如上所示的信任关系


如果您可以连接到sftp,但在尝试列出内容时(例如使用命令“ls”)出现readdir错误,则表明您没有bucket权限。如果您的连接立即关闭,则可能是信任关系问题或KMS问题。

我们在与用户进行AWS传输时遇到了类似的问题。对我们有效的解决方案是制定两种不同的政策

  • 附加到角色的策略,该角色对整个bucket具有一般权限
  • 要应用于使用传输服务变量(如
    {transfer:UserName}
    )的用户的范围缩小策略
我们得出结论,可能只有额外附加的策略才能解析传输服务变量。我们不确定这是否正确,这是否是最好的解决方案,因为在允许附加范围缩减策略以创建一种“管理员”用户时,这会带来可能的风险。因此,我很高兴能得到一些信息,进一步锁定这一点

以下是查看转账用户详细信息时在我的控制台中的外观:

以下是我们使用的两种策略:
附加到IAM角色的一般策略

要应用于传输用户的范围缩小策略


无法评论,如果我的帖子不正确,很抱歉

小心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
访问目录——同样,他们没有读/写权限,但这仍然是不必要的访问。我可能在我的政策中遗漏了一些可以防止这种情况发生的东西


适当的
监禁
似乎是一个积压工作的主题:

根据有点神秘的文档@limfinity是正确的。要缩小访问范围,您需要一个授予访问权限的常规角色/策略组合来查看bucket。此角色将应用于您创建的SFTP用户。此外,您还需要一个自定义策略,该策略只向用户的存储桶授予CRUD权限。自定义策略也应用于SFTP用户

从本文件第24页

要创建范围缩小策略,请在应用程序中使用以下策略变量
{
            "Sid": "AWSTransferRequirements",
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:GetBucketLocation"
            ],
            "Resource": "*"
        },
{
            "Sid": "AWSTransferRequirements",
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:GetBucketLocation"
            ],
            "Resource": "${transfer:HomeBucket}"
        },
• ${transfer:HomeBucket}
• ${transfer:HomeDirectory}
• ${transfer:HomeFolder}
• ${transfer:UserName}