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.

До сих пор я пробовал:

  1. Passing credentials as parameters in the boto.client() method
  2. Assuming a role, rather than using IAM user credentials
  3. Verified the object key, and region
  4. 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.

Вернуться на верх