2012-03-11 28 views
6

Ora, so che non posso impedire a qualcuno di scaricare i miei video e condividerli, tuttavia preferirei farlo in modo che le persone non copino direttamente i link di pasta nel mio bucket. Quindi, c'è un modo per rendere accessibile il mio bucket solo dal mio server/dominio che effettua la richiesta?file video amazon s3 accessibili solo dal mio dominio/server?

Se aiuta, sto usando jwplayer che carica da una playlist xml che ha tutti i link. Questa playlist può sicuramente essere aperta e visualizzata da qualsiasi luogo ed è da dove mi aspetto che la semplice copia e incolla provenga.

Non voglio mascherare gli URL perché ciò significa che il mio bucket è leggibile da tutti. C'è probabilmente qualche possibilità che qualcuno troverà l'URL del mio secchio e il nome dei file e collegare tutto insieme ...

risposta

7

Ciò è possibile Using Bucket Policies, che consente di definire i diritti di accesso per Amazon S3 risorse - ci sono un paio di Example Cases for Amazon S3 Bucket Policies che illustra la funzionalità, e tra questi troverete un esempio per Limitare l'Accesso alle IP specifici indirizzi così:

Questa dichiarazione concede le autorizzazioni a qualsiasi utente di eseguire qualsiasi azione S3 sugli oggetti nel bucket specificato. Tuttavia, la richiesta deve essere originata dall'intervallo di indirizzi IP specificato nella condizione.

A seconda delle specifiche del vostro caso d'uso, una politica secchio per questo potrebbe apparire in questo modo:

{ 
    "Version": "2008-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "*" 
      }, 
      "Action": "s3:*", 
      "Resource": "arn:aws:s3:::bucket/*", 
      "Condition" : { 
       "IpAddress" : { 
        "aws:SourceIp": "192.168.143.0/24" 
       }, 
       "NotIpAddress" : { 
        "aws:SourceIp": "192.168.143.188/32" 
       } 
      } 
     } 
    ] 
} 

Come mostrato il valore aws:sourceIp per i parametri IPAddress e NotIpAddress si esprime in CIDR notation, consentendo rispettivi flessibilità per comporre lo scopo desiderato.

Infine, si potrebbe voler controllare la raccomandata AWS Policy Generator, selezionare il tipo di S3 politica benna ed esplorare i disponibili azioni e Condizioni per comporre le politiche più mirate per il vostro caso d'uso alla fine - la documentazione per Conditions spiega questo in dettaglio.

+0

Grazie Steffen, chiedo solo, invece di un indirizzo IP, posso farlo da un nome di dominio? Si scopre che devo pagare mensilmente per ottenere un IP univoco per il mio hosting condiviso ... – Matt

+0

@Ali: temo che questo non sia disponibile in quanto tale (nonostante sia un caso d'uso ovvio in effetti); Ho aggiornato i paragrafi finali della mia risposta in merito alla notazione CIDR in uso per 'aws: sourceIp' e alle altre condizioni disponibili ed esplorabili tramite [AWS Policy Generator] (http://awspolicygen.s3.amazonaws.com/ policygen.html): il primo potrebbe consentire di specificare tutti i blocchi di indirizzi IP che il provider potrebbe utilizzare (se documentato), riducendo così notevolmente la superficie di hot linking. Indipendentemente dal fatto che ciò sia fattibile dipende dal tuo caso d'uso e dal tuo ambiente (fornitore di servizi), ovviamente. –

+0

Vedere la risposta di arulraj.net per le autorizzazioni specifiche del dominio. So che sono passati due anni, ma questo commento è andato fuori dalla mia ricerca, quindi ho pensato di aggiornarlo. –

1

È possibile proteggere il bucket, che di default è così com'è. (significa che hai accesso solo agli oggetti in esso contenuti) Quindi puoi richiedere i file da Amazon S3 dal tuo sito web e assegnargli un limite di tempo a cui l'utente può vederli.

Questo fornirà automaticamente un URL con i parametri associati, accessibile solo per 1 minuto. Puoi utilizzarlo come fonte all'interno del tuo sito web e dopo non poterlo copiare e incollare nel browser dopo 1 minuto.

Si può leggere di più su questo al Amazon SDK for PHP

+0

Questo può essere fatto a livello di benna? per esempio. ottenere un URL firmato per tutti i file in un bucket che scade dopo XX, invece di dover richiedere questo per ogni singolo URL in fase di runtime? –

6

l'indirizzo IP aiuterà se il vostro server intenzione di accedere al secchio. Ma JWPlayer è dal lato client. Quindi la richiesta va direttamente da jwplayer (browser) a s3 bucket url, non tramite il tuo server. In questo caso, la "policy bucket referrer" ti aiuterà in questo.

{ 
"Version": "2008-10-17", 
"Statement": [ 
    { 
    "Sid": "1", 
    "Effect": "Deny", 
    "Principal": { 
     "AWS": "*" 
    }, 
    "Action": "s3:GetObject", 
    "Resource": "arn:aws:s3:::yourbucketname/*", 
    "Condition": { 
     "StringNotLike": { 
     "aws:Referer": [ 
      "http://yoursitename.com/*", 
      "http://*.yoursitename.com/*" 
     ] 
     } 
    } 
    } 
] 
} 

Quindi ora s3 consentirà se tale richiesta proviene solo dal tuo sito.

+0

Se qualcuno invia una richiesta impostando l'intestazione del referrer, in quel caso scaricherà facilmente un video. – shuboy2014

0

Limitare l'accesso a un referer specifico

Supponiamo di avere un sito web con nome di dominio (www.example.com o example.com) con link a foto e video memorizzati nel secchio Amazon S3, examplebucket. Per impostazione predefinita, tutte le risorse di Amazon S3 sono private, quindi solo l'account AWS che ha creato le risorse può accedervi. Per consentire l'accesso in lettura a questi oggetti dal tuo sito Web, puoi aggiungere un criterio bucket che consente l'autorizzazione s3: GetObject con una condizione, utilizzando la chiave aws: referer, che la richiesta get deve provenire da pagine web specifiche. Il seguente criterio specifica la condizione StringLike con aws: la chiave di condizione Referer.

http://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html