Como permitir que o usuário faça o upload de arquivos para o bucket do S3, mas não sobrescreva ou exclua?

19

Eu tenho a seguinte política do IAM para um usuário

{
  "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:::*"
      ]
    }
  ]
}

O objetivo é permitir que o usuário envie arquivos para o bloco, mas não sobrescreva ou exclua. É para backup. Comecei com ListBucket e PutObject , mas adicionei * porque não funcionou. Nem mesmo * permite que o usuário faça upload de arquivos, apenas recebendo Access Denied .

Quando eu tento o simulador, ele retorna Denied - Implicitly denied (no matching statements found). para ListBucket , o que parece estranho, já que admiti isso implicitamente.

Já experimentei o Cyberduck e o 3Hub como clientes S3.

Alguma ideia do que está errado?

    
por Znarkus 19.03.2014 / 11:53

1 resposta

24

Ao criar políticas do Amazon IAM para Amazon S3 , você precisa estar ciente da diferença entre Operações no serviço (por exemplo, ListAllMyBuckets ), Operações em buckets (por exemplo, ListBucket ) e Operações em objetos (por exemplo, GetObject ).

Em particular, a especificação Resource de sua política precisa abordar as entidades de destino apropriadas de acordo com os seguintes padrões (veja, por exemplo, os vários Políticas de exemplo para o Amazon S3 ):

  • Operações no serviço - arn:aws:s3:::*
  • Operações em buckets - arn:aws:s3:::<bucket>
  • Operações em objetos - arn:aws:s3:::<bucket>/<object>

Solução

Você está encontrando Access Denied , porque você especificou um recurso de nível de intervalo para PutObject , que requer uma especificação de recurso no nível de objeto como arn:aws:s3:::<bucket>/* - a seguinte política deve abranger seu caso de uso de amostra:

{
  "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/*"
      ]
    }
  ]
}
    
por 19.03.2014 / 12:58