2015-04-24 2 views
5

Я ищу ответ на концептуальном уровне. Поэтому, пожалуйста, воздержитесь от простого предоставления ссылки на документацию aws в качестве ответа.В чем разница между Canned Policy и Custom Policy?

Это как консервированный политика порождается boto

@staticmethod 
def _canned_policy(resource, expires): 
    """ 
    Creates a canned policy string. 
    """ 
    policy = ('{"Statement":[{"Resource":"%(resource)s",' 
       '"Condition":{"DateLessThan":{"AWS:EpochTime":' 
       '%(expires)s}}}]}' % locals()) 
    return policy 

И как пользовательские политики порождена той же библиотеки

@staticmethod 
def _custom_policy(resource, expires=None, valid_after=None, ip_address=None): 
    """ 
    Creates a custom policy string based on the supplied parameters. 
    """ 
    condition = {} 
    # SEE: http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/RestrictingAccessPrivateContent.html#CustomPolicy 
    # The 'DateLessThan' property is required. 
    if not expires: 
     # Defaults to ONE day 
     expires = int(time.time()) + 86400 
    condition["DateLessThan"] = {"AWS:EpochTime": expires} 
    if valid_after: 
     condition["DateGreaterThan"] = {"AWS:EpochTime": valid_after} 
    if ip_address: 
     if '/' not in ip_address: 
      ip_address += "/32" 
     condition["IpAddress"] = {"AWS:SourceIp": ip_address} 
    policy = {"Statement": [{ 
       "Resource": resource, 
       "Condition": condition}]} 
    return json.dumps(policy, separators=(",", ":")) 

На мой взгляд, консервы политика - это, по сути, настраиваемая политика, но с меньшим количеством атрибутов.

Если это правильное наблюдение, то почему необходимо использовать два разных класса политики?

ответ

6

Да, консервированная политика может передавать только определенное подмножество атрибутов пользовательской политики, но различие между ними более важно.

Когда вы используете законсервированную (предварительно определенную) политику, содержимое результирующего законного документа политики является настолько детерминированным и предсказуемым - из самих элементов запроса - что политический документ даже не нужен для отправки в CloudFront вместе с запросом.

Вместо этого он создается локально, так что вы можете его подписать, но затем он отбрасывается. Сервер генерирует идентичный документ на основе параметров запроса и проверяет подпись.

В отличие от пользовательской политики сам документ политики отправляется с запросом в кодировке base-64 в &Policy= в URL-адресе. Это делает URL более длинным, поскольку документ политики должен быть отправлен вместе, но сам документ политики теперь может содержать элементы, которые не могут быть просто экстраполированы из запроса простым обследованием.

Конкретные политики, по крайней мере, в некоторой степени, более «легкие» - более короткие URL-адреса означают меньшее количество байтов, включенных в запрос, и несколько меньшую обработку, необходимую для их использования, но они имеют меньшую гибкость, чем пользовательские политики ,

Сравнительная матрица: http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-signed-urls.html