Рубрики
Без рубрики

Как обслуживать премиум / личный контент на вашем сайте?

Многие онлайн-компании (например: netflix, Udemy etc) Распространите содержимое через Интернет, который я … помечен с AWS, Python, Serverless, Облако.

Многие онлайн-компании (например: netflix, UDEME и т. Д.) Распределите содержимое через Интернет, который доступен только членам сайта или подписался или выплачивал премию. Сегодня в этом посте мы видим, как вы можете достичь этого для вашего сайта, используя Amazon Web Services. Мы увидим, как вы можете надежно служить частному контеру вашим пользователям из ковша AWS S3, используя S3 презенцию URL

Что предварительно подписаны URL?

А Премимент URL это URL Это обеспечивает ограниченное разрешение и время, чтобы сделать запрос. Любой, кто получает преданный URL, может затем получить доступ к объекту. Например, если у вас есть файл в вашем ведре, и ведро, и объект – это личное, вы можете поделиться файлом с другими, создавая преданный URL.

Некоторые важные моменты на пресеченные URL-адреса

  • Создатель преседающего URL должен иметь доступ к объекту для URL для работы, иначе URL не будет работать.
  • Вы можете создать пресеченный URL, который не является полезным или не работает.
  • Это не стоит создавать пресеченные URL.
  • Вы можете установить время истечения на URL-адресах
  • Если вы создали пресеченный URL-адрес, используя временный токен, то URL истекает, когда токен истекает, даже если URL был создан с более поздним временем истечения
  • Вы можете отозвать URL, удалив разрешения для доступа к объекту от пользователей, созданного URL.

Как создать пресеченный URL?

Когда вы создаете преданный URL для вашего объекта, вы должны предоставить учетные данные о безопасности, указать имя ведра, клавишу объекта, указать метод и время истечения.

В Python, используя BOTO3, вы можете использовать generate_presigned_url Метод генерировать URL

response = s3_client.generate_presigned_url('get_object',
            Params={'Bucket': bucket_name,
            'Key': object_name},
            ExpiresIn=expiration)

ответ Объект будет содержать URL, который будет выглядеть похоже на это

https://somebucketname-rep.s3.amazonaws.com/someFileName.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAQS3IOUWUZF7YSXGA%2F20200821%2Fus-east-2%2Fs3%2Faws4_request&X-Amz-Date=20200821T051228Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Security-Token=FwoGZXIvYXdzEH8aDCfJDxO0y6xQxYmdGCK2AXe71W%2FgZEg%2FSnSWC%2Fw%2FaJHeZ20M7OI7AqMEum5c98Chl6pSNPwE5Awsc3ySwokDF6L8a9wP0ceXWAmxT3WXLSoFeNHDbbEHfUKWnvGL8yFzAxdmf%2Fmi%2B5Tnl62td8Nad%2F0Ct1Sx11Mip1h2qdYxw80OX5bCTq7cAHHjpmupvaDt%2BZ3qVyIA9WZmeS63dCPOlieE9IiBZf%2FjxF4Mcs5w4ZIHtZL%2F3LvqMXAy3XfzCgnlYVZeCNczKLuv%2FfkFMi0mStwkzyO%2BfMIxWJ82GJmyNi7LZuY5r0Hx0mE%2BxLnre8jp9%2FACoV%2FM92GnsR0%3D&X-Amz-Signature=17046b630ad4dede85af1cd57204bba8adc462a1825a35d93e81b656c683ad75

Вы можете использовать этот URL в браузере и получить доступ к объекту! Простое .. не так ли?

Давайте посмотрим в действии

Мы собираемся реализовать это на предыдущих двух сообщениях, В первом посте , мы реализовали пользовательский брокер идентификатора (регистрацию/вход в систему), используя AWS KMS для шифрования Decryt Password. В Второй пост , мы использовали AWS STS для предположения, чтобы прочитать имена файлов ведных файлов, и теперь мы расширим, что использовать преданный URL. Скачать код для второго сообщения с github.com/rajanpanchal/aws-kms-sts и измените его. Вот как выглядит общий процесс

Открыть файл ShowFiles.py из папки LAMBDA и добавим функцию для создания преданного URL-адреса. Позвоните в эту функцию из GetFilesList функция.

def getSignedUrl(key,s3_client):
    KeyUrl = {}

    response = s3_client.generate_presigned_url('get_object',
                        Params={'Bucket': os.environ['filesBucket'],
                        'Key': key},
                        ExpiresIn=3600)
    KeyUrl[key] = response
    return KeyUrl


# Returns list of files from bucket using STS    
def getFilesList():
    sts_client = boto3.client('sts')

    # Call the assume_role method of the STSConnection object and pass the role
    # ARN and a role session name.
    assumed_role_object=sts_client.assume_role(
        RoleArn=os.environ['s3role'],
        RoleSessionName="AssumeRoleSession1"
    )

    # From the response that contains the assumed role, get the temporary 
    # credentials that can be used to make subsequent API calls
    credentials=assumed_role_object['Credentials']

    # Use the temporary credentials that AssumeRole returns to make a 
    # connection to Amazon S3  
    s3_resource=boto3.resource(
        's3',
        aws_access_key_id=credentials['AccessKeyId'],
        aws_secret_access_key=credentials['SecretAccessKey'],
        aws_session_token=credentials['SessionToken'],
    )
    s3_client = boto3.client('s3',aws_access_key_id=credentials['AccessKeyId'],
aws_secret_access_key=credentials['SecretAccessKey'],
aws_session_token=credentials['SessionToken'])
    bucket = s3_resource.Bucket(os.environ['filesBucket'])
    files=[]
    for obj in bucket.objects.all():
        files.append(getSignedUrl(obj.key,s3_client))
    return files

Мы используем временные полномочия, полученные из Уверенность Создать преданный URL в getsignedurl функция. GetFilesList Функции Возвращает список имен файлов и преданного URL.

Теперь измените Showfiles.html, чтобы перейти за ответ и создавать ссылки для файлов










File Access System

Files
Loading..

Теперь Sam Build и развертывание.

Измените логин .html, fightup.html и showfiles.html, чтобы обновить URL-адреса API из выходов CloudFormation. Загрузить эти файлы в ведро Stsexampamplebucket или ведро, которое вы создали. Держите эти файлы публичными

Вы можете найти код здесь: https://github.com/rajanpanchal/aws-kms-sts-presigned-url

Тестирование

Дайте мне знать, если у вас есть какие-либо вопросы или комментарии!

Оригинал: “https://dev.to/rajanpanchal/how-to-serve-premium-private-content-on-your-site-41kl”