Amazon.Transfer.Model.InvalidRequestException: невозможно установить HomeDirectory для LOGICAL HomeDirectoryType - PullRequest
0 голосов
/ 09 июля 2020

Друзья,

У меня есть Dictionary<int, string>, который содержит список идентификаторов отделов и имена его папок s3. Например, { {key=1, value="dept-1"}, {key=2, value="dept-2"} } и c. Для каждой из этих папок s3 я хотел бы создать пользователя user-dept-group-{DepartmentId}, логически сопоставленного с его папкой сервера SFTP. Например, user-dept-group-1 будет иметь логическую папку dept-1, сопоставленную с my-s3-bucket/dept-1 на сервере aws sftp. Ниже приведен код, который я использовал, и я всегда получаю сообщение об ошибке Cannot set HomeDirectory for LOGICAL HomeDirectoryType.

Если я прокомментирую HomeDirectoryMappings и устанавливаю HomeDirectoryType на HomeDirectoryType.PATH, я вижу, как создается пользователь.

public async Task<List<CreateUserResponse>> SetupSftpUser(Dictionary<int, string> masterDeptFolders)
{
    var result = new List<CreateUserResponse>();
    var awsTransferClient = new AmazonTransferClient(AwsAccessKey, AwsSecretKey, RegionEndpoint.USEast1);
    foreach (var (key, folder) in masterDeptFolders)
    {
    var createUserRequest = new CreateUserRequest
    {
        HomeDirectory = $"/{ParentBucketName}/{folder}/",
        HomeDirectoryMappings = new List<HomeDirectoryMapEntry>{new HomeDirectoryMapEntry{Entry = $"/{folder}", Target = $"/{ParentBucketName}/{folder}" } },
        HomeDirectoryType = HomeDirectoryType.LOGICAL,
        // Policy = GetSftpPolicy(),
        Tags = GetTags(key, folder),
        ServerId = SftpServerId,
        UserName = $"user-dept-group-{key}",
        Role = SftpRole,
        //SshPublicKeyBody = "MY_DEPT_SSH.PUB_FILE"
    };

    var response = await awsTransferClient.CreateUserAsync(createUserRequest);
    if (response.HttpStatusCode == HttpStatusCode.OK)
    {
        result.Add(response);
    }
    }

    return result;
}

EDIT: Одна вещь, которую я заметил во всех примерах , - это имена папок корзины s3, которые упоминаются как <s3bucket>/home/username. Нужно ли мне иметь эту структуру папок, чтобы она работала?

1 Ответ

0 голосов
/ 17 июля 2020

Я обнаружил, что HomeDirectory не нужен, а значение Entry должно быть установлено на \. Ниже показано, как createUserRequest выглядит.

var createUserRequest = new CreateUserRequest
{
    HomeDirectoryMappings = new List<HomeDirectoryMapEntry>{new HomeDirectoryMapEntry{Entry = "/", Target = $"/{ParentBucketName}/{folder}" } },
    HomeDirectoryType = HomeDirectoryType.LOGICAL,
    // Policy = GetSftpPolicy(),
    Tags = GetTags(key, folder),
    ServerId = SftpServerId,
    UserName = $"user-dept-group-{key}",
    Role = SftpRole,
    //SshPublicKeyBody = "MY_DEPT_SSH.PUB_FILE"
};
...