Apakah ada kebijakan S3 untuk membatasi akses hanya untuk melihat / mengakses satu keranjang?

123

Saya memiliki bucket sederhana yang terlihat seperti images.mysite.comdi S3 saya dan bucket lain yang berisi cadangan, dll.

Saya ingin mengizinkan pengguna tertentu untuk dapat mengakses images.mysite.comkeranjang untuk mengunggah gambar. Namun, saya TIDAK ingin dia melihat salah satu ember lainnya; bahkan tidak ada.

Saya tidak dapat membuat kebijakan yang melakukan ini; setiap kali saya mencoba sesuatu yang membatasi, itu akhirnya memblokir daftar keranjang apa pun.

Alex
sumber
Saya memberikan suara untuk menutup pertanyaan ini sebagai di luar topik karena seharusnya ada di Superusers
Tonny Madsen
Kebijakan dapat dibuat di sini di: awspolicygen.s3.amazonaws.com/policygen.html
Suhail Gupta
1
Mengapa tidak membagikan URL bucket - https://s3.console.aws.amazon.com/s3/buckets/my-bucket-name/. Dengan cara ini Anda mencegah mereka melihat seluruh daftar dan tidak mengubah apa pun pada kebijakan Anda saat ini.
treecoder

Jawaban:

119

Saya telah mencoba ini untuk sementara waktu dan akhirnya menemukan solusi yang berhasil. Anda harus menggunakan "Sumber Daya" yang berbeda bergantung pada jenis tindakan yang Anda lakukan. Juga saya menyertakan beberapa tindakan yang hilang dalam jawaban sebelumnya (seperti DeleteObject) dan membatasi beberapa lagi (seperti PutBucketAcl).

Kebijakan IAM berikut berfungsi untuk saya sekarang:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation",
        "s3:ListBucketMultipartUploads"
      ],
      "Resource": "arn:aws:s3:::itnighq",
      "Condition": {}
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion",
        "s3:GetObject",
        "s3:GetObjectAcl",
        "s3:GetObjectVersion",
        "s3:GetObjectVersionAcl",
        "s3:PutObject",
        "s3:PutObjectAcl",
        "s3:PutObjectVersionAcl"
      ],
      "Resource": "arn:aws:s3:::itnighq/*",
      "Condition": {}
    },
    {
      "Effect": "Allow",
      "Action": "s3:ListAllMyBuckets",
      "Resource": "*",
      "Condition": {}
    }
  ]
}

Tindakan yang terkait dengan keranjang dan yang terkait objek harus memiliki arn yang berbeda.

rogercampos
sumber
9
Ini jawaban yang bagus, terima kasih. Mungkin perlu diperhatikan bahwa implikasi dari izin s3: ListAllMyBuckets adalah penerima kebijakan ini dapat melihat semua keranjang (root) Anda. Tidak ada pengungkapan data secara langsung, tetapi mungkin ada sensitivitas / kebingungan seputar nama bucket. Anda dapat menghapus izin khusus ini dan semuanya masih berfungsi (meskipun "s3cmd ls" dll tidak akan mengembalikan keranjang target).
Mike Repass
91
Ini tidak mencegah pengguna untuk melihat nama keranjang lainnya!
metdos
2
@metdos Anda dapat mencegah pengguna melihat nama keranjang lain dengan menghapus kebijakan terakhir.
Hendra Uzia
20
Untuk melihat daftar bucket di konsol (dan karenanya menggunakan konsol untuk akses bucket) Anda harus memberikan ListAllMyBucketsdan GetBucketLocationuntuk semua bucket S3 ( "arn:aws:s3:::*"akan berfungsi daripada "*"untuk sumber daya). Seperti yang dinyatakan dalam entri blog AWS ini "sebagai tambahan, saat ini Anda tidak dapat memfilter bucket tertentu secara selektif, jadi pengguna harus memiliki izin untuk mencantumkan semua bucket untuk akses konsol."
jwadsack
10
Ini adalah nasihat yang mengerikan. Ini berbahaya dan khususnya apa yang tidak diinginkan OP. Lihat jawaban dari Andreas Stankewitz dan BFar untuk solusi yang memungkinkan.
AndreKR
37

Kasus penggunaan kami: Menyediakan ruang cadangan untuk klien aplikasi cloud kami yang dapat diakses oleh klien secara langsung menggunakan alat S3 umum. Tentu saja, tidak ada klien yang melihat apa yang dimiliki klien lain.

Seperti yang dijelaskan cloudberryman, "Anda dapat membuat daftar semua keranjang atau tidak sama sekali.", Jadi kita harus mencari solusi. Latar Belakang:

Memberikan hak ListAllMyBuckets kepada pengguna diperlukan agar konsol AWS S3 atau S3Fox terhubung tanpa pesan kesalahan. Tetapi ListAllMyBuckets mencantumkan semua keranjang, terkait sumber daya yang ditetapkan (sebenarnya, hanya arn: ... ::: * berfungsi). Itu bug yang serius, jika Anda bertanya kepada saya. Btw. menolak ListBucket untuk semua keranjang tidak mencegahnya untuk dicantumkan, karena ListBucket memberikan hak untuk mencantumkan konten keranjang.

Ada 3 kemungkinan yang saya anggap sebagai solusi. Saya memilih yang terakhir.

(1) gunakan nama bucket samar, misalnya GUID

Keuntungan: mudah diatur

Kerugian: sulit untuk dikelola, terutama untuk klien. (bayangkan menemukan GUID tertentu di antara ribuan lainnya.) Juga menunjukkan jumlah keranjang = jumlah klien yang menggunakan layanan cadangan.

(2) gunakan satu keranjang dengan folder khusus klien

Ini adalah bagaimana Amazon menyarankan melalui contoh S3 / IAM mereka untuk menyediakan ruang untuk diakses hanya oleh pengguna atau kelompok pengguna tertentu. Lihat: Contoh AWS Kebijakan IAM

Keuntungan: cukup mudah untuk disiapkan, sesuai dengan ide AWS

Kerugian: memaksa untuk membuat keberadaan semua bucket menjadi publik, sehingga klien dapat menemukan bucket "rumah" mereka. Akuntansi AWS menyediakan statistik penggunaan bucket, tetapi bukan penggunaan folder, yang mempersulit penghitungan biaya oleh klien.

(3) jangan berikan hak akses untuk ListAllMyBuckets

Keuntungan: Anda mendapatkan apa yang Anda inginkan: klien tidak dapat melihat keranjang klien lain

Kerugian: klien tidak dapat melihat keranjangnya sendiri. S3Browser hadir dengan pesan bagus "tidak dapat melakukan" dan meminta nama bucket untuk dimasukkan. S3Fox melontarkan pesan kesalahan saat menghubungkan ke root, tetapi memungkinkan navigasi langsung ke keranjang klien jika nama keranjang diketahui. Konsol Amazon S3 tidak berfungsi sama sekali.

Semoga ini membantu menangani S3 IAM saat Anda membutuhkannya.

Andreas Stankewitz
sumber
1
Selain itu, untuk Solusi (1) jika ingin menggunakan web hosting dengan bucket maka nama bucket harus sesuai dengan nama domain.
Andy Fusniak
31

Tidak mungkin menyediakan akses ke Konsol S3 tanpa memberikan ListAllMyBucketsizin.

Dalam kasus saya (dan mungkin kasus Anda juga, pembaca masa depan), alternatif yang dapat diterima adalah mengalihkan pengguna yang masuk langsung ke keranjang yang Anda ingin mereka lihat.

Untuk melakukannya, tambahkan baris berikut ke url masuk IAM Anda: /s3/?bucket=bucket-name

URL Masuk Lengkap (ganti alias dan nama keranjang Anda ):

https://your-alias.signin.aws.amazon.com/console/s3/?bucket=bucket-name

Kebijakan IAM (ganti nama keranjang ):

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::bucket-name",
                "arn:aws:s3:::bucket-name/*"
            ]
        }
    ]
}

Untuk informasi lebih lanjut tentang cara membuat izin khusus bucket bagi pengguna, baca blog ini: http://mikeferrier.com/2011/10/27/granting-access-to-a-single-s3-bucket-using-amazon-iam /

BFar
sumber
1
Ini bekerja dengan baik. Akan lebih optimal jika pengguna tidak dapat menjelajah di luar tampilan keranjang .... Tapi saya akan menerimanya. Terima kasih @BFar.
Jamie Popkin
Ini adalah jawaban SATU BENAR, yang lainnya akan mencantumkan setiap keranjang - yang harus disembunyikan sesuai permintaan asli.
Steve Horvath
Persis yang saya butuhkan. Terima kasih.
Di Zhang
20

Coba kebijakan ini. Juga pertimbangkan bahwa tidak ada cara untuk membiarkan daftar pengguna hanya keranjang yang dipilih. Anda dapat mencantumkan semua keranjang atau tidak sama sekali.

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:GetObjectAcl",
                "s3:PutObjectAcl",
                "s3:ListBucket",
                "s3:GetBucketAcl",
                "s3:PutBucketAcl",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::your_bucket_here/*",
            "Condition": {}
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "*",
            "Condition": {}
        }
    ]
}
cloudberryman
sumber
2
Ini bekerja dengan baik! Saya harus melakukan tindakan perubahan s3:*untuk membuatnya bekerja untuk saya. Saya juga punya "Resource": ["arn:aws:s3:::your_bucket_here", "arn:aws:s3:::your_bucket_here/*"], tapi ini mungkin tidak diperlukan.
Michael Yagudaev
3
s3: * memberikan akses untuk melakukan apa saja, termasuk menghapus keranjang. Yakin kamu mau itu?
Dave Gregory
10

Saya menafsirkan pertanyaan ini sebagai: "Dapatkah saya mengizinkan akses ke satu keranjang di mana keranjang lain tidak dapat diakses dan dengan demikian tidak terlihat." Sebab, menunjukkan nama bucket yang tidak diberi akses tetap sama dengan kebocoran informasi.

Dan jawaban yang benar adalah tidak. Izin yang diperlukan adalah ListAllMyBuckets yang akan memungkinkan pengguna untuk melihat SEMUA keranjang. Meninggalkan izin ini akan membuat konsol tidak dapat digunakan.


sumber
6

Ada cara yang bagus untuk memungkinkan pengguna mengakses keranjang tertentu tanpa harus memiliki pengetahuan tentang keranjang lain. Kebijakan grup seperti di bawah ini akan memungkinkan pengguna untuk hanya melihat "keranjang a". Satu-satunya tangkapan adalah bahwa pengguna hanya akan dapat mengakses keranjang jika mereka terhubung ke titik akhir keranjang yang diberikan. Untuk contoh di bawah ini adalah bucket-a.s3.amazonaws.com. Bucket mungkin juga harus mengizinkan "Pengguna yang Diautentikasi" agar hal ini terjadi.

{
    "Statement": [
     {
         "Sid": "<EXAMPLE_SID>",
         "Action": [
           "s3:ListBucket",
           "s3:GetBucketLocation"
          ],
         "Effect": "Allow",
         "Resource": [
           "arn:aws:s3:::bucket-a"
         ]
     },
     {
      "Sid": "<EXAMPLE_SID>",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucket-a/*"
      ]
     }
   ]
}

Metode ini telah diuji dengan Cyberduck di Mac OS / X dan menggunakan paket s3cmd

./s3cmd ls s3://bucket-a --access_key=ACCESS_KEY --secret_key=SECRET_KEY --bucket-locat
ion=ap-southeast-2
joevartuli
sumber
Saya masih bisa melihat daftar semua ember. Tidak bekerja :(
Rishikesh Chandra
5

Bingung mengapa tidak ada jawaban yang diperiksa?

Mari kita uraikan setiap pernyataan kebijakan dari solusi di atas:

Pernyataan kebijakan dari ini berlaku untuk konten bucket, tetapi bukan buck itu sendiri. Ini mungkin bukan pertanyaan yang ditanyakan, karena Anda tidak dapat melihat apa yang ada di keranjang.

{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:GetObjectAcl",
"s3:PutObjectAcl",
"s3:ListBucket",
"s3:GetBucketAcl",
"s3:PutBucketAcl",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::your_bucket_here/*",
"Condition": {}
}

Kebijakan dua pernyataan yang diturunkan dari ini memberikan akses hanya baca ke keranjang di ( arn:aws:s3:::your_bucket_here/) hanya baca , tetapi masih memungkinkan operasi CRUD pada konten keranjang ( arn:aws:s3:::your_bucket_here/*).

{
  "Effect": "Allow",
  "Action": [
    "s3:ListBucket",
    "s3:GetBucketLocation",
    "s3:ListBucketMultipartUploads"
  ],
  "Resource": "arn:aws:s3:::your_bucket_here",
  "Condition": {}
},
{
  "Effect": "Allow",
  "Action": [
    "s3:AbortMultipartUpload",
    "s3:DeleteObject",
    "s3:DeleteObjectVersion",
    "s3:GetObject",
    "s3:GetObjectAcl",
    "s3:GetObjectVersion",
    "s3:GetObjectVersionAcl",
    "s3:PutObject",
    "s3:PutObjectAcl",
    "s3:PutObjectAclVersion"
  ],
  "Resource": "arn:aws:s3:::your_bucket_here/*",
  "Condition": {}
}

Namun, kebijakan tersebut menyertakan pernyataan di bawah ini, yang memungkinkan pengguna melihat semua keranjang di titik akhir. Ini mungkin bukan pertanyaan yang ditanyakan.

{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*",
"Condition": {}
}

Namun, hal di atas sangat berguna jika Anda menggunakan klien yang menjelajah toko S3. Jika klien Anda mengakses store dan bukan bucket secara langsung, Anda memerlukan akses ke daftar bucket di root.

Donal Lafferty
sumber
3

Mungkin kasus penggunaan paling sederhana:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::bucket-name"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": ["arn:aws:s3:::bucket-name/*"]
    }
  ]
}
jjanczyszyn.dll
sumber
1
AWS menanggapi:This policy contains the following error: The policy must contain a valid version string
MaximeBernard
itu benar - Saya mengoreksi tanggapan saya -> <br/> hanya ada dua kemungkinan nilai di sini: <br/> * 2012-10-17 * dan 2008-10-17 . <br/> Referensi lebih lanjut dapat ditemukan di sini: <br/> docs.aws.amazon.com/IAM/latest/UserGuide/…
jjanczyszyn
Adakah gagasan tentang (listing included)arti bagaimana mencantumkan hanya keranjang yang diizinkan untuk dimasuki pengguna? Sejauh ini (dan menurut semua jawaban lainnya), tampaknya AWS tidak mengizinkan Anda melakukan itu.
MaximeBernard
3

Ada cara mudah atau solusi untuk melakukan ini menggunakan Organisasi AWS. Organisasi AWS memungkinkan Anda memiliki banyak akun pengguna. Akun utama Anda akan dapat memiliki beberapa akun AWS (Sub) dan layanan apa pun (s3 / EC2 / *) yang ditambahkan di akun AWS mana pun, hanya sumber daya tersebut yang akan terlihat.

Silakan lihat https://aws.amazon.com/blogs/aws/aws-organizations-policy-based-management-for-multiple-aws-accounts/ https://aws.amazon.com/organizations/

Organisasi Di halaman Akun Saya

Shaik Ismail
sumber
3

Saya menemukan solusi ini:
AWS FLOW:
AWS FLOW

Kebijakan ember:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::MyExampleBucket",
        "arn:aws:s3:::MyExampleBucket/*"
      ],
      "Condition": {
        "StringNotLike": {
          "aws:userId": [
            "AROAEXAMPLEID:*", #Role ID
            "111111111111" #AccountID
          ]
        }
      }
    }
  ]
}

Kebijakan IAM:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::MyExampleBucket",
        "arn:aws:s3:::MyExampleBucket/*"
      ],
      "Condition": {
        "StringNotLike": {
          "aws:userId": [
            "AROAEXAMPLEID:*",  #Role ID
            "AIDAEXAMPLEID",  #UserID
            "111111111111"  #AccountID
          ]
        }
      }
    }
  ]
}

aws iam get-user -–user-name USER-NAME --profile = ExampleProfile

aws iam get-role --role-name ROLE-NAME --profile = ExampleProfile

Sumber: https://aws.amazon.com/blogs/security/how-to-restrict-amazon-s3-bucket-access-to-a-specific-iam-role/

PS hati-hati dengan kebijakan ember, Anda bisa keluar tanpa izin

Constantin Paigin
sumber
2

Seperti yang telah dibahas dengan baik di atas, mencantumkan hanya satu keranjang di konsol tidak memungkinkan. Namun jika akses bucket S3 dilampirkan ke IAM, IAM dapat langsung mengakses bucket jika URL ke bucket tersedia. URL bucket S3 akan menjadi seperti ini:

https://s3.console.aws.amazon.com/s3/buckets/BucketName

Jika BucketName adalah nama keranjang yang dapat diakses IAM

Ishan Tomar
sumber
1
Saya pikir ini adalah satu-satunya solusi yang layak di tahun 2018 juga.
Saurabh
1

Saya berhasil mendapatkan yang berikut ini bekerja. Artinya, daftar keranjang lain menerima pesan Akses Ditolak. Tapi masih bisa melihat ember yang saya inginkan jika saya terhubung dengan nama ember yang ditetapkan sebagai jalur.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetBucketLocation",
        "s3:ListAllMyBuckets"
      ],
      "Resource": "arn:aws:s3:::test"
    },
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::test"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": ["arn:aws:s3:::test/*"]
    }
  ]
}

Saya menggunakan Cyberduck untuk menguji koneksi ini.

codeplay
sumber
1

Meskipun tidak mungkin membatasi s3:ListAllMyBucketstindakan ke keranjang tertentu, sebagai solusinya Anda dapat mengirimi mereka URL Konsol untuk wadah tertentu, misalnya

  • https://s3.console.aws.amazon.com/s3/buckets/BUCKET_NAME/

Sumber: Daftar pembatasan bucket S3 dari S3 Console

Untuk melakukan itu, Anda harus menentukan dokumen kebijakan berikut untuk pengguna atau grup tertentu:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:ListBucketMultipartUploads"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket-1",
                "arn:aws:s3:::my-bucket-2"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectVersion",
                "s3:GetObjectVersionAcl",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectVersionAcl"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket-1/*",
                "arn:aws:s3:::my-bucket-2/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        }
    ]
}

Di mana my-bucket-1dan my-bucket-2ember Anda untuk memberi akses baca dan tulis.

Terkait:

kenorb
sumber
1

Coba kebijakan ini. Pengguna tidak dapat mencantumkan keranjang apa pun, mereka harus menggunakan tautan langsung ke keranjang yang diizinkan.

Misalnya: s3.console.aws.amazon.com/s3/buckets/bucketname/?region=us-east-1&tab=overview

{
  "Statement": [
    {
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucketname"
      ]
    },
    {
      "Action": [
        "s3:PutObject",
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucketname*"
      ]
    },

  ],
  "Version": "2012-10-17"
}
Lam
sumber
1

Mirip dengan yang dijelaskan orang lain di atas:

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "s3:ListBucket"
         ],
         "Resource":"arn:aws:s3:::awsexamplebucket"
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:PutObject",
            "s3:GetObject"
         ],
         "Resource":"arn:aws:s3:::awsexamplebucket/*"
      }
   ]
}

Namun inilah bagian yang hilang. Meskipun tidak mungkin untuk mengakses bucket melalui S3-> Home, Anda hanya dapat mengakses bucket yang diinginkan melalui tautan langsung.

https://s3.console.aws.amazon.com/s3/buckets/yourawsbucket/

Anda dapat menemukan informasi lebih lanjut di posting berikut:

https://aws.amazon.com/premiumsupport/knowledge-center/s3-console-access-certain-bucket/

crandorf80s
sumber
0

Solusi di bawah ini berhasil untuk saya. Saya menginginkan kebijakan untuk memberikan akses ke pengguna tertentu my_iam_user di keranjang tertentu my-s3-bucket .

Kebijakan ini mengizinkan pengguna saya untuk membuat daftar, menghapus, dan mengambil file pada keranjang s3 tertentu.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListBucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/my_iam_user"
            },
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::my-s3-bucket"
        },
        {
            "Sid": "AddDeleteFiles",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/my_iam_user"
            },
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::my-s3-bucket/*"
        }
    ]
}
Carlos Coelho
sumber
0

Saya hanya menambahkan kebutuhan serupa, diselesaikan dengan ini:

{
  "Version": "2012-10-17",
  "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "s3:Get*",
            "s3:Put*",
            "s3:DeleteObject",
            "s3:ListBucket"
        ],
        "Resource": [
            "arn:aws:s3:::my-bucket-name",
            "arn:aws:s3:::my-bucket-name/*"
        ]
    }
  ]
}
Xavinsky
sumber
0

Saya menggunakan hal-hal berikut untuk menyembunyikan konten bucket dari pengguna lain. Ini tidak hanya membantu menyembunyikan keranjang lain (jangan gunakan ListAllMyBuckets), tetapi juga folder dalam keranjang yang sama, saat Anda membuat satu keranjang, tetapi ingin memiliki subfolder di dalamnya yang menetapkan izin yang tepat untuk Pengguna / subfolder IAM.

Kebijakan berikut ini diterapkan ke IAM Group dan semua pengguna ada di Grup ini. Anda perlu mengambil aws:useriddan membuat subfolder dengan nama yang sama di bucket.

UserID dapat diambil: aws iam get-user --user-name "user_name_for_folder_access":

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::bucket_name/${aws:userid}/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::bucket_name"
            ]
        }
    ]
}
Andrii Starikov
sumber
0

Solusi sederhana yang bagus yang kami buat adalah memblokir pengguna untuk masuk ke direktori root. Jadi mereka harus login dengan jalur jarak jauh yang diatur ke folder yang diinginkan.

 {
"Statement": [
    {
        "Effect": "Allow",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::folder-name*",
        "Condition": {}
    }
]
}
BERKEMBANG
sumber
0

Tidak, saat ini membatasi pengguna untuk melihat keranjang selektif di bawah root atau di mana pun tidak dapat dilakukan. Anda hanya memiliki 3 opsi itu sekarang.

Saya memilih untuk meminta klien menggunakan nama bucket secara eksplisit.

kacamata_kabut
sumber
-1

Ini bekerja dengan sempurna untuk saya. Pengguna dapat mengunggah, mengunduh, dan mendapatkan daftar file tetapi tidak akan dapat melihat file dari keranjang lain.

 {    

"Statement": [    

{
    "Effect": "Allow",
    "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:GetObjectAcl",
        "s3:PutObjectAcl",
        "s3:ListBucket",
        "s3:GetBucketAcl",
        "s3:PutBucketAcl",
        "s3:GetBucketLocation"
    ],
    "Resource": "arn:aws:s3:::mybucketname/*",
    "Condition": {}
},
{
    "Effect": "Allow",
    "Action": "s3:ListAllMyBuckets",
    "Resource": "*",
    "Condition": {}
},
{
    "Effect": "Deny",
    "Action": [
        "s3:DeleteBucket",
        "s3:DeleteBucketPolicy",
        "s3:DeleteBucketWebsite",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion"
    ],
    "Resource": "arn:aws:s3:::mybucketname/*",    

    "Condition": {}    

}
]
}      
s. tait
sumber
-2

Tambahkan Denyklausul untuk keranjang yang tidak ingin Anda akses. Ingatlah bahwa mereka mungkin masih terdaftar, tetapi Anda tidak akan dapat mengakses konten di dalamnya.

{
    "Versi": "2012-10-17",
    "Pernyataan": [
        {
            "Efek": "Izinkan",
            "Tindakan": "s3: *",
            "Resource": "*"
        },
        {
            "Efek": "Tolak",
            "Tindakan": "s3: *",
            "Resource": [
                "arn: aws: s3 ::: nama-keranjang",
                "arn: aws: s3 ::: nama-ember / *"
            ]
        }
    ]
}
treecoder
sumber
1
Anda harus memberikan akses ke sumber daya secara eksplisit. Ketika Anda secara default memberikan akses ke semua sumber daya, Anda dapat secara tidak sengaja menghilangkan sumber daya yang ingin Anda jadikan pribadi. Juga memberikan akses ke semua tindakan S3 berarti pengguna dapat membuat sumber daya menjadi publik atau menyiapkan hosting statis atau melakukan hal-hal berbahaya lainnya.
Ondrej Galbavý