Come consentire all'utente di caricare file sul bucket S3, ma non di sovrascriverli o eliminarli?


19

Ho la seguente politica IAM per un utente

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1395161912000",
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:PutObject",
        "s3:*"
      ],
      "Resource": [
        "arn:aws:s3:::bucketname"
      ]
    },
    {
      "Sid": "list",
      "Effect": "Allow",
      "Action": [
        "s3:ListAllMyBuckets"
      ],
      "Resource": [
        "arn:aws:s3:::*"
      ]
    }
  ]
}

L'obiettivo è consentire all'utente di caricare i file nel bucket, ma non di sovrascriverli o eliminarli. È per il backup. Ho iniziato con ListBuckete PutObject, ma *ho aggiunto che non funzionava. Nemmeno *consente all'utente di caricare file, solo ottenendo Access Denied.

Quando provo il Simulatore, ritorna Denied - Implicitly denied (no matching statements found).per ListBucket, il che sembra strano dato che l'ho implicitamente permesso.

Ho provato sia Cyberduck che 3Hub come client S3.

Qualche idea di cosa c'è che non va?

Risposte:


25

Quando si creano criteri Amazon IAM per Amazon S3 , è necessario essere consapevoli della differenza tra Operazioni sul servizio (ad esempio ListAllMyBuckets ), Operazioni su bucket (ad esempio ListBucket ) e Operazioni su oggetti (ad esempio GetObject ).

In particolare, le Resourcespecifiche della tua politica devono rivolgersi alle entità target appropriate secondo i seguenti schemi (vedi ad esempio le varie Politiche di esempio per Amazon S3 ):

  • Operazioni sul servizio - arn:aws:s3:::*
  • Operazioni su benne - arn:aws:s3:::<bucket>
  • Operazioni sugli oggetti - arn:aws:s3:::<bucket>/<object>

Soluzione

Stai riscontrando Access Denied, perché hai specificato una risorsa a livello di bucket per PutObject, che richiede una specifica di risorsa a livello di oggetto come arn:aws:s3:::<bucket>/*- di conseguenza, la seguente politica dovrebbe coprire il tuo caso d'uso di esempio:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListAllMyBuckets"
      ],
      "Resource": [
        "arn:aws:s3:::*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::bucketname"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::bucketname/*"
      ]
    }
  ]
}

1
Incredibile, ha funzionato perfettamente. Grazie! Quindi sidnon è richiesto?
Znarkus,

1
Secondo Sid , si tratta di un identificatore facoltativo che viene fornito per la dichiarazione della politica , che deve essere univoca all'interno di una politica . Dato che sembra funzionare bene senza (ma vedi sotto), tendo a rimuoverlo qui per brevità e durante la versione delle politiche, ma non mi preoccupo quando si generano politiche automaticamente per esempio - tuttavia, come da Nota successiva : Alcuni servizi AWS (ad esempio Amazon SQS o Amazon SNS) potrebbe richiedere questo elemento [...] .
Steffen Opel,

3
OP afferma di voler "consentire all'utente di caricare i file nel bucket, ma non di sovrascriverli o eliminarli", ma questa politica garantisce PutObjectche consente di sovrascrivere gli oggetti, no? Penso che non ci sia modo di separarlo.
Xiong Chiamiov

2
@XiongChiamiov: l'azione "PutObject" di S3 implica effettivamente la sovrascrittura, è semplicemente come S3 funziona di default. Se hai bisogno di protezione contro l'eliminazione accidentale, ti consigliamo di consultare Utilizzo del controllo delle versioni per conservare, recuperare e ripristinare ogni versione di ogni oggetto archiviato nel tuo bucket Amazon S3. - ciò consente di ripristinare facilmente sia le azioni dell'utente indesiderate che i guasti delle applicazioni .
Steffen Opel,

4
Sì, il controllo delle versioni ti dà la possibilità di recuperare oggetti che sono stati sovrascritti (ma devi scoprire che sono stati, e poi vai a farlo). Comunque, -1 perché non fornisce una risposta accurata alla domanda.
Xiong Chiamiov
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.