Kullanıcının S3 grubuna dosya yüklemesine, ancak üzerine yazmasına veya silmesine nasıl izin verilir?


19

Bir kullanıcı için aşağıdaki IAM politikam var

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

Amaç, kullanıcının dosyaları gruba yüklemesine izin vermek, ancak üzerine yazmamak veya silmek değil. Yedekleme için. İle başladım ListBucketve işe yaramadığı için PutObjectekledim *. *Kullanıcının dosyaları yüklemesine bile izin vermiyor, sadece alıyorum Access Denied.

Ben Simülatörü çalıştığınızda, döndürür Denied - Implicitly denied (no matching statements found).için ListBucketben örtük buna izin beri tuhaf görünüyor ki,.

Cyberduck ve 3Hub'ı S3 istemcisi olarak denedim.

Neyin yanlış olduğu hakkında bir fikrin var mı?

Yanıtlar:


25

Hazırlarken Amazon IAM için politikaları Amazon S3 , sen arasındaki farkın farkında olması gerekir Hizmet üzerinde Operasyon (örn ListAllMyBuckets ), Kovalar ilgili operasyonlar (örn ListBucket ) ve Nesneler üzerinde Operasyonları (örn GetObject ).

Özellikle, Resourcepolitikanızın spesifikasyonunun aşağıdaki hedeflere göre uygun hedef varlıkları ele alması gerekir (ör. Amazon S3 için çeşitli Örnek Politikalar )

  • Hizmet İşlemleri - arn:aws:s3:::*
  • Kovalarda İşlemler - arn:aws:s3:::<bucket>
  • Nesneler Üzerindeki İşlemler - arn:aws:s3:::<bucket>/<object>

Çözüm

Karşılaştığınız Access Deniediçin PutObject, bir nesne düzeyinde kaynak belirtimi gerektiren bir kova düzeyi kaynak belirttiğiniz için arn:aws:s3:::<bucket>/*- buna göre aşağıdaki politika örnek kullanım durumunuzu kapsamalıdır:

{
  "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
Şaşırtıcı, bu kusursuz çalıştı. Teşekkür ederim! Yani sidgerekli değil mi?
Znarkus

1
Göre Sid , bu edilmektedir politika ifadesi için sağladığı isteğe bağlı bir tanımlayıcıdır , bir politika içinde benzersiz olmalıdır . İyi çalışmadığı göz önüne alındığında (ancak aşağıya bakın), kısalık için ve politikaları sürümlendirirken burada kaldırma eğilimindeyim, ancak örneğin otomatik olarak politikalar oluştururken rahatsız etmiyorum - ancak, sonraki Not : Bazı AWS hizmetleri (örneğin, Amazon SQS veya Amazon SNS) bu öğeyi gerektirebilir [...] .
Steffen Opel

3
OP, "kullanıcının dosyaları gruba yüklemesine izin vermek, ancak üzerine yazmak veya silmek istemediğini" söylüyorlar, ancak bu politika PutObject, geçersiz kılınan nesnelere izin veriyor, değil mi? Bence bunu ayırmanın bir yolu yok.
Xiong Chiamiov

2
@XiongChiamiov - S3 ´PutObject´ eylemi gerçekten üzerine yazma anlamına gelir, sadece S3 varsayılan olarak nasıl çalışır. Yanlışlıkla silinmeye karşı korunmaya ihtiyacınız varsa , Amazon S3 grubunuzda depolanan her nesnenin her sürümünü korumak, geri almak ve geri yüklemek için Sürüm oluşturmayı kullanma konusuna bakmak isteyebilirsiniz . - Bu, hem istenmeyen kullanıcı eylemlerinden hem de uygulama hatalarından kolayca kurtulmanızı sağlar .
Steffen Opel

4
Evet, sürüm oluşturma üzerine yazılan nesneleri kurtarma yeteneği verir (ancak bunların bulunduğunu keşfetmeniz ve sonra bunu yapmanız gerekir). Her neyse, -1 çünkü soruya doğru bir cevap vermiyor.
Xiong Chiamiov
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.