在 Amazon S3 中存储连接字符串 - AWS Elastic Beanstalk
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

在 Amazon S3 中存储连接字符串

使用环境属性向应用程序提供连接信息是将密码置于代码外的好方法,但这不是完美解决方案。环境属性可在环境管理控制台中发现,并且可由有权在环境上描述配置设置的任何用户查看。根据平台,环境属性还可能显示在实例日志中。

您可以通过在控制的 Amazon S3 存储桶中存储连接信息来锁定该信息。基本步骤如下所示:

  • 将包含连接字符串的文件上传到 Amazon S3 存储桶。

  • 向 EC2 实例配置文件授予读取该文件的权限。

  • 将您的应用程序配置为在部署期间下载该文件。

  • 在应用程序代码中读取该文件。

首先,创建存储桶来存储包含连接字符串的文件。在本示例中,我们将使用具有单个键和值的 JSON 文件。该值是 Amazon RDS 中的 PostgreSQL 数据库实例的 JDBC 连接字符串。

beanstalk-database.json

{ "connection": "jdbc:postgresql://mydb.b5uacpxznijm.us-west-2.rds.amazonaws.com.cn:5432/ebdb?user=username&password=mypassword" }

URL 的突出显示部分对应于数据库的终端节点、端口、数据库名称、用户名和密码。

创建存储桶和上传文件

  1. 打开 Amazon S3 控制台

  2. 选择 Create Bucket

  3. 键入 Bucket Name (存储桶名称),然后选择 Region (区域)

  4. 选择创建

  5. 打开该存储桶,然后选择 Upload (上传)

  6. 按照提示操作上传该文件。

默认情况下,您的账户具有对该文件的所有权和管理权,但 IAM 用户和角色没有这些权限,除非您向其明确授予访问权限。请通过将策略添加到实例配置文件来向 Elastic Beanstalk 环境中的实例授予权限。

默认实例配置文件命名为 aws-elasticbeanstalk-ec2-role。如果您不确定实例配置文件的名称,则可以在环境管理控制台中的 Configuration (配置) 页面上找到该配置文件。

向实例配置文件添加权限

  1. 打开 IAM 控制台

  2. 选择 Roles

  3. 选择 aws-elasticbeanstalk-ec2-role

  4. 选择添加内联策略

  5. 添加允许实例检索文件的策略。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "database", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": [ "arn:aws-cn:s3:::my-secret-bucket-123456789012/beanstalk-database.json" ] } ] }

    将存储桶和对象名称替换为您的存储桶和对象的名称。

接下来,将一个配置文件添加到源代码中以指示 Elastic Beanstalk 在部署期间从 Amazon S3 下载文件。

~/my-app/.ebextensions/database.config

Resources: AWSEBAutoScalingGroup: Metadata: AWS::CloudFormation::Authentication: S3Auth: type: "s3" buckets: ["my-secret-bucket-123456789012"] roleName: "aws-elasticbeanstalk-ec2-role" files: "/tmp/beanstalk-database.json" : mode: "000644" owner: root group: root authentication: "S3Auth" source: https://s3-us-west-2.amazonaws.com.cn/my-secret-bucket-123456789012/beanstalk-database.json

此配置文件将执行两项操作。Resources 键将身份验证方法添加到环境的 Auto Scaling 组元数据,Elastic Beanstalk 可使用该元数据访问 Amazon S3。files 键指示 Elastic Beanstalk 在部署期间从 Amazon S3 下载文件并将其存储在本地的 /tmp/ 中。

使用位于源代码根级的 .ebextensions 文件夹中的配置文件部署应用程序。如果正确配置了权限,则部署将成功且文件将下载到环境中的所有实例。否则,配置将失败。

最后,将代码添加到应用程序来读取 JSON 文件并使用连接字符串连接到数据库。