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.