【问题标题】:"Permission Denied" when accessing private keys downloaded from S3 to elastic beanstalk访问从 S3 下载到弹性 beantalk 的私钥时出现“权限被拒绝”
【发布时间】:2021-03-11 10:32:24
【问题描述】:

根据官方 AWS 文档,我将 Firebase Admin SDK 凭据存储到来自亚马逊 S3 的弹性 beanstalk 环境中,用于应用程序的部署。 https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/https-storingprivatekeys.html

当 Firebase Admin SDK 尝试访问密钥时会引发错误。

PermissionError: [Errno 13] Permission denied: '/etc/pki/tls/certs/my_cert.json'

如何设置才能让它工作?

【问题讨论】:

  • 您能否通过 ssh 进入 EB 实例并检查谁能够访问 /etc/pki/tls/certs/my_cert.json?猜猜,是root 用户?默认情况下,您在 EB 上的应用无权访问 root 拥有的文件。
  • 我应该在所有者部分而不是 root 中放入什么值?它会是 EB 上应用程序的实例配置文件吗? @Marcin
  • 我将文件所有者和组更改为 ec2-user,但仍然出现相同的错误
  • 如果文件在正确的位置,您可以开始验证

标签: django amazon-web-services amazon-s3 amazon-ec2 amazon-elastic-beanstalk


【解决方案1】:

您需要执行 2 个步骤:

  • .ebextensions/privatekey.config 如your doc url 中所述。您可以检查 beanstalk 日志(如果您可以 SSH,则为 cfn-init 日志)以验证 .ebextensions 脚本是否正确执行

  • beanstalk 应该能够访问存储密钥的 S3 存储桶。

第 2 点更详细:

分配给您环境的 EC2 实例的实例配置文件必须具有从指定存储桶读取密钥对象的权限。验证实例配置文件是否有权读取 IAM 中的对象,并且存储桶和对象的权限不会禁止实例配置文件。您可以通过 SSH'n 在属于 Beanstalk 环境的 EC2 内对此进行测试,然后执行:aws s3 ls s3://your-bucket/with-key。之后,您可以尝试下载密钥。这与您的 ebextensions 脚本尝试执行的操作完全相同。如果不允许,ebextensions 脚本将失败。

【讨论】:

  • 我都为 S3 存储桶和实例配置文件设置了权限,但仍然收到相同的错误
  • 我 ssh 进入服务器并确认凭证文件在那里。这是否意味着从 s3 读取的权限设置正确?
  • 然后您的 beanstalk 能够从 S3 下载文件,因此该部分看起来很好。现在您可以开始检查文件在磁盘上需要哪些权限。您可以使用 chmod 更改权限以测试和更新 ebextionsscript 中的“模式”配置
  • 我使用 EB CLI SSH 进入服务器。我的终端显示我以“ec2-user”身份登录。由于我更改了脚本以下载凭据表单 S3,因此凭据文件所有者现在是 ec2-user。但是凭证文件所在的目录没有读取 ec2-user 的权限,所以我尝试使用 chmod 更改权限,但由于我没有权限(更改目录的权限),命令被拒绝。
  • 如果你把这里的权限设置为root docs.aws.amazon.com/elasticbeanstalk/latest/dg/…
猜你喜欢
  • 2014-12-11
  • 2019-11-12
  • 2018-11-06
  • 2021-07-26
  • 2022-01-27
  • 1970-01-01
  • 2016-09-19
  • 2017-07-08
相关资源
最近更新 更多