2015-04-24 12 views
5

Sto cercando una risposta a livello concettuale. Quindi, si prega di astenersi dal fornire semplicemente un link alla documentazione di aws come risposta.Qual è la differenza tra politica in scatola e politica personalizzata?

Esso è come una politica scatola è generato da 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 

Ed è così che la politica personalizzato è generato dalla stessa libreria

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

A mio avviso, una in scatola la politica è essenzialmente una politica personalizzata ma con meno attributi.

Se è un'osservazione corretta, allora perché la necessità di due diverse classi di politiche diverse?

risposta

6

Sì, una politica predefinita può trasmettere solo un sottoinsieme specifico degli attributi di una politica personalizzata, ma la distinzione tra i due è più significativa.

Quando si utilizza un criterio predefinito (predefinito), il contenuto del documento della politica in scatola risultante è così deterministico e prevedibile - dagli elementi della richiesta stessa - che il documento della politica non ha nemmeno bisogno da inviare a CloudFront insieme alla richiesta.

Invece, è generato localmente in modo da poterlo firmare, ma poi viene scartato. Il server genera il documento identico in base ai parametri della richiesta e convalida la firma.

Al contrario, con una politica personalizzata, il documento della politica viene inviato con la richiesta, codificata Base 64, in &Policy= nell'URL. Ciò rende l'URL più lungo, dal momento che il documento della politica deve essere inviato insieme, ma il documento di policy stesso è ora autorizzato a contenere elementi che non possono essere semplicemente estrapolati dalla richiesta con un semplice esame.

Le politiche predefinite, quindi, sono (almeno in parte) più "leggere": gli URL più brevi significano meno byte inclusi nella richiesta e un po 'meno l'elaborazione necessaria per utilizzarli, ma hanno meno flessibilità delle politiche personalizzate .

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