2015-04-24 8 views
5

Ich suche nach einer Antwort auf konzeptioneller Ebene. Bitte verzichten Sie daher darauf, lediglich einen Link zur aws-Dokumentation als Antwort bereitzustellen.Was ist der Unterschied zwischen vordefinierten Richtlinien und benutzerdefinierten Richtlinien?

Es ist wie eine Dosenpolitik von boto erzeugt wird

@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 

Und es ist, wie benutzerdefinierte Richtlinie von derselben Bibliothek erzeugt wird

@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=(",", ":")) 

In meinen Augen ein gekapselter Richtlinie ist im Wesentlichen eine benutzerdefinierte Richtlinie, jedoch mit weniger Attributen.

Wenn es eine korrekte Beobachtung ist, warum dann die Notwendigkeit für zwei verschiedene Arten von Richtlinien?

Antwort

6

Ja, eine vordefinierte Richtlinie kann nur eine bestimmte Teilmenge der Attribute einer benutzerdefinierten Richtlinie übermitteln, aber die Unterscheidung zwischen den beiden ist signifikanter.

Wenn Sie eine vordefinierte (vordefinierte) Richtlinie verwenden, ist der Inhalt des daraus resultierenden vordefinierten Richtliniendokuments so deterministisch und vorhersagbar - aus den Elementen der Anforderung selbst, dass das Richtliniendokument nicht einmal benötigt wird mit der Anfrage an CloudFront gesendet werden.

Stattdessen wird es lokal generiert, so dass Sie es signieren können, aber dann wird es verworfen. Der Server generiert das identische Dokument basierend auf den Anforderungsparametern und validiert die Signatur.

Im Gegensatz dazu wird das Richtliniendokument mit einer benutzerdefinierten Richtlinie mit der Anforderung Base-64-codiert in &Policy= in der URL gesendet. Dies macht die URL länger, da das Richtliniendokument gesendet werden muss, aber das Richtliniendokument selbst kann nun Elemente enthalten, die nicht einfach durch einfache Prüfung aus der Anforderung extrapoliert werden können.

Aus diesem Grund sind (zumindest in gewissem Maße) inkonsistente Policies "leichter" - kürzere URLs bedeuten weniger Bytes in der Anfrage und etwas weniger Verarbeitung für ihre Verwendung, aber sie sind weniger flexibel als benutzerdefinierte Richtlinien .

Vergleichsmatrix: http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-signed-urls.html