【问题标题】:Why boto3 dose not recognize my AWS_ACCESS_KEY_ID in Django on EC2?为什么 boto3 在 EC2 上的 Django 中无法识别我的 AWS_ACCESS_KEY_ID?
【发布时间】:2021-01-01 08:01:48
【问题描述】:

我正在将 S3 连接到 EC2 上的 Django。
我确认它可以在我的电脑(窗口)上运行,
但是当我将它上传到AWS EC2 Ubuntu 并运行它时,
我看到了以下消息。 当我运行python manage.py commands

File "/home/ubuntu/django/e/lib/python3.6/site-packages/botocore/session.py", line 821, in create_client aws_secret_access_key)) **botocore.exceptions.PartialCredentialsError: Partial credentials found in explicit, missing: aws_secret_access_key**

但我认为我设置正确。在我的settings.py


AWS_S3_HOST = 's3.me-south-1.amazonaws.com'
AWS_S3_REGION_NAME= config('AWS_S3_REGION_NAME')
AWS_ACCESS_KEY_ID = config('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_kEY = config('AWS_SECRET_ACCESS_kEY')
AWS_STORAGE_BUCKET_NAME = config('AWS_STORAGE_BUCKET_NAME')

我试过了

  1. 授予 IAM 对 EC2 的权限
  2. 删除 EC2 重试
  3. 通过export设置环境变量
  4. 扔掉 virtualenv 试试
  5. 安装 awscli 并进行配置
  6. s3 存储桶策略配置
  7. 尝试将其写入内联,因为它可能无法引用 .env 文件,但它给了我相同的信息。

我今天整天都在为这个问题苦苦挣扎。谈到 AWS Config,我想我已经尽力了。如果您对这个问题的原因有任何猜测,请给我提示。

我只认为 boto3 在 EC2 上以一种特殊的方式查找密钥

AWS 角色设置工作正常 :) 我注意到当我将 EC2 与 IAM 角色一起使用时,我应该设置 setting.py AWS_SECRET_ACCESS_kEYAWS_ACCESS_KEY_ID None

【问题讨论】:

  • IAM 角色是否为ec2.amazonaws.com 启用了AssumeRolePolicyDocumentsts:AssumeRole
  • @Exelian .. 我给了它 AmazonS3FullAccess 和 AmazonEC2FullAccess 角色
  • 那些是权限,但不是受信任的实体。单击 IAM 控制台中的角色并选择“信任关系”选项卡。它应该提到 EC2.amazonaws.com 作为“身份提供者”
  • @Exelian !哦,好的。非常感谢。我明天试试。今天太累了

标签: django amazon-web-services amazon-s3 amazon-ec2 boto3


【解决方案1】:

解决此问题的真正方法是使用链接到授予 EC2 的 IAM 角色 STS 权限的 EC2 InstanceProfiles。

将您的 AWS 凭证存储在实例上是一种不好的做法,您绝对应该避免这样做。

创建具有适当权限的 IAM 角色并将其附加到实例,方法是在控制台中右键单击“修改 IAM 角色”。

【讨论】:

  • 澄清一下,没有任何理由让您在您的实例上拥有access_key_idsecret_key。无
  • 我一直在附加 IAM,授予 s3 权限。好吧,在附加 IAM 之后,我没有删除 settings.py 中的密钥......也许这是问题......谢谢我会检查 InstanceProfiles
  • 确保 IAM 角色将 EC2 作为可信实体,否则 AWS 不会将权限传递给实例
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-05
  • 2013-03-19
相关资源
最近更新 更多