Подтвердить что ты не робот

Вход в домен Windows на контейнере Linux

Моя компания исключительно использует машины Windows, и когда я вхожу в домен для Windows, она дает мне доступ к некоторым общим дискам и базам данных. Теперь я хотел бы запустить R в контейнере, например, следующий учебник https://ropenscilabs.github.io/r-docker-tutorial/02-Launching-Docker.html

Мой вопрос заключается в следующем: существует ли способ, которым мои R-скрипты, выполненные в этом контейнере, наследуются от разрешений ОС хоста? Кажется особенно сложным для доступа к базам данных MSSQL, использующим проверку подлинности Windows.....

4b9b3361

Ответ 1

RockScience,

Здесь я вижу два варианта, они оба позволяют наследовать разрешения, а не передавать учетные данные пользователя и пароля. Чтобы решить свой конкретный вопрос, в Linux взгляните на:

Если вы используете подход к работе с контейнерами Windows, просмотрите учетные записи Active Directory gMSA (учетные записи управляемых учетными данными) и следующий MSDN статьи и видео:

это позволит вам создать контейнер Windows и среду R.


Аутентификация Active Directory с SQL Server в Linux

В учебном пособии объясняется, как настроить SQL Server в Linux на поддержку аутентификации Active Directory (AD), также известную как встроенная проверка подлинности. Аутентификация AD позволяет клиентам, подключенным к домену, в Windows или Linux аутентифицироваться на SQL Server, используя их учетные данные домена и протокол Kerberos.

Аутентификация AD имеет следующие преимущества перед аутентификацией SQL Server:

  • Аутентификация пользователей с помощью единого входа без запроса пароля.
  • Создавая логины для групп AD, вы можете управлять доступом и разрешениями в SQL Server, используя членство в группах AD.
  • Каждый пользователь имеет единую идентификационную информацию в вашей организации, поэтому вам не нужно отслеживать, какие учетные записи SQL Server соответствуют тем пользователям.
  • AD позволяет вам применять политику централизованного пароля в организации.

Учебник состоит из следующих задач:

  • Присоединить хост SQL Server к домену AD
  • Создайте пользователя AD для SQL Server и установите SPN
  • Настройка ключевого слова службы SQL Server
  • Создание логических узлов на основе AD в Transact-SQL
  • Подключение к SQL Server с использованием AD Authentication

Аккаунты службы каталогов Active Directory для контейнеров Windows

Сегодня группы Managed Service Accounts часто используются для защиты соединений между одним компьютером или сервисом с другим. Общие шаги по его использованию:

  • Создайте gMSA
  • Настроить службу для запуска в качестве gMSA
  • Дайте хосту, подключенному к домену, доступ к сервису к секретам gMSA в Active Directory
  • Разрешить доступ к gMSA для другой службы, такой как база данных или файл Акции

Когда служба запускается, хост, подключенный к домену, автоматически получает секреты gMSA из Active Directory и запускает службу с использованием этой учетной записи. Поскольку эта служба работает как gMSA, она может обращаться к любым ресурсам, доступным для gMSA.

  • Контейнеры Windows следуют аналогичному процессу:
  • Создайте gMSA. По умолчанию администратор домена или оператор учетной записи должны это сделать. В противном случае они могут делегировать привилегии для создания и управления gMSAs для администраторов, которые управляют службами, которые их используют. См. GMSA Начало работы
  • Предоставьте доступ к хосту контейнера, подключенного к домену, к gMSA
  • Разрешить доступ к gMSA для другой службы, такой как база данных или файл Акции
  • Используйте модуль CredentialSpec PowerShell из windows-server-container-tools для хранения настроек, необходимых для использования gMSA
  • Запустите контейнер с дополнительной опцией --security-opt "credentialspec=..."

Когда контейнер запущен, установленные службы, работающие как локальная система или сетевая служба, будут работать как gMSA. Это похоже на то, как эти учетные записи работают на узлах, подключенных к домену, за исключением использования gMSA вместо учетной записи компьютера.

Пример использования

Строки подключения SQL

Когда служба работает как локальная система или сетевая служба в контейнере, она может использовать встроенную проверку подлинности Windows для подключения к Microsoft SQL Server.

Пример:

Копировать

Server=sql.contoso.com;Database=MusicStore;Integrated Security=True;MultipleActiveResultSets=True;Connect Timeout=30

На Microsoft SQL Server создайте логин, используя имя домена и gMSA, за которым следует $. После создания логина его можно добавить к пользователю в базе данных и предоставить соответствующие разрешения доступа.

Пример:

SQL

Копировать

CREATE LOGIN "DEMO\WebApplication1$"
    FROM WINDOWS
    WITH DEFAULT_DATABASE = "MusicStore"
GO

USE MusicStore
GO
CREATE USER WebApplication1 FOR LOGIN "DEMO\WebApplication1$"
GO

EXEC sp_addrolemember 'db_datareader', 'WebApplication1'
EXEC sp_addrolemember 'db_datawriter', 'WebApplication1'

Чтобы увидеть его в действии, ознакомьтесь с записанной демонстрацией, доступной от Microsoft Ignite 2016 в сеансе " Проложить путь к контейнеризации - преобразование рабочих нагрузок в контейнеры".

Ответ 2

Поскольку @Technophobe01 показал, что контейнер Windows будет более естественным для наследования разрешений AD.

Что касается получения R script, подключенного к вашим общим ресурсам файлов и баз данных MS SQL, я бы рекомендовал следующее

Соединение MS SQL

Подключение к базам данных с использованием строк подключения в R script
Это обычный подход, а не наследование некоторых разрешений. См. Соединение RODBC SQL Server

library(RODBC)
conn <- odbcDriverConnect('driver={SQL Server};server=mysqlhost;database=mydbname;uid=user;pwd=pwd')

Вы можете указать любые чувствительные поля, используя ENV vars, во время развертывания или секреты докеров и загрузить их в R script.

Общие сведения о файлах

См. https://blogs.msdn.microsoft.com/stevelasker/2016/06/14/configuring-docker-for-windows-volumes/
1. Настройте сетевые диски на ваш Windows-докер-сервер
2. Укажите их как доступные контейнерам в настройках докеров, вам нужно будет добавить новую учетную запись пользователя с правами администратора.
3. Предполагая, что сетевой диск отображается на d:
 docker run -v d:/somedata:/data <container> ls /dataбудет монтировать диск в контейнере в /data и перечислить его содержимое.