Как безопасно хранить токен доступа Amazon для Amazon KMS

Я изучаю управляемую службу Amazon KMS, и она кажется безопасной для хранения главного ключа и ключа данных. Я могу расшифровать ключ данных как простой текст из зашифрованного ключа данных с помощью AWS KMS API / CLI.

Но у меня есть одна проблема: чтобы получить доступ к Amazon KMS для расшифровки ключа данных, мне нужно передать токен доступа и зашифрованный ключ данных.

Итак, где я могу безопасно хранить токен доступа Amazon и зашифрованный ключ данных?

Любые мысли приветствуются.

Спасибо,
Гарри


person Harry    schedule 31.01.2020    source источник
comment
Вы можете использовать диспетчер секретов для хранения токенов, а для добавления дополнительного уровня безопасности вы также можете зашифровать его с помощью KMS.   -  person Shivkumar Mallesappa    schedule 31.01.2020


Ответы (1)


Мне нужно передать токен доступа и зашифрованный ключ данных.

В самом деле, вам необходимо аутентифицировать и авторизовать клиента перед вызовом любого сервиса AWS.

Может быть, вы могли бы уточнить, что вы подразумеваете под токеном доступа Amazon. На самом деле вам нужно сохранить ключ доступа и секрет доступа и, возможно, (временный) токен сеанса для правильной авторизации службы. Я предполагаю, что под «токеном доступа Amazon» вы имеете в виду учетные данные клиента.

Где я могу безопасно хранить токен доступа Amazon и зашифрованный ключ данных?

Для ключа данных - зашифрованный ключ данных может храниться / отправляться вместе с данными (если вы генерируете новый ключ для каждого шифрования) или в виде конфигурации (если вы планируете повторно использовать ключ), которая уже надежно зашифрована.

Если ваш клиент (код, использующий KMS) работает в инфраструктуре AWS, вы можете использовать роли службы, чтобы разрешить доступ службы к службе KMS без явного сохранения учетных данных. Это стандартный (и лучший) способ, если клиент также работает на AWS.

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

person gusto2    schedule 03.02.2020
comment
Спасибо за обновление. Чтобы прояснить, у меня есть служба докеров, работающая в экземпляре AWS EC2. В настоящее время у меня есть зашифрованный ключ данных (полученный от AWS KMS) в приложении, а также ключ доступа и секрет доступа в файле. Я хотел бы знать, есть ли безопасный способ сохранить учетные данные AWS? - person Harry; 03.02.2020
comment
@Harry, если он работает на EC2, вы можете использовать роли службы, и вам вообще не нужно хранить какие-либо учетные данные. Однако - когда клиент работает на докере на базе EC2, вам необходимо proxy вызывает службу метаданных. (Служба метаданных - это конечная точка AWS, с помощью которой AWS SDK будет автоматически получать учетные данные роли службы при работе на EC2) Если вы хотите использовать учетные данные в своем файле конфигурации, лучшим вариантом является ограничение доступа к файлу конфигурации (разрешения, метки,. .) - person gusto2; 03.02.2020
comment
Спасибо, тогда какая польза от Access Secret Manager? - person Harry; 03.02.2020
comment
@Harry Secret Manager предназначен для хранения учетных данных и конфиденциальных конфигураций (для других служб, не относящихся к AWS). Чтобы получить доступ к секретному менеджеру, вам также необходимо иметь учетные данные aws или роли службы. - person gusto2; 03.02.2020
comment
Спасибо @ gusto2. Вы так ясно даете понять, что у меня есть ECS Fargate, где развернут мой контейнер, и я использовал AWS KMS для главного ключа и зашифрованного ключа данных. Смогу ли я получить доступ к AWS KMS из ECS Fargate (сервис AWS) с использованием роли, связанной с сервисом, без предоставления ключа доступа AWS и секретного ключа? - person Harry; 04.02.2020
comment
@Harry В самом деле, если вы разрешите доступ к KMS в Роль IAM для задачи, SDK сможет вызывать KMS без явных (предоставленных) учетных данных. Fargate может назначать роль службы непосредственно контейнерам. - person gusto2; 04.02.2020
comment
Я одобрил ваш ответ, спасибо. Итак, если я правильно понимаю, я могу сохранить зашифрованный ключ данных из AWS KMS в секретном менеджере Amazon (вместо того, чтобы хранить его в файле конфигурации), и для доступа к секретному менеджеру amazon мне нужна связанная с сервисом роль из AWS ECS. диспетчеру секретов AWS для получения ключа зашифрованных данных без учетных данных. Правильно ли это утверждение? - person Harry; 04.02.2020
comment
@Harry Если вы планируете использовать диспетчер секретов, вы можете сохранить ключ данных напрямую, вам не нужно снова шифровать его с помощью KMS (диспетчер секретов сделает это за вас под капотом). Однако - в целом ваш подход правильный - person gusto2; 04.02.2020
comment
Итак, какой подход является правильным - использовать только KMS для генерации главного ключа и ключа данных? Или использовать KMS для генерации мастер-ключа и ключа данных с хранением ключа данных в секретном менеджере? Или использовать только диспетчер секретов AWS для генерации главного ключа и ключа данных? - person Harry; 05.02.2020