AWS Boto3: Доступ запрещен при запуске в Django Server
Мой код textract успешно работает при запуске в собственном файле, однако, когда я пытаюсь запустить его на сервере разработки django, аутентификация перестает работать.
Я получаю это исключение:
botocore.errorfactory.InvalidS3ObjectException: An error occurred (InvalidS3ObjectException) when calling the StartDocumentAnalysis operation: Unable to get object metadata from S3. Check object key, region and/or access permissions.
До сих пор я пробовал:
- Passing credentials as parameters in the boto.client() method
- Assuming a role, rather than using IAM user credentials
- Verified the object key, and region
- Checked my firewall
Вот мой формат аутентификации:
client = boto3.client('sts', region_name="us-east-2") # Assumes a role.
response = client.assume_role(
RoleArn='arn:aws:iam::xxx:role/xxx/xxx',
RoleSessionName = 'djangoBoto3',
DurationSeconds = 3600,
)
textract = boto3.client( # Instantiate the textract client
"textract",
region_name="us-east-2",
aws_access_key_id = response['Credentials']['AccessKeyId'],
aws_secret_access_key = response['Credentials']['SecretAccessKey'],
aws_session_token = response['Credentials']['SessionToken']
)
Вот как я вызываю функцию textract
response = textract.start_document_analysis(
DocumentLocation = {
'S3Object':{
'Bucket': bucket,
'Name': key,
}
},
FeatureTypes = ['TABLES', 'FORMS']
)
Некоторые вызовы AWS API работают в Django. Например, я могу загружать файлы в ведра S3. Это наводит меня на мысль, что это может быть проблемой подписи. Я читал здесь Amazon Docs, что некоторые операции AWS, такие как S3, могут работать без подписи.
Попробуйте использовать один и тот же регион для ведра Textract и S3, а при использовании роли убедитесь, что она имеет соответствующие разрешения для доступа к S3 и Textract.