Подключение к AWS Transfer для SFTP - PullRequest
0 голосов
/ 06 декабря 2018

У меня проблемы с подключением к AWS Transfer для SFTP .Я успешно настроил сервер и попытался подключиться с помощью 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» и сбой «readdir».Все это очень похоже на проблемы с моей политикой IAM, но я не смог понять это.

Ответы [ 4 ]

0 голосов
/ 08 апреля 2019

Согласно несколько загадочной документации, @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 Создание политики Scope-Down

• ${transfer:HomeBucket}
• ${transfer:HomeDirectory}
• ${transfer:HomeFolder}
• ${transfer:UserName}

Примечание. Перечисленные выше переменные нельзя использовать в качестве переменных политики в определении роли IAM.Вы создаете эти переменные в политике IAM и предоставляете их непосредственно при настройке вашего пользователя.Кроме того, вы не можете использовать переменную $ {aws: Username} в этой политике сокращения области действия.Эта переменная относится к имени пользователя IAM, а не к имени пользователя, необходимому для AWS SFTP.

0 голосов
/ 10 января 2019

У нас были аналогичные проблемы, приводившие к снижению политики при работе с нашими пользователями в AWS Transfer.Решение, которое работало для нас, заключалось в создании двух разных типов политик.

  • Политика для присоединения к роли , которая имеет общие права на весь сегмент.
  • Ограничить политику для применения к пользователю , который использует переменные службы передачи, такие как {transfer:UserName}.

Мы пришли к выводу, что, возможно, только дополнительная присоединенная политикаудалось разрешить переменные службы передачи .Мы не уверены, является ли это правильным и является ли это лучшим решением, потому что это открывает возможный риск, когда вы отказываетесь присоединить политику области действия, чтобы создать своего рода пользователя «администратора».Так что я был бы рад получить ввод, чтобы немного заблокировать это.

Вот как это выглядит в моей консоли при просмотре данных пользователя передачи: Transfer user detail view with extra policy attached

Вот две наши политики, которые мы используем:
Общая политика для присоединения к роли 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}*"
        }
    ]
}
0 голосов
/ 18 марта 2019

Не могу комментировать, извините, если я пишу неправильно.

Осторожнее с политикой 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=0

0 голосов
/ 06 декабря 2018

У меня была похожая проблема, но с другим поведением ошибки.Мне удалось успешно войти в систему, но затем соединение было почти сразу закрыто.Я сделал следующее:

  • Убедитесь, что роль IAM, которая разрешает доступ к корзине, также содержит доступ к KMS, если ваша корзина зашифрована.
  • Убедитесь, что доверительные отношения также являются частьюэтой роли.
  • Убедитесь, что у самого сервера есть роль Cloudwatch, также с доверительными отношениями для Transfer.amazonaws.com!Это было решением для меня.Я не понимаю, зачем это нужно, но без доверительных отношений в роли Cloudwatch мое соединение закрыто.

Надеюсь, это поможет.Изменить: Добавлено изображение для настроек роли CloudWatch: enter image description here

Политика хранения для роли пользователя 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.

...