Cassandra Astra 安全地部署到 heroku
Cassandra Astra securely deploying to heroku
我正在使用 python 和 Cassandra(Astra 提供商)开发应用程序并尝试将其部署到 Heroku 上。
问题是连接到数据库需要本地存在凭证 zip 文件 - https://docs.datastax.com/en/astra/aws/doc/dscloud/astra/dscloudConnectPythonDriver.html
'/path/to/secure-connect-database_name.zip'
Heroku 不支持上传凭据文件。
我可以将用户名和密码配置为环境变量,但无法将凭证 zip 文件配置为环境变量。
heroku config:set CASSANDRA_USERNAME=cassandra
heroku config:set CASSANDRA_PASSWORD=cassandra
heroku config:set CASSANDRA_KEYSPACE=mykeyspace
有什么方法可以将 zip 文件用作环境变量,我想提取所有文件并在 Heroku 中为每个文件配置一个环境变量。
但如果我开始使用从环境变量中提取的文件,我不确定要指定什么而不是 Cluster(cloud=cloud_config, auth_provider=auth_provider)?
我知道我可以在我的私有 git 存储库中检查凭据 zip,但检查凭据似乎不安全。
我想到的另一个想法是将其存储在 S3 中并在部署期间获取文件并将其解压缩到临时目录中以供使用。
非常感谢任何指点或帮助。
如果您可以将安全包签入回购协议,那么应该很容易 - 您只需要从云配置映射中指向它,并通过环境变量从配置的机密中获取 username/password:
from cassandra.cluster import Cluster
from cassandra.auth import PlainTextAuthProvider
import os
cloud_config = {
'secure_connect_bundle': '/path/to/secure-connect-dbname.zip'
}
auth_provider = PlainTextAuthProvider(
username=os.environ['CASSANDRA_USERNAME'],
password=os.environ['CASSANDRA_PASSWORD'])
cluster = Cluster(cloud=cloud_config, auth_provider=auth_provider)
session = cluster.connect()
关于将文件存储在 S3 上并下载的想法 - 也不错。您可以在脚本本身中实现它以获取文件,您也可以使用环境变量来传递 S3 凭据,这样文件就无法在存储库中访问,而且如果需要,交换安全包会更容易。
我正在使用 python 和 Cassandra(Astra 提供商)开发应用程序并尝试将其部署到 Heroku 上。
问题是连接到数据库需要本地存在凭证 zip 文件 - https://docs.datastax.com/en/astra/aws/doc/dscloud/astra/dscloudConnectPythonDriver.html '/path/to/secure-connect-database_name.zip' Heroku 不支持上传凭据文件。
我可以将用户名和密码配置为环境变量,但无法将凭证 zip 文件配置为环境变量。
heroku config:set CASSANDRA_USERNAME=cassandra
heroku config:set CASSANDRA_PASSWORD=cassandra
heroku config:set CASSANDRA_KEYSPACE=mykeyspace
有什么方法可以将 zip 文件用作环境变量,我想提取所有文件并在 Heroku 中为每个文件配置一个环境变量。
但如果我开始使用从环境变量中提取的文件,我不确定要指定什么而不是 Cluster(cloud=cloud_config, auth_provider=auth_provider)?
我知道我可以在我的私有 git 存储库中检查凭据 zip,但检查凭据似乎不安全。
我想到的另一个想法是将其存储在 S3 中并在部署期间获取文件并将其解压缩到临时目录中以供使用。
非常感谢任何指点或帮助。
如果您可以将安全包签入回购协议,那么应该很容易 - 您只需要从云配置映射中指向它,并通过环境变量从配置的机密中获取 username/password:
from cassandra.cluster import Cluster
from cassandra.auth import PlainTextAuthProvider
import os
cloud_config = {
'secure_connect_bundle': '/path/to/secure-connect-dbname.zip'
}
auth_provider = PlainTextAuthProvider(
username=os.environ['CASSANDRA_USERNAME'],
password=os.environ['CASSANDRA_PASSWORD'])
cluster = Cluster(cloud=cloud_config, auth_provider=auth_provider)
session = cluster.connect()
关于将文件存储在 S3 上并下载的想法 - 也不错。您可以在脚本本身中实现它以获取文件,您也可以使用环境变量来传递 S3 凭据,这样文件就无法在存储库中访问,而且如果需要,交换安全包会更容易。