5

Algunos archivos en mi categoría están configurados en public-read (ACL). Así que leí en alguna parte que establecer una política de depósito puede establecer automáticamente todos los archivos de un segmento en privado.¿Hay conflicto entre las políticas de depósito y las URL firmadas?

bucketname es un marcador de posición para el nombre del cubo real. Mi política de cubo es:

{ 
    "Version": "2008-10-17", 
    "Id": "Policy1331182170360", 
    "Statement": [ 
     { 
      "Sid": "Stmt1331182162671", 
      "Effect": "Deny", 
      "Principal": { 
       "AWS": "*" 
      }, 
      "Action": "s3:GetObject", 
      "Resource": "arn:aws:s3:::bucketname/*" 
     } 
    ] 
} 

En una de mis reguladores, que tengo:

s3 = Aws::S3.new(APP_CONFIG['amazon_access_key_id'], APP_CONFIG['amazon_secret_access_key']) 
    bucket_gen = Aws::S3Generator::Bucket.create(s3, APP_CONFIG['amazon_bucket_name']) 
    signed_url = bucket_gen.get("#{URI.unescape(URI.parse(URI.escape(@song.encoded_file_url)).path[1..-1])}", 10.minute) 
    redirect_to signed_url and return 

estoy re-dirigido, pero me siguen dando acceso denegado. Sin embargo, si elimino la política de depósito, me vuelven a dirigir a una URL firmada y todo funciona bien.

Inicialmente, pensé que había un problema con la forma en que estaba firmando mis URL. Así que abrí Amazon Web Console y configuré manualmente los permisos del archivo en privado. Para esta prueba, eliminé la política de cubos. Navegado a la URL del archivo (no firmado) y no se pudo acceder. Que es normal En la segunda prueba, firmé la URL y pude acceder al archivo. Lo que significa que no hay nada malo con la forma en que estaba firmando.

¿Hay un conflicto entre las políticas de depósito y las URL firmadas?

Respuesta

6

Esto se reduce a la autenticación (¿quién eres?) Que es diferente de la autorización (lo que está permitido hacer). Una URL firmada es simplemente una forma de autenticarse como un usuario de AWS particular (en lugar de simplemente ser anónimo), no confiere ninguna autorización especial.

Una vez que la autenticación ha tenido lugar y amazon sabe quién es usted, aún necesita decidir si puede realizar la acción solicitada. Su política de depósito indica que nadie puede acceder a los archivos y, por lo tanto, se deniega la solicitud see the policy docs por qué su política de depósito evalúa ese camino

Si su política dice que su usuario puede acceder a archivos pero que nadie más puede URLs deben trabajar (que es básicamente lo que los medios privados cuando lo hace permisos de archivos individuales)

Si se agrega una declaración a su política a lo largo de las líneas de

{ 
    "Sid":"AddSpecific", 
    "Effect":"Allow", 
    "Principal": { 
    "AWS": ["1234-5678-9012"] 
    }, 
    "Action":["Action": "s3:GetObject"], 
    "Resource":["arn:aws:s3:::bucket/*"] 
} 

, entonces debería ser capaz de utilizar sus URL firmadas (obviamente, reemplace 1234-5678-9012 con su ID de cuenta Aws. Si usa IAM, entonces el iam bit de la consola web tiene los identificadores para esos usuarios)

+0

Buen punto. En este caso, ¿qué necesita cambiar en mi política para resaltar su punto? –

+0

Esto sería mucho más sencillo si Amazon Web Console nos permitiera cambiar por lotes la lista de control de acceso de todos los archivos a archivos privados –

Cuestiones relacionadas