В глобальном масштабе многие организации имеют критически важные бизнес-данные, рассредоточенные по разным репозиториям контента, что затрудняет доступ к этой информации упорядоченным и связным образом. Создание унифицированного и безопасного поиска — серьезная задача для организаций, поскольку каждое хранилище содержит широкий спектр форматов документов и механизмов управления доступом.
Амазон Кендра — это интеллектуальная служба корпоративного поиска, которая позволяет пользователям выполнять поиск в различных репозиториях контента. Клиенты несут ответственность за аутентификацию и авторизацию пользователей для получения доступа к своему поисковому приложению, а Amazon Kendra обеспечивает безопасный поиск для корпоративных приложений, гарантируя, что результаты поискового запроса пользователя включают только те документы, чтение которых разрешено пользователю. Amazon Kendra может легко проверять личность отдельных пользователей, а также групп пользователей, выполняющих поиск, с добавлением токенов безопасного поиска. Добавление пользовательских токенов для безопасного поиска упрощает и обеспечивает безопасность выполнения поиска с фильтрацией на основе доступа в Amazon Kendra. Вы можете безопасно передавать информацию о доступе пользователя в полезной нагрузке запроса вместо использования для этого фильтров атрибутов. С помощью этой функции Amazon Kendra может проверять информацию о токене и автоматически применять ее к результатам поиска для точной и безопасной фильтрации на основе доступа.
Amazon Kendra поддерживает управление доступом пользователей на основе токенов с использованием следующих типов токенов:
- Открытый идентификатор
- JWT с общим секретом
- JWT с открытым ключом
- JSON
Ранее мы видели демонстрацию управление доступом пользователей на основе токенов в Amazon Kendra с Open ID. В этом посте мы демонстрируем управление доступом пользователей на основе токенов в Amazon Kendra с помощью JWT с общим секретом. JWT или JSON Web Token — это открытый стандарт, используемый для обмена информацией о безопасности между клиентом и сервером. Он содержит закодированные объекты JSON, включая набор утверждений. JWT подписываются с использованием криптографического алгоритма, чтобы гарантировать, что утверждения не могут быть изменены после выпуска токена. JWT полезны в сценариях, касающихся авторизации и обмена информацией.
JWT состоят из трех частей, разделенных точками (.):
- заголовок – Он содержит такие части, как тип токена (JWT), используемый алгоритм подписи, например HMAC SHA256 или RSA, и необязательный идентификатор ключа.
- полезная нагрузка – содержит несколько пар ключ-значение, называемых требования, которые выдаются поставщиком удостоверений. В дополнение к нескольким утверждениям, связанным с выпуском и истечением срока действия токена, токен также может содержать информацию об отдельном принципале и арендаторе.
- Подпись – Чтобы создать часть подписи, вы берете закодированный заголовок, закодированную полезную нагрузку, секрет, алгоритм, указанный в заголовке, и подписываете это.
Таким образом, JWT выглядит следующим образом:
Ниже приведен пример заголовка:
Ниже приведен пример полезной нагрузки:
JWT создается с секретным ключом, и этот секретный ключ является для вас личным, а это означает, что вы никогда не будете раскрывать его публике или внедрять его внутрь JWT. Когда вы получаете JWT от клиента, вы можете проверить JWT с помощью секретного ключа, хранящегося на сервере. Любая модификация JWT приведет к сбою проверки (валидации JWT).
В этом посте демонстрируется пример использования JWT с общим ключом доступа и его использование для защиты индексов Amazon Kendra с элементами управления доступом. В рабочей среде вы используете поставщика услуг безопасной проверки подлинности по своему выбору и в соответствии с вашими требованиями для создания JWT.
Чтобы узнать больше о JWT, см. Введение в веб-токены JSON.
Обзор решения
Как и в случае после с Open ID это решение предназначено для набора пользователей и групп, чтобы выполнять поисковые запросы к репозиторию документов, и результаты возвращаются только из тех документов, доступ к которым разрешен в рамках этой группы. В следующей таблице указано, к каким документам каждый пользователь имеет право доступа для нашего варианта использования. Документы, используемые в этом примере, являются подмножеством общедоступных документов AWS.
Информация о пользователе | группы | Тип документа, разрешенный для доступа |
GUEST | . | Блог |
Патрисия | Клиент | Блоги, руководства пользователя |
Джеймс | Продажа | Блоги, руководства пользователя, тематические исследования |
John | Маркетинг | Блоги, руководства пользователя, тематические исследования, аналитические отчеты |
Мария | Архитектор решений | Блоги, руководства пользователя, тематические исследования, аналитические отчеты, технические документы |
На следующей диаграмме показано создание JWT с общим ключом доступа для управления доступом пользователей к определенным документам в индексе Amazon Kendra.
Когда индекс Amazon Kendra получает вызов API-запроса с токеном доступа пользователя, он проверяет токен с помощью общего секретного ключа (надежно хранящегося в Менеджер секретов AWS) и получает в полезной нагрузке такие параметры, как имя пользователя и группы. Индекс Amazon Kendra фильтрует результаты поиска на основе сохраненного списка управления доступом (ACL) и информации, полученной в JWT пользователя. Эти отфильтрованные результаты возвращаются в ответ на вызов API запроса, сделанный приложением.
Предпосылки
Чтобы выполнить шаги, описанные в этом посте, убедитесь, что у вас есть следующее:
Создайте JWT с общим секретным ключом
В следующем примере кода Java показано, как создать JWT с общим секретным ключом, используя открытый исходный код. jsonwebтокен упаковка. В рабочей среде вы будете использовать поставщика услуг безопасной аутентификации по вашему выбору и исходя из ваших требований для создания JWT.
Мы передаем информацию об имени пользователя и группах в качестве утверждений в полезной нагрузке, подписываем JWT с помощью общего секрета и генерируем JWT, специфичный для этого пользователя. Укажите 256-битную строку в качестве секрета и сохраните значение общего секрета URL-адреса в кодировке base64 для использования на более позднем этапе.
Создайте индекс Amazon Kendra с общим секретом JWT.
Инструкции по созданию индекса Amazon Kendra см. Создание индекса. Запишите Управление идентификацией и доступом AWS (IAM), которую вы создали в процессе. Предоставьте роли доступ к корзине S3 и диспетчеру секретов после принцип наименьших привилегий. Например, политики см. Пример политик на основе удостоверений IAM. После создания индекса ваша консоль Amazon Kendra должна выглядеть так, как показано на следующем снимке экрана.
Выполните следующие шаги, чтобы добавить свой секрет:
- На консоли Amazon Kendra перейдите к Контроль доступа пользователей на странице сведений об индексе.
- Выберите Изменить настройки.
- Поскольку мы реализуем управление доступом на основе токенов, выберите Да под Настройки контроля доступа.
- Под Конфигурация токена, выберите JWT с общим секретом для Тип токена.
- Что касается Тип секрета, выберите Новые.
- Что касается Секретное имя, войти
AmazonKendra-jwt-shared-secret
или любое имя по вашему выбору. - Что касается Идентификатор ключа, введите идентификатор ключа, соответствующий вашему JWT, который вы создали в образце кода Java.
- Что касается Алгоритм, выберите алгоритм HS256.
- Что касается Общий секрет, введите сохраненный секрет URL-адреса в кодировке base64, созданный ранее из кода Java.
- Выберите Сохранить секрет.
Секрет теперь будет храниться в диспетчере секретов в виде набора веб-ключей JSON (JWKS). Вы можете найти его в консоли Secrets Manager. Для получения более подробной информации см. Использование веб-токена JSON (JWT) с общим секретом.
- Развернуть Расширенная конфигурация .
На этом шаге мы настраиваем имя пользователя и группы, которые будут извлекаться из утверждений JWT и сопоставляться с ACL, когда подпись действительна.
- Что касается Имя пользователявведите имя пользователя.
- Что касается Группы, введите группы.
- Оставьте необязательные поля по умолчанию.
- Выберите Следующая, а затем выберите Обновление ПО.
Подготовьте корзину S3 в качестве источника данных
Чтобы подготовить корзину S3 в качестве источника данных, создайте корзину S3. В терминале с Интерфейс командной строки AWS (AWS CLI) или Облачная оболочка AWS, выполните следующие команды, чтобы загрузить документы и метаданные в корзину источника данных:
Запрашиваемые документы хранятся в корзине S3. Каждый тип документов имеет отдельную папку: блоги, тематические исследования, аналитические отчеты, руководства пользователя и технические документы. Эта структура папок содержится в папке с именем Data. Файлы метаданных, включая списки управления доступом, находятся в папке с именем Meta.
Мы используем коннектор Amazon Kendra S3, чтобы настроить эту корзину S3 в качестве источника данных. Когда источник данных синхронизируется с индексом Amazon Kendra, он сканирует и индексирует все документы, а также собирает списки управления доступом и атрибуты документов из файлов метаданных. Чтобы узнать больше о ACL с использованием файлов метаданных, см. Метаданные документа Amazon S3. В этом примере мы используем пользовательский атрибут DocumentType
для обозначения типа документа. После загрузки структура корзины S3 должна выглядеть так, как показано на следующем снимке экрана.
Чтобы установить пользовательский атрибут DocumentType
выполните следующие шаги:
- Выберите свой индекс Kendra и выберите Определение фасета в навигационной панели.
- Выберите Добавить поле.
- Что касается имя поля, войти
DocumentType
. - Что касается Тип данных, выберите строка.
- Выберите Добавить.
Теперь вы можете загрузить документы из созданной вами корзины в индекс Amazon Kendra с помощью коннектора S3. Полные инструкции см. Загрузка документов через Amazon Kendra S3 Connector.
- В Настройте параметры синхронизации раздел, для Введите местоположение источника данных, введите свой сегмент S3 (
s3://kendra-demo-bucket/
). - Что касается Расположение папки префикса файлов метаданных, войти
Meta/
. - Расширьте Дополнительная конфигурация.
- На Включить шаблоны вкладка, для Префикс, войти
Data/
.
Дополнительные сведения о поддерживаемых соединителях см. Соединители.
- Выберите Следующая, то Следующая снова, тогда Обновление ПО.
- Дождитесь создания источника данных, затем выберите источник данных и выберите Синхронизировать сейчас.
Синхронизация источника данных может занять 10–15 минут. Когда синхронизация будет завершена, Последний статус синхронизации должен отображаться как Успешные.
Запрос к индексу Amazon Kendra
Чтобы выполнить тестовый запрос для вашего индекса, выполните следующие шаги:
- На консоли Amazon Kendra выберите Поиск по проиндексированному контенту в навигационной панели.
- Расширьте Тестовый запрос с токеном доступа.
- Выберите Применить токен.
- Мы можем сгенерировать JWT для пользователя и группы. В этом примере мы создаем JWT для
AWS-SA
группа. Мы заменяем имя пользователя как Мэри и группы какAWS-SA
на этапе генерации JWT. - Введите сгенерированный токен и выберите Применить.
На основе ACL у нас должны быть результаты из всех папок: блоги, руководства пользователя, тематические исследования, аналитические отчеты и технические документы.
Точно так же при входе в систему как Джеймс из AWS-Sales
group и сдав соответствующий JWT, нам доступны только блоги, руководства пользователя и кейсы.
Мы также можем выполнять поиск в индексе как гость, не передавая токен. Гость может получить доступ только к содержимому папки блогов.
Поэкспериментируйте с другими запросами, которые вы можете придумать, войдя в систему как разные пользователи и группы, и наблюдайте за результатами.
Убирать
Чтобы избежать будущих затрат, очистите ресурсы, созданные вами в рамках этого решения. Чтобы удалить индекс Amazon Kendra и корзину S3, созданные при тестировании решения, см. уборка. Чтобы удалить секрет диспетчера секретов, см. Удаление секрета AWS Secrets Manager.
Заключение
В этом посте мы увидели, как Amazon Kendra может выполнять безопасный поиск, который возвращает результаты поиска только на основе доступа пользователя. С добавлением JWT с общим секретным ключом мы можем легко проверять личность отдельных пользователей, а также групп пользователей, выполняющих поиск. Подобный подход можно распространить на JWT с открытым ключом. Чтобы узнать больше, см. Использование веб-токена JSON (JWT) с общим секретом.
Об авторах
Нитин Евсевий является старшим архитектором корпоративных решений в AWS с более чем 18-летним опытом работы в области разработки программного обеспечения и корпоративной архитектуры. Он работает с клиентами, помогая им создавать приложения с хорошей архитектурой на платформе AWS. Он увлечен решением технологических задач и помогает клиентам в их переходе к облачным технологиям.
Крути Джаясимха Рао является архитектором партнерских решений, специализирующимся на искусственном интеллекте и машинном обучении. Она дает партнерам AWS технические рекомендации по использованию передовых методов создания безопасных, отказоустойчивых и высокодоступных решений в облаке AWS.
Ишаан Берри — инженер-программист в Amazon Web Services, работающий над корпоративной поисковой системой Amazon Kendra. Он увлечен безопасностью и работал над ключевыми компонентами функций контроля доступа Kendra в течение последних 2 лет.
Акаш Бхатия является главным архитектором решений в AWS. В настоящее время он занимается оказанием помощи корпоративным клиентам в достижении их бизнес-результатов за счет разработки и внедрения инновационных и отказоустойчивых решений в масштабе. Он более 15 лет работает в области технологий в компаниях, входящих в список Fortune 100, и стартапах в сфере производства, аэрокосмической отрасли и розничной торговли.
- SEO-контент и PR-распределение. Получите усиление сегодня.
- Платоблокчейн. Интеллект метавселенной Web3. Расширение знаний. Доступ здесь.
- Чеканка будущего с Эдриенн Эшли. Доступ здесь.
- Источник: https://aws.amazon.com/blogs/machine-learning/secure-your-amazon-kendra-indexes-with-the-acl-using-a-jwt-shared-secret-key/
- :является
- $UP
- 10
- 100
- 11
- 15 лет
- 420
- 7
- 8
- 9
- a
- в состоянии
- О нас
- доступ
- выполнять
- точный
- Достигать
- через
- дополнение
- Аэрокосмическая индустрия
- После
- AI
- алгоритм
- Все
- позволяет
- Amazon
- Амазон Кендра
- Amazon Web Services
- среди
- аналитик
- и
- API
- Применение
- Приложения
- Применить
- подхода
- архитектура
- МЫ
- AS
- At
- Атрибуты
- Аутентификация
- разрешение
- автоматически
- доступен
- AWS
- основанный
- BE
- , так как:
- не являетесь
- ЛУЧШЕЕ
- лучшие практики
- между
- Немного
- блоги
- строить
- бизнес
- by
- призывают
- под названием
- CAN
- случаев
- Сферы деятельности
- вызов
- проблемы
- выбор
- Выберите
- требования
- класс
- клиент
- облако
- код
- Компании
- полный
- компоненты
- Конфигурация
- Консоли
- содержать
- содержит
- содержание
- содержание
- контроль
- контрольная
- соответствующий
- Расходы
- Создайте
- создали
- Создающий
- создание
- критической
- крипто-
- криптографический
- Текущий
- изготовленный на заказ
- Клиенты
- данным
- Время
- По умолчанию
- демонстрировать
- демонстрирует
- предназначенный
- подробность
- подробнее
- различный
- трудный
- рассеянный
- документ
- Документация
- вниз
- в течение
- каждый
- легко
- позволяет
- Двигатель
- инженер
- Проект и
- обеспечивать
- Enter
- Предприятие
- пример
- обмена
- опыт
- Ошибка
- Особенность
- Особенности
- Поля
- Файлы
- фильтрация
- фильтры
- Фокус
- следовать
- после
- Что касается
- Fortune
- от
- полный
- будущее
- Gain
- порождать
- генерируется
- поколение
- группы
- Группы
- GUEST
- руководство
- Гиды
- Есть
- Заголовки
- помощь
- очень
- Как
- How To
- HTML
- HTTP
- HTTPS
- ID
- идентификатор
- Личность
- Осуществляющий
- Импортировать
- in
- включают
- В том числе
- индекс
- Индексы
- individual
- информация
- инновационный
- мгновение
- вместо
- инструкции
- Умный
- МКС
- выдача
- Выпущен
- IT
- ЕГО
- Java
- John
- путешествие
- JSON
- JWT
- Основные
- ключи
- Дитя
- УЧИТЬСЯ
- такое как
- линия
- Список
- посмотреть
- выглядит как
- ВЗГЛЯДЫ
- сделанный
- сделать
- Создание
- менеджер
- способ
- производство
- многих
- Совпадение
- соответствует
- означает
- Мета
- Метаданные
- Минут
- ML
- БОЛЕЕ
- имя
- Названный
- Откройте
- Навигация
- Новые
- объекты
- наблюдать
- of
- on
- открытый
- с открытым исходным кодом
- заказ
- организации
- Другое
- контуры
- пакет
- страница
- пар
- хлеб
- параметры
- часть
- партнер
- партнеры
- части
- pass
- Прохождение
- страстный
- мимо
- Выполнять
- выполнения
- Платформа
- Платон
- Платон Интеллектуальные данные
- ПлатонДанные
- сборах
- После
- практиками
- Подготовить
- предварительно
- Основной
- частная
- процесс
- Производство
- обеспечивать
- Недвижимости
- приводит
- что такое варган?
- Запросы
- ассортимент
- ранжирование
- Читать
- Получать
- получила
- получает
- по
- замещать
- Отчеты
- хранилище
- Требования
- упругий
- Полезные ресурсы
- ответ
- ответственный
- результат
- Итоги
- розничный
- сохранять
- возвращают
- показывать
- Роли
- RSA
- Run
- Шкала
- Сценарии
- Поиск
- Поисковая система
- Secret
- Раздел
- безопасный
- обеспеченный
- безопасно
- безопасность
- отдельный
- обслуживание
- Провайдер услуг
- Услуги
- набор
- несколько
- SHA256
- Поделиться
- общие
- должен
- показывать
- Шоу
- подпись
- подписанный
- значительный
- подписание
- аналогичный
- упрощенный
- Software
- Инженер-программист
- разработка программного обеспечения
- Решение
- Решения
- Решение
- Источник
- конкретный
- указанный
- стандарт
- стартапов
- Шаг
- Шаги
- хранить
- обтекаемый
- строка
- Структура
- исследования
- такие
- Поддержанный
- Поддержка
- система
- ТАБЛИЦЫ
- взять
- Технический
- Технологии
- арендатор
- Терминал
- тестXNUMX
- Тестирование
- который
- Ассоциация
- информация
- их
- Их
- Эти
- три
- Через
- время
- в
- знак
- Лексемы
- Типы
- унифицированный
- URL
- Применение
- использование
- прецедент
- Информация о пользователе
- пользователей
- VALIDATE
- Проверка
- ценностное
- различный
- проверка
- проверить
- вертикалей
- Web
- веб-сервисы
- ЧТО Ж
- который
- в то время как
- Статьи
- КТО
- широкий
- Широкий диапазон
- будете
- в
- без
- работавший
- работает
- работает
- Семинары
- лет
- Ты
- ВАШЕ
- зефирнет
- ZIP