S3 Bucket eylemi hiçbir kaynak için geçerli değildir


124

Aşağıdaki S3 klasör politikasını oluşturmak için bu yanıttaki talimatları uyguluyorum:

{
  "Id": "Policy1495981680273",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1495981517155",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::surplace-audio",
      "Principal": "*"
    }
  ]
}

Aşağıdaki hatayı geri alıyorum:

İfadedeki herhangi bir kaynak için işlem geçerli değil

Politikamda ne eksik?


1
Bağlantıdaki çözümü denedim: stackoverflow.com/a/36551238/2786039 Ve şimdi çalışıyor. Saygılarımızla
Vuong Nguyen

Yanıtlar:


219

IAM belgelerinden, http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Action

Bazı hizmetler, bireysel kaynaklar için eylemler belirlemenize izin vermez; bunun yerine, Action veya NotAction öğesinde listelediğiniz eylemler, o hizmetteki tüm kaynaklar için geçerlidir. Bu durumlarda, Kaynak öğesinde * joker karakterini kullanırsınız.

Bu bilgilerle kaynak aşağıdaki gibi bir değere sahip olmalıdır:

"Resource": "arn:aws:s3:::surplace-audio/*"

40
Bunun paket politikasında ve / veya politika oluşturucuda belirtilmediğine inanamıyorum!
Carles Alcolea

4
* Kullanıyorum ve hala bu hatayı veriyor. biri bana yardım edebilir mi?
Yehuda Clinton

@YehudaClinton, benim için çalışıyor. her ikisini de eklediğinizden emin olun / *
RMati

74

s3:ListBucketİzni kaldırmak benim için yeterince iyi bir çözüm değildi ve muhtemelen diğerleri için değil.

s3:ListBucketİzin almak istiyorsanız, bu izin paketin /*içindeki öğeler için değil paketin kendisi için geçerli olduğundan, yalnızca paketin düz alanına ( sonunda olmadan) sahip olmanız gerekir .

Aşağıda gösterildiği gibi, s3:ListBucketpaketteki s3:GetObjectve s3:PutObjectaşağıdaki gibi öğelere ilişkin izinlerden ayrı bir açıklama olarak izne sahip olmanız gerekir :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"        
      ],
      "Principal": {
        "AWS": "[IAM ARN HERE]"
      },
      "Resource": "arn:aws:s3:::my-bucket-name"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject", 
        "s3:PutObject"
      ],
      "Principal": {
        "AWS": "[IAM ARN HERE]"
      },
      "Resource": "arn:aws:s3:::my-bucket-name/*"
    }
  ]
}

Kabul. Bazı eylemler için GetObject'i gerçekleştirmeden önce ListBucket izni gereklidir, bu nedenle bu yanıt daha kapsamlıdır.
06'da 3 cheesewheel

2
Bu benim için işe yarıyor ve yalnızca AWS'nin kullanıcılara temel şeyleri yapmaları için rehberlik etme konusunda hala ne kadar çalışması gerektiğini vurguluyor.
volvox

41

Hata Eylemi ifadedeki herhangi bir kaynak için geçerli değil

Basitçe, eylemin (politikada yazdığınız) kaynak için geçerli olmadığı anlamına gelir. Herkesin benim kovamdan indirebilmesi için kovamı halka açık hale getirmeye çalışıyordum. İfademden ("s3: ListBucket") öğesini kaldırana kadar hata alıyordum.

{
  "Id": "Policyxxxx961",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmtxxxxx4365",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::bucket-name/*",
      "Principal": "*"
    }
  ]
}

Liste paketi paket içinde geçerli olmadığından, bu eylem politikasını silerek iyi çalıştı.


Teşekkürler, "s3: ListBucket" i kaldırarak benim için çalıştı.
Paul Watson

14

Bu sorunla karşılaştım ve aynı politikada ListBucket ve GetObject'e sahip olmak isteyenler için daha kısa bir çözüm buldum.

{
  "Id": "Policyxxxx961",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmtxxxxx4365",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": [
          "arn:aws:s3:::bucket-name",
          "arn:aws:s3:::bucket-name/*"
      ],
      "Principal": "*"
    }
  ]
}

Yanlış - PrincipalS3 Politikası dilbilgisi için izin verilmez.
azec-pdx

Yukarıdaki çözümlerden hiçbiri benim için işe yaramadı, Müdür ya geçersizdi ya da erişimim reddedildi.
Daniel

Bu doğru, Kaynak bu durumda bir dizi olmalı ve bu 2 satırı içermelidir ... Oy verin.
Assil

4

Kovayı oluştururken de benzer bir sorunla karşılaştım

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::mrt9949"
            ]
        }
    ]
}

Yukarıdaki kodu şu şekilde değiştirdim

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::mrt9949/*"
            ]
        }
    ]
}

ekle / * adınıza , sorunu çözecektir

İşte kova adım mrt9949


Teşekkür ederim! Bunu aramak için
yıllar harcadı

4

Benim durumumda bu hatanın çözümü, uyguladığım Eylemlerden bazılarını kaldırmaya çalışıyordu. Bazıları bu kaynakla ilgili değildir veya bu kaynakla çalışamaz. Bu durumda şunları eklememe izin vermez:

GetBucketAcl ListBucket ListBucketMultipartUploads


ListBucket beni yakaladı! Bunun için teşekkürler
Quad64Bit

Benim için, yalnızca getObjet'i tutarken çalıştı
LittleTiger

0

Politika için Kaynak etiketi altında tanımlanan arn modelini kontrol etmeniz gerekir.

"Kaynak": "arn: aws: s3 ::: s3mybucketname / *"

Sonuna "/ *" eklenmesi, Paketiniz için Genel Erişim Politikanızın Engeli Kaldırıldıktan sonra bile sorunla karşılaştığınızda sorunun çözülmesine yardımcı olur.


0
  • Örneğinizde Amazon S3'e gidin.
  • İzinler -> Genel Erişim sekmesine gidin.
  • Düzenle'yi seçin ve Tüm genel erişimi engelle ve kaydet seçeneğinin işaretini kaldırın.
  • İzin sekmesinde ve Erişim Kontrol Listesinde 'Genel' etiketini göreceksiniz.

0

ListBuckets'i her klasör için de yapılandırabilirsiniz.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowSESPuts-1521238702575",
            "Effect": "Allow",
            "Principal": {
                "Service": "ses.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::buckets.email/*",
            "Condition": {
                "StringEquals": {
                    "aws:Referer": "[red]"
                }
            }
        },
        {
            "Sid": "Stmt1586754972129",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::596322993031:user/[red]"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::buckets.email",
            "Condition": {
                "StringEquals": {
                    "s3:delimiter": "/",
                    "s3:prefix": [
                        "",
                        "domain.co",
                        "domain.co/user"
                    ]
                }
            }
        },
        {
            "Sid": "Stmt1586754972129",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::596322993031:user/[red]"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::buckets.email",
            "Condition": {
                "StringLike": {
                    "s3:prefix": "domain.co/user/*"
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::596322993031:user/[red]"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::buckets.email/domain.co/user/*"
        }
    ]
}

Bu kurallar, bir e-posta almak için SES ile birlikte kullanılır, ancak harici bir kullanıcının SES tarafından pakete yerleştirilen dosyaları görüntülemesine izin verir. Buradaki talimatları izledim: https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/

Ayrıca, domain.co/user/SDK'yı kullanırken önekin sonunda WITH bölü çizgisi belirtmelisiniz , aksi takdirde erişim reddedilir. umarım herkese yardımcı olur

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.