У всьому світі багато організацій мають важливі бізнес-дані, розподілені між різними сховищами вмісту, що ускладнює доступ до цієї інформації в спрощений і згуртований спосіб. Створення уніфікованого та безпечного пошуку є серйозним викликом для організацій, оскільки кожне сховище містить широкий спектр форматів документів і механізмів контролю доступу.
Амазонка Кендра це інтелектуальна корпоративна пошукова служба, яка дозволяє користувачам здійснювати пошук у різних сховищах вмісту. Клієнти несуть відповідальність за автентифікацію та авторизацію користувачів для отримання доступу до своїх пошукових програм, а 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 складаються з трьох частин, розділених крапками (.):
- Header – Він містить такі частини, як тип маркера, яким є JWT, використовуваний алгоритм підпису, наприклад HMAC SHA256 або RSA, і додатковий ідентифікатор ключа.
- корисне навантаження – Містить кілька пар ключ-значення, які називаються претензій, які видаються постачальником посвідчень. На додаток до кількох претензій, що стосуються випуску та закінчення терміну дії токена, токен також може містити інформацію про окремого принципала та орендаря.
- Підпис – Щоб створити частину підпису, ви берете закодований заголовок, закодовану корисну інформацію, секрет, алгоритм, указаний у заголовку, і підписуєте це.
Таким чином, JWT виглядає так:
Нижче наведено приклад заголовка:
Нижче наведено приклад корисного навантаження:
JWT створюється за допомогою секретного ключа, і цей секретний ключ є приватним для вас, що означає, що ви ніколи не розкриєте його для громадськості чи не введете його всередину JWT. Коли ви отримуєте JWT від клієнта, ви можете перевірити JWT за допомогою секретного ключа, який зберігається на сервері. Будь-яка модифікація JWT призведе до помилки верифікації (перевірки JWT).
Ця публікація демонструє зразок використання JWT із використанням спільного ключа доступу та його використання для захисту індексів Amazon Kendra за допомогою засобів контролю доступу. У виробництві ви використовуєте безпечного постачальника послуг автентифікації за вашим вибором і на основі ваших вимог для створення JWT.
Щоб дізнатися більше про JWT, див Вступ до веб-токенів JSON.
Огляд рішення
Як після з Open ID, це рішення розроблено для набору користувачів і груп, які надсилають пошукові запити до сховища документів, і результати повертаються лише з тих документів, які авторизовано для доступу в межах цієї групи. У наведеній нижче таблиці вказано, до яких документів кожен користувач має право доступу для нашого випадку використання. Документи, які використовуються в цьому прикладі, є підмножиною відкритих документів AWS.
користувач | Group | Тип документа, дозволений для доступу |
гість | . | блоги |
Патриція | Клієнт | Блоги, посібники користувача |
James | Sales | Блоги, посібники користувача, тематичні дослідження |
Джон | Маркетинг | Блоги, посібники користувача, тематичні дослідження, звіти аналітиків |
Марія | Рішення архітектор | Блоги, посібники користувача, тематичні дослідження, звіти аналітиків, технічні документи |
На наступній діаграмі показано створення JWT із спільним ключем доступу для керування доступом користувачів до певних документів в індексі Amazon Kendra.
Коли індекс Amazon Kendra отримує виклик API-запиту з маркером доступу користувача, він перевіряє маркер за допомогою спільного секретного ключа (зберігається в Менеджер секретів AWS) і отримує такі параметри, як ім’я користувача та групи в корисному навантаженні. Індекс Amazon Kendra фільтрує результати пошуку на основі збереженого списку контролю доступу (ACL) та інформації, отриманої в JWT користувача. Ці відфільтровані результати повертаються у відповідь на виклик API запиту, зроблений програмою.
Передумови
Щоб виконати кроки, наведені в цій публікації, переконайтеся, що у вас є:
Створіть JWT із спільним секретним ключем
У наведеному нижче прикладі коду Java показано, як створити JWT із спільним секретним ключем за допомогою відкритого коду jsonwebtoken пакет. У виробництві ви будете використовувати безпечного постачальника послуг автентифікації за вашим вибором і на основі ваших вимог для створення JWT.
Ми передаємо ім’я користувача та інформацію про групи як претензії в корисному навантаженні, підписуємо JWT спільним секретом і генеруємо JWT, специфічний для цього користувача. Надайте 256-бітний рядок як свій секрет і збережіть значення спільного секрету, закодованого в URL-адресі base64, щоб використовувати його на наступному кроці.
Створіть індекс Amazon Kendra із спільним секретом JWT
Інструкції щодо створення індексу Amazon Kendra див Створення індексу. Занотуйте Управління ідентифікацією та доступом AWS (IAM) роль, яку ви створили під час процесу. Надайте ролі доступ до відра S3 і диспетчера секретів, дотримуючись принцип найменшої привілеї. Наприклад, політики див Приклад політики на основі ідентифікації IAM. Після створення індексу ваша консоль Amazon Kendra має виглядати так, як показано на знімку екрана нижче.
Щоб додати свій секрет, виконайте наступні кроки:
- На консолі Amazon Kendra перейдіть до Контроль доступу користувачів на вашій сторінці індексу.
- Вибирати Змінити налаштування.
- Оскільки ми впроваджуємо контроль доступу на основі маркерів, виберіть Так при Налаштування контролю доступу.
- під Конфігурація токенавиберіть JWT зі спільним секретом та цінності Тип маркера.
- для Вид секретувиберіть Нові.
- для Секретна назва, введіть
AmazonKendra-jwt-shared-secret
або будь-яке ім'я на ваш вибір. - для ID ключа, введіть ідентифікатор ключа, який відповідає вашому JWT, який ви створили у прикладі коду Java.
- для Алгоритм, виберіть алгоритм HS256.
- для Спільний секрет, введіть збережений секретний код URL-адреси base64, згенерований раніше з коду Java.
- Вибирати Зберегти секрет.
Тепер секрет зберігатиметься в диспетчері секретів як набір веб-ключів JSON (JWKS). Ви можете знайти його на консолі диспетчера секретів. Для отримання додаткової інформації див Використання веб-токена JSON (JWT) із спільним секретом.
- Розгорнути Розширена конфігурація .
На цьому кроці ми встановлюємо ім’я користувача та групи, які буде витягнуто з претензій JWT і зіставлено з ACL, коли підпис дійсний.
- для ім'я користувача¸ введіть ім'я користувача.
- для груп, введіть групи.
- Залиште необов’язкові поля типовими.
- Вибирати МАЙБУТНІ, Потім виберіть Оновити.
Підготуйте сегмент S3 як джерело даних
Щоб підготувати відро S3 як джерело даних, створіть відро S3. У терміналі з Інтерфейс командного рядка AWS (AWS CLI) або AWS CloudShell, виконайте такі команди, щоб завантажити документи та метадані до сегмента джерела даних:
Документи, які запитуються, зберігаються у відрі S3. Кожен тип документа має окрему папку: блоги, кейси, аналітичні звіти, посібники користувача та технічні документи. Ця структура папок міститься в папці з назвою Дані. Файли метаданих, включаючи списки керування доступом, знаходяться в папці під назвою 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 хвилин. Після завершення синхронізації Статус останньої синхронізації має показати як Successful.
Зробіть запит до індексу Amazon Kendra
Щоб запустити тестовий запит до свого індексу, виконайте такі дії:
- На консолі Amazon Kendra виберіть Пошук індексованого вмісту у навігаційній панелі.
- Розширювати Тестовий запит із маркером доступу.
- Вибирати Застосувати маркер.
- Ми можемо створити JWT для користувача та групи. У цьому прикладі ми створюємо JWT для
AWS-SA
група. Ми замінюємо ім’я користувача на Mary, а групи – наAWS-SA
на етапі генерації JWT. - Введіть згенерований токен і виберіть Застосовувати.
На основі ACL ми повинні отримати результати з усіх папок: блоги, посібники користувача, тематичні дослідження, звіти аналітиків і технічні документи.
Так само, коли ви ввійшли як Джеймс із AWS-Sales
групи та проходження відповідного JWT, ми маємо доступ лише до блогів, посібників користувача та тематичних досліджень.
Ми також можемо здійснювати пошук в індексі як гість без передачі маркера. Гість може отримати доступ лише до вмісту папки блогів.
Експериментуйте з іншими запитами, які ви можете придумати, увійшовши в систему як різні користувачі та групи, і спостерігайте за результатами.
Прибирати
Щоб уникнути майбутніх витрат, очистіть ресурси, створені в рамках цього рішення. Щоб видалити індекс Amazon Kendra та сегмент S3, створений під час тестування рішення, див Прибирати. Щоб видалити секрет менеджера секретів, див Видалити секрет менеджера секретів AWS.
Висновок
У цій публікації ми побачили, як Amazon Kendra може виконувати безпечний пошук, який повертає лише результати пошуку на основі доступу користувача. Завдяки доданню JWT із спільним секретним ключем ми можемо легко перевірити особу окремих користувачів, а також груп користувачів, які здійснюють пошук. Цей подібний підхід можна поширити на a JWT з відкритим ключем. Щоб дізнатися більше, зверніться до Використання веб-токена JSON (JWT) із спільним секретом.
Про авторів
Нітін Євсевій є старшим архітектором корпоративних рішень в AWS із понад 18-річним досвідом у розробці програмного забезпечення та корпоративній архітектурі. Він працює з клієнтами, допомагаючи їм створювати добре архітектурні програми на платформі AWS. Він захоплений вирішенням технологічних проблем і допомогою клієнтам у їхній хмарній подорожі.
Круті Джаясімха Рао є архітектором партнерських рішень, який спеціалізується на штучному інтелекті та машинному обігу. Вона надає технічні рекомендації партнерам AWS щодо дотримання найкращих практик для створення безпечних, стійких і високодоступних рішень у хмарі AWS.
Ішан Беррі є інженером-програмістом Amazon Web Services, працює над Amazon Kendra, корпоративною пошуковою системою. Він захоплений безпекою і протягом останніх 2 років працював над ключовими компонентами функцій контролю доступу Kendra.
Акаш Бхатія є головним архітектором рішень в AWS. Зараз він зосереджується на тому, щоб допомогти корпоративним клієнтам досягти бізнес-результатів шляхом проектування та впровадження інноваційних та стійких рішень у великих масштабах. Він понад 15 років працює в галузі технологій у компаніях зі списку Fortune 100 до стартапів у промисловості, аерокосмічній промисловості та роздрібній торгівлі.
- Розповсюдження контенту та PR на основі SEO. Отримайте посилення сьогодні.
- Платоблокчейн. Web3 Metaverse Intelligence. Розширені знання. Доступ тут.
- Карбування майбутнього з Адріенн Ешлі. Доступ тут.
- джерело: 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
- Здатний
- МЕНЮ
- доступ
- виконувати
- точний
- Achieve
- через
- доповнення
- Авіаційно-космічний
- після
- AI
- алгоритм
- ВСІ
- дозволяє
- Amazon
- Амазонка Кендра
- Amazon Web Services
- серед
- аналітик
- та
- API
- додаток
- застосування
- Застосовувати
- підхід
- архітектура
- ЕСТЬ
- AS
- At
- Атрибути
- Authentication
- авторизації
- автоматично
- доступний
- AWS
- заснований
- BE
- оскільки
- буття
- КРАЩЕ
- передового досвіду
- між
- Біт
- блоги
- будувати
- бізнес
- by
- call
- званий
- CAN
- випадок
- Приклади з практики
- виклик
- проблеми
- вибір
- Вибирати
- претензій
- клас
- клієнт
- хмара
- код
- Компанії
- повний
- Компоненти
- конфігурація
- Консоль
- містити
- містить
- зміст
- зміст
- контроль
- управління
- Відповідний
- витрати
- створювати
- створений
- створення
- створення
- критичний
- крипто
- криптографічні
- Поточний
- виготовлений на замовлення
- Клієнти
- дані
- Дата
- дефолт
- демонструвати
- демонструє
- призначений
- деталь
- деталі
- різний
- важкий
- розійшлися
- документ
- документація
- вниз
- під час
- кожен
- легко
- дозволяє
- двигун
- інженер
- Машинобудування
- забезпечувати
- Що натомість? Створіть віртуальну версію себе у
- підприємство
- приклад
- обмін
- досвід
- Провал
- особливість
- риси
- Поля
- Файли
- фільтрація
- Фільтри
- Сфокусувати
- стежити
- після
- для
- стан
- від
- Повний
- майбутнє
- Отримувати
- породжувати
- генерується
- покоління
- Group
- Групи
- гість
- керівництво
- Гід
- Мати
- Заголовки
- допомогу
- дуже
- Як
- How To
- HTML
- HTTP
- HTTPS
- ID
- ідентифікатор
- Особистість
- реалізації
- імпорт
- in
- включати
- У тому числі
- індекс
- покажчики
- індивідуальний
- інформація
- інноваційний
- мить
- замість
- інструкції
- Розумний
- МКС
- видачі
- Випущений
- IT
- ЙОГО
- Java
- Джон
- подорож
- json
- Jwt
- ключ
- ключі
- дитина
- УЧИТЬСЯ
- як
- Лінія
- список
- подивитися
- виглядає як
- ВИГЛЯДИ
- made
- зробити
- Робить
- менеджер
- манера
- виробництво
- багато
- матч
- відповідає
- засоби
- Meta
- метадані
- хвилин
- ML
- більше
- ім'я
- Названий
- Переміщення
- навігація
- Нові
- об'єкти
- спостерігати
- of
- on
- відкрити
- з відкритим вихідним кодом
- порядок
- організації
- Інше
- контури
- пакет
- сторінка
- пар
- pane
- параметри
- частина
- партнер
- партнери
- частини
- проходити
- Проходження
- пристрасний
- Минуле
- Виконувати
- виконанні
- платформа
- plato
- Інформація про дані Платона
- PlatoData
- Політика
- пошта
- практики
- Готувати
- раніше
- Головний
- приватний
- процес
- Production
- забезпечувати
- Постачальник
- забезпечує
- громадськість
- запити
- діапазон
- ранжування
- Читати
- отримати
- отримано
- отримує
- про
- замінювати
- Звіти
- Сховище
- Вимога
- пружний
- ресурси
- відповідь
- відповідальний
- результат
- результати
- роздрібна торгівля
- зберігати
- повертати
- показувати
- Роль
- RSA
- прогін
- шкала
- сценарії
- Пошук
- Пошукова система
- секрет
- розділ
- безпечний
- Забезпечений
- безпечно
- безпеку
- окремий
- обслуговування
- Постачальник послуг
- Послуги
- комплект
- кілька
- SHA256
- Поділитись
- загальні
- Повинен
- Показувати
- Шоу
- підпис
- підписаний
- значний
- підписання
- аналогічний
- спрощений
- Софтвер
- Інженер-програміст
- розробка програмного забезпечення
- рішення
- Рішення
- Розв’язування
- Source
- конкретний
- зазначений
- standard
- стартапів
- Крок
- заходи
- зберігати
- обтічний
- рядок
- структура
- Дослідження
- такі
- Підтриманий
- Опори
- система
- таблиця
- Приймати
- технічний
- Технологія
- орендар
- термінал
- тест
- Тестування
- Що
- Команда
- інформація
- їх
- Їх
- Ці
- три
- через
- час
- до
- знак
- Жетони
- Типи
- єдиний
- URL
- Використання
- використання
- використання випадку
- користувач
- користувачі
- ПЕРЕВІР
- перевірка достовірності
- значення
- різний
- перевірка
- перевірити
- вертикалі
- Web
- веб-сервіси
- ДОБРЕ
- який
- в той час як
- Офіційні документи
- ВООЗ
- широкий
- Широкий діапазон
- волі
- з
- в
- без
- працював
- робочий
- працює
- Семінари
- років
- Ти
- вашу
- зефірнет
- Zip