Безопасное хранение учетных данных приложения по умолчанию в KMS - PullRequest
0 голосов
/ 29 мая 2020

У нас есть приложение Java, которое использует Google Auth для разрешения использования. Приложению необходимо подключиться к базе данных Google Cloud SQL, которая заблокирована за IP-ограничениями.

Нам нужно использовать Cloud SQL Socket Factory с Cloud SQL Proxy для получения доступа к базе данных, для этого требуются учетные данные приложения по умолчанию с переменной среды GOOGLE_APPLICATION_CREDENTIALS, указывающей на файл учетных данных учетной записи службы JSON. Я не уверен, как это безопасно хранить, размещение этого файла на P C пользователя явно небезопасно.

Согласно передовой практике https://cloud.google.com/docs/authentication/production, там написано

Вы можете использовать переменную среды, указывающую на учетные данные вне исходного кода приложения, например Cloud Key Management Service.

Но это не go объясните, как это сделать. Как я могу безопасно сохранить этот файл в KMS или иным образом таким образом, чтобы получить доступ только авторизованные учетные записи Google?

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Во-первых, прокси-сервер Cloud SQL и фабрика сокетов Cloud SQL JDB C - это две разные реализации одного и того же. Socket Factory используется изнутри вашего приложения, а прокси - это внешний процесс. Нет причин использовать и то, и другое одновременно.

Во-вторых, способ защиты вашего приложения во многом зависит от того, как вы планируете распространять и запускать его. Если это веб-приложение, вы, вероятно, создадите «учетную запись службы», которая представляет привилегии, которые вы хотите, чтобы ваше приложение было, а затем ограничиваете доступ к внешнему интерфейсу приложения, используя все, что работает (брандмауэр, oauth и т. Д. c ).

Если ваше приложение является чем-то локально распространяемым на платформе пользователя, то это немного сложнее и гораздо труднее защитить. Проблема в том, что любой, у кого есть доступ к вашему приложению, потенциально может получить доступ к вашей базе данных или другим ресурсам. Поскольку вы не можете использовать gcloud, вы можете либо повторно реализовать свой собственный уровень аутентификации (например, gcloud auth application-default login), который имеет логин пользователя и сгенерировал временный файл учетных данных, который можно использовать для подключения.

В качестве альтернативы вы включаете учетные данные в само приложение. Вы можете встроить их напрямую, но если они будут скомпрометированы, вам придется распространять приложение. Потенциально безопаснее было бы распространять файлы учетных данных отдельно и создавать разные файлы для каждого пользователя. Таким образом, если одна из них будет взломана, вам нужно будет только повернуть взломанную учетную запись.

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

0 голосов
/ 29 мая 2020

Вы правы: использование ключевого файла служебного аккаунта не является хорошей практикой и является нарушением безопасности (помимо безопасного хранения на компьютере, вы должны менять его каждые 90 дней, вы можете скопировать файл, отправить его по электронной почте и даже публично зафиксировать его в репозитории git !!)

Однако для использования облачного SQL прокси вы можете просто использовать свои собственные учетные данные. выполнить gcloud auth application-default login. Убедитесь, что ваш пользователь авторизован в базе данных, и все!

Примечание: не используйте параметр -credential при запуске облака sql прокси

...