Конечно!
Облачная платформа Google имеет надежные инструменты для управления доступом ко всем видам вещей, включая доступ к учетным данным API.
GCP IAM - облачные разрешения и доступ
Вы можете создать облачную службу для отправки ответа с вашим ключом, авторизуя только определенные службы для получения / запроса ключа.
Вот документация GCP IAM . Следуйте их инструкциям через консоль внешнего интерфейса или инструменты командной строки, чтобы установить политику для службы ключей API.
Вот суть того, что вы будете делать для IAM:
- авторизуйте различные API Google для вашего проекта
- создайте учетную запись службы, например,
my-api-key@see-the-docs-for-google-service-domain
- Для каждого из ваших приложений, которым требуется ключ службы, создайте другую учетную запись службы, например
my-app@see-the-docs-for...
- , предоставьте любой службе приложения учетные записи для выбранного вами уровня доступа / разрешения для учетной записи службы, которую вы создали для своей учетной записи. служба ключей API
- вы разрешаете каждому приложению доступ к службе API-ключей
- развертывание простой службы Flask для отправки ваш API-ключ с использованием учетной записи API-ключа
- доступ к учетным данным API в ваших приложениях, которым были предоставлены разрешения IAM
- Помните, что вы авторизовали свои приложения на шаге 4
На диске
Для учетных данных, хранящихся на диске, лучше всего шифровать / дешифровать их по требованию в приложении.
См. ТАК . Если вы зашифруете свои ключи, go впереди и добавьте контроль версий. В противном случае избегайте.
Secrets Manager или Berglas
Однако я рекомендую использовать либо инструмент с открытым исходным кодом Berglas , либо управляемый продукт Google Secrets . По сути, вы дадите диспетчеру секретов свой ключ API, сохраните его, а затем получите его, когда это необходимо, в приложении или при загрузке.
Адаптировано из Google Cloud Documentation, почти дословно :
# Import the Secret Manager client library.
from google.cloud import secretmanager_v1beta1 as sm
# GCP project in which to store secrets in Secret Manager.
project_id = 'YOUR_PROJECT_ID'
# ID of the secret to create.
secret_id = 'YOUR_SECRET_ID'
# Create the Secret Manager client.
client = sm.SecretManagerServiceClient()
# Build the parent name from the project.
parent = client.project_path(project_id)
# Create the parent secret
secret = client.create_secret(parent, secret_id, {
'replication': {
'automatic': {},
},
})
# Add the api key
version = client.add_secret_version(secret.name, {'data': b'my-google-api-credentials'})
# Access the api key
response = client.access_secret_version(version.name)
# Now you have your decoded api credentials you can use for authentication
payload = response.payload.data.decode('UTF-8')
Я изменил некоторые комментарии выше, но обязательно ознакомьтесь с документацией Google и их примерами github .
Если вы более предприимчивы, библиотека Berglas просто фантастическая c, и я использую ее непосредственно в нескольких проектах, через локальный клиент Go и образ docker в развернутых службах.