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

在 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: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:s3:::DOC-EXAMPLE-BUCKET-123456789012/beanstalk-database.json" ] } ] }

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

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

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

Resources: AWSEBAutoScalingGroup: Metadata: AWS::CloudFormation::Authentication: S3Auth: type: "s3" buckets: ["DOC-EXAMPLE-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/DOC-EXAMPLE-BUCKET-123456789012/beanstalk-database.json

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

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

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