Tindakan S3 Bucket tidak berlaku untuk sumber daya apa pun


124

Saya mengikuti instruksi dari jawaban ini untuk menghasilkan kebijakan bucket S3 berikut:

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

Saya mendapatkan kembali kesalahan berikut:

Tindakan tidak berlaku untuk sumber daya apa pun dalam pernyataan

Apa yang saya lewatkan dari polis saya?


1
Saya sudah mencoba solusi di tautan: stackoverflow.com/a/36551238/2786039 Dan itu berfungsi sekarang. Salam
Vuong Nguyen

Jawaban:


218

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

Beberapa layanan tidak mengizinkan Anda menentukan tindakan untuk sumber daya individu; sebagai gantinya, tindakan apa pun yang Anda cantumkan di elemen Action atau NotAction berlaku untuk semua sumber daya di layanan itu. Dalam kasus ini, Anda menggunakan wildcard * di elemen Resource.

Dengan informasi ini, resource seharusnya memiliki nilai seperti di bawah ini:

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

39
Tidak percaya ini tidak disebutkan dalam kebijakan bucket dan / atau pembuat kebijakan!
Carles Alcolea

4
Saya telah menggunakan * dan masih memberikan kesalahan itu. dapatkah seseorang membantu saya?
Yehuda Clinton

@YehudaClinton, bekerja untuk saya. pastikan untuk menambahkan keduanya / *
RMati

74

Hanya menghapus s3:ListBucketizin bukanlah solusi yang cukup baik bagi saya, dan mungkin tidak bagi banyak orang lain.

Jika Anda menginginkan s3:ListBucketizin, Anda hanya perlu memiliki arn polos dari keranjang (tanpa /*di akhir) karena izin ini berlaku untuk keranjang itu sendiri dan bukan item di dalam keranjang.

Seperti yang ditunjukkan di bawah ini, Anda harus memiliki s3:ListBucketizin sebagai pernyataan terpisah dari izin yang berkaitan dengan item dalam keranjang seperti s3:GetObjectdan s3:PutObject:

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

Sepakat. Untuk beberapa tindakan, izin ListBucket diperlukan sebelum Anda dapat melakukan GetObject, jadi jawaban ini lebih menyeluruh.
3cheesewheel

2
Ini berfungsi untuk saya dan hanya menyoroti berapa banyak pekerjaan yang masih harus dilakukan AWS untuk memandu pengguna melakukan hal-hal dasar.
volvox

41

Tindakan Kesalahan tidak berlaku untuk sumber daya apa pun dalam pernyataan

Artinya, tindakan (yang Anda tulis di kebijakan) tidak berlaku untuk sumber daya. Saya mencoba untuk mempublikasikan keranjang saya sehingga siapa pun dapat mengunduh dari keranjang saya. Saya mendapatkan kesalahan sampai saya menghapus ("s3: ListBucket") dari pernyataan saya.

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

Karena keranjang daftar tidak berlaku di dalam keranjang, sehingga dengan menghapus kebijakan tindakan ini berfungsi dengan baik.


Terima kasih, itu berhasil untuk saya, menghapus "s3: ListBucket".
Paul Watson

14

Baru saja mengalami masalah ini dan menemukan solusi yang lebih singkat bagi mereka yang ingin memiliki ListBucket dan GetObject dalam kebijakan yang sama.

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

Salah - Tidak Principaldiperbolehkan untuk tata bahasa Kebijakan S3.
azec-pdx

Tidak ada solusi di atas yang berhasil untuk saya, Prinsipal tidak valid atau saya akan mendapatkan akses ditolak.
Daniel

Ini benar, dalam kasus ini, The Resource harus berupa array dan menyertakan 2 baris tersebut ... Beri suara.
Assil

4

Saya juga menghadapi masalah serupa saat membuat bucket

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

Saya telah mengubah kode di atas menjadi

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

tambahkan / * ke nama keranjang Anda, ini akan menyelesaikan masalah

Di sini nama keranjang saya adalah mrt9949


Terima kasih! Menghabiskan waktu lama untuk mencari ini
Jack_Hardy

4

Dalam kasus saya, solusi untuk kesalahan ini mencoba menghapus beberapa Tindakan yang saya terapkan. Beberapa di antaranya tidak relevan, atau tidak dapat berfungsi dengan sumber daya ini. Dalam hal ini, saya tidak mengizinkannya memasukkan ini:

GetBucketAcl ListBucket ListBucketMultipartUploads


ListBucket menangkapku! Terima kasih untuk ini
Quad64Bit

Bagi saya, bekerja hanya dengan menyimpan getObjet
LittleTiger

0

Anda harus memeriksa pola arn yang ditentukan di bawah tag Resource untuk Policy-

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

Dengan penambahan "/ *" di akhir akan membantu menyelesaikan masalah jika Anda menghadapinya bahkan setelah Kebijakan Akses Publik Anda Dibebaskan untuk Bucket Anda.


0
  • Buka Amazon S3 dalam instans Anda.
  • Buka Izin -> tab Akses Publik.
  • Pilih Edit dan hapus centang Blokir semua akses publik dan simpan.
  • Anda akan melihat tag 'Publik' di tab Izin dan Daftar Kontrol Akses.

0

Anda juga dapat mengkonfigurasi ListBuckets untuk setiap folder, seperti itu

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

Aturan ini digunakan bersama dengan SES untuk menerima email, tetapi memungkinkan pengguna eksternal untuk melihat file yang dimasukkan ke dalam keranjang oleh SES. Saya mengikuti instruksi dari sini: https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/

Selain itu, Anda harus menentukan awalan sebagai domain.co/user/WITH slash di bagian akhir saat menggunakan SDK, jika tidak, akses Anda akan ditolak. semoga bisa membantu siapa saja

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.