Python 3.x 通过boto3上传文件api将文件上传至AWS S3;匿名用户无法启动多部分上载。请验证。”;错误

Python 3.x 通过boto3上传文件api将文件上传至AWS S3;匿名用户无法启动多部分上载。请验证。”;错误,python-3.x,amazon-web-services,amazon-s3,boto3,Python 3.x,Amazon Web Services,Amazon S3,Boto3,我有一个大约16mb大小的文件,我正在使用python boto3 upload_file api将这个文件上传到S3存储桶中。但是,我相信API在内部选择了多部分上传,并给了我一个“匿名用户无法启动多部分上传”错误 在应用程序的某些运行中,生成的文件可能更小(几KBs)。 一般来说,处理这种情况或修复我上面提到的错误的最佳方法是什么 我目前有一个Django应用程序,它在运行时生成一个文件,并将该文件直接上传到S3存储桶中。好的,所以除非您已经打开S3存储桶供世界上传(这是非常不推荐的),否则

我有一个大约16mb大小的文件,我正在使用python boto3 upload_file api将这个文件上传到S3存储桶中。但是,我相信API在内部选择了多部分上传,并给了我一个“匿名用户无法启动多部分上传”错误

在应用程序的某些运行中,生成的文件可能更小(几KBs)。 一般来说,处理这种情况或修复我上面提到的错误的最佳方法是什么


我目前有一个Django应用程序,它在运行时生成一个文件,并将该文件直接上传到S3存储桶中。

好的,所以除非您已经打开S3存储桶供世界上传(这是非常不推荐的),否则听起来您需要正确设置访问S3存储桶的权限

如何做到这一点会因您运行此应用程序的方式而有所不同-因此,让我们介绍一些选项-在所有情况下,您都需要做两件事:

  • 将脚本与IAM主体(IAM用户或IAM角色,具体取决于此脚本的运行位置/方式)关联
  • 为该主体添加访问bucket的权限(这可以通过IAM策略或S3 bucket策略实现)
Lambda函数-您需要为应用程序创建IAM角色,并将其与Lambda函数关联。一旦配置,Boto3应该能够为您透明地承担此角色

EC2实例或ECS任务-您需要为应用程序创建IAM角色,并将其与EC2实例/ECS任务关联。Boto3将能够通过实例元数据访问角色的凭据,并应自动承担该角色

本地工作站脚本-如果您从本地工作站运行此脚本,则boto3应该能够找到并使用您为AWS CLI设置的凭据。如果这些不是您想要使用的凭据,则需要生成访问密钥和秘密访问密钥(如果您选择此路径,请注意如何保护这些密钥,并且一定要遵循最低权限)

现在,获得主体后,您可以将授予IAM用户或角色上载到bucket的权限的IAM策略附加到IAM用户或角色,也可以向bucket策略添加授予该IAM用户或角色访问权限的子句。你只需要做其中一个


多部分上传是通过与单部分上传相同的S3:PutObject调用执行的(尽管如果您的文件很小,我会很惊讶它使用多部分进行上传)。如果您使用KMS,需要注意的一个小技巧是,如果对多部分上传进行加密,您需要获得使用KMS密钥进行加密和解密的权限。

好的,除非您已经打开S3存储桶供世界上传(这是非常不推荐的),听起来您需要正确设置访问S3存储桶的权限

如何做到这一点会因您运行此应用程序的方式而有所不同-因此,让我们介绍一些选项-在所有情况下,您都需要做两件事:

  • 将脚本与IAM主体(IAM用户或IAM角色,具体取决于此脚本的运行位置/方式)关联
  • 为该主体添加访问bucket的权限(这可以通过IAM策略或S3 bucket策略实现)
Lambda函数-您需要为应用程序创建IAM角色,并将其与Lambda函数关联。一旦配置,Boto3应该能够为您透明地承担此角色

EC2实例或ECS任务-您需要为应用程序创建IAM角色,并将其与EC2实例/ECS任务关联。Boto3将能够通过实例元数据访问角色的凭据,并应自动承担该角色

本地工作站脚本-如果您从本地工作站运行此脚本,则boto3应该能够找到并使用您为AWS CLI设置的凭据。如果这些不是您想要使用的凭据,则需要生成访问密钥和秘密访问密钥(如果您选择此路径,请注意如何保护这些密钥,并且一定要遵循最低权限)

现在,获得主体后,您可以将授予IAM用户或角色上载到bucket的权限的IAM策略附加到IAM用户或角色,也可以向bucket策略添加授予该IAM用户或角色访问权限的子句。你只需要做其中一个


多部分上传是通过与单部分上传相同的S3:PutObject调用执行的(尽管如果您的文件很小,我会很惊讶它使用多部分进行上传)。如果使用KMS,需要注意的一个小技巧是,如果对多部分上传进行加密,则需要获得使用KMS密钥进行加密和解密权限的权限。

Django应用程序如何向AWS进行身份验证?或者只是使用通过Bucket策略授予的匿名权限?您如何限制任何人上传到bucket的能力?您是否有可以生成预签名URL的后端应用程序?这是bucket上的匿名权限。我知道这是一种非常糟糕的方式!Django应用程序如何向AWS进行身份验证?或者只是使用通过Bucket策略授予的匿名权限?您如何限制任何人上传到bucket的能力?您是否有可以生成预签名URL的后端应用程序?这是bucket上的匿名权限。我知道这是一种非常糟糕的方式!对角色使用IAM策略并使其正常工作。谢谢。将IAM策略用于角色并使其正常工作。T