Saya mendapatkan:
Terjadi kesalahan (AccessDenied) saat memanggil operasi ListObjects: Access Ditolak
Ketika saya mencoba untuk mendapatkan folder dari bucket S3 saya.
Menggunakan perintah ini:
aws s3 cp s3://bucket-name/data/all-data/ . --recursive
Izin IAM untuk bucket terlihat seperti ini:
{
"Version": "version_id",
"Statement": [
{
"Sid": "some_id",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::bucketname/*"
]
}
] }
Apa yang harus saya ubah untuk dapat copy
dan ls
berhasil?
amazon-web-services
amazon-s3
pengguna1411335
sumber
sumber
aws
untuk satu pengguna dan menggunakannya di dalam skrip bash yang disebut cronjob dari pengguna lain, yang berarti kunci akses dan token akses salah / tidak disetel. Solusi saya adalah langsung memasukkan kredensial (AWS_ACCESS_KEY_ID
danAWS_SECRET_ACCESS_KEY
) ke file skrip bash saya seperti yang dijelaskan di sini .Jawaban:
Anda telah memberikan izin untuk melakukan perintah pada objek di dalam bucket S3, tetapi Anda belum memberikan izin untuk melakukan tindakan apa pun pada bucket itu sendiri.
Mengubah sedikit kebijakan Anda akan terlihat seperti ini:
Namun, itu mungkin memberi lebih banyak izin daripada yang dibutuhkan. Mengikuti praktik terbaik AWS IAM dari Pemberian Least Privilege akan terlihat seperti ini:
sumber
"Resource": [ "arn:aws:s3:::bucketname/", "arn:aws:s3:::bucketname/*" ]
seperti yang saya lakukan (yaitu Anda hanya ingin tebasan sebelum*
) - perlu waktu 4 jam untuk menyadari kesalahan ini menyebabkan semualistObjects
panggilan saya gagal ...Jika Anda ingin menyalin semua objek s3 bucket menggunakan perintah "aws s3 cp s3: // bucket-name / data / all-data /. --Recursive" seperti yang Anda sebutkan, berikut adalah kebijakan aman dan minimal untuk melakukan itu:
Pernyataan pertama dalam kebijakan ini memungkinkan untuk mendaftarkan objek di dalam sub direktori ember tertentu. Sumber daya perlu menjadi arn dari bucket S3, dan untuk membatasi daftar hanya pada sub-direktori dalam bucket tersebut Anda dapat mengedit nilai "s3: prefix".
Pernyataan kedua dalam kebijakan ini memungkinkan untuk memasukkan benda ke dalam ember di sub-direktori tertentu. Ini berarti bahwa apa pun di dalam jalur "s3: // bucket-name / data / all-data /" Anda akan dapat menyalin. Ketahuilah bahwa ini tidak memungkinkan Anda untuk menyalin dari jalur induk seperti "s3: // bucket-name / data /".
Solusi ini khusus untuk membatasi penggunaan perintah AWS CLI; jika Anda perlu membatasi akses S3 melalui konsol AWS atau API, maka diperlukan lebih banyak kebijakan. Saya sarankan melihat di sini: https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/ .
Masalah serupa dengan ini dapat ditemukan di sini yang menuntun saya ke solusi yang saya berikan. https://github.com/aws/aws-cli/issues/2408
Semoga ini membantu!
sumber
ListBucket
ke subkunci: stackoverflow.com/a/35952877/89218Anda harus menentukan Sumberdaya untuk bucket melalui "arn: aws: 3 ::: bucketname" atau "arn: aws: 3 ::: bucketname *". Yang terakhir lebih disukai karena memungkinkan manipulasi pada objek ember juga. Perhatikan tidak ada garis miring!
Objek daftar adalah operasi di Bucket. Karenanya, tindakan "s3: ListBucket" diperlukan. Menambahkan objek ke Bucket adalah operasi di Object. Oleh karena itu, tindakan "s3: PutObject" diperlukan. Tentu saja, Anda mungkin ingin menambahkan tindakan lain sesuai kebutuhan.
sumber
arn:aws:s3:::bucketname*
adalah bahwa ia juga memungkinkan akses kearn:aws:s3:::bucketname-with-suffix
Saya tidak dapat mengakses S3 karena
Solusi:,
rm -rf .aws/credentials
laluaws
gunakan peran.sumber
Saya mendapat kesalahan yang sama ketika menggunakan kebijakan seperti di bawah ini, walaupun saya memiliki "s3: ListBucket" untuk s3: operasi ListObjects.
Kemudian saya memperbaikinya dengan menambahkan satu baris "arn: aws: s3 ::: bucketname"
sumber
Saya berpikir kesalahannya adalah karena tindakan "s3: ListObjects" tetapi saya harus menambahkan tindakan "s3: ListBucket" untuk menyelesaikan masalah "AccessDenied untuk ListObjects untuk bucket S3"
sumber
Saya menghadapi masalah yang sama. Saya baru saja menambahkan konfigurasi kredensial:
ke "~ / .aws / credentials" + restart terminal untuk profil default.
Dalam kasus multi profil --profile arg perlu ditambahkan:
tempat PROFILE_NAME :
Info lebih lanjut tentang cara mengkonfigurasi kredensial dan multi profil dapat ditemukan di sini
sumber
Saya mencoba yang berikut ini:
Ini memberi saya kesalahan:
Menggunakan formulir ini berhasil:
sumber
Saya menambahkan jawaban dengan arah yang sama dengan jawaban yang diterima tetapi dengan perbedaan kecil (penting) dan menambahkan lebih banyak detail.
Pertimbangkan konfigurasi di bawah ini:
Kebijakan hibah program write-delete akses dan dipisahkan menjadi dua bagian:
The
ListBucket
tindakan menyediakan akses pada ember tingkat dan lainnyaPutObject/DeleteObject
tindakan memerlukan izin pada benda di dalam ember.Path menetapkan unsur Sumber Daya pertama
arn:aws:s3:::<Bucket-Name>
untukListBucket
tindakan sehingga aplikasi bisa daftar semua objek dalam ember.Elemen Sumber Daya kedua menentukan
arn:aws:s3:::<Bucket-Name>/*
untukPutObject
, danDeletObject
tindakan sehingga aplikasi dapat menulis atau menghapus objek apa pun dalam ember.Pemisahan menjadi dua 'arn' yang berbeda penting dari alasan keamanan untuk menentukan izin tingkat butiran halus dan tingkat objek.
Perhatikan bahwa jika saya telah menentukan hanya
GetObject
di blok 2 apa yang akan terjadi adalah bahwa dalam kasus akses terprogram saya akan menerima kesalahan seperti:Upload failed: <file-name> to <bucket-name>:<path-in-bucket> An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
.sumber
Berlari ke masalah yang sama, bagi saya masalahnya adalah bahwa saya memiliki kunci AWS yang berbeda di bash_profile saya.
Saya menjawab pertanyaan serupa di sini: https://stackoverflow.com/a/57317494/11871462
Jika Anda memiliki kunci AWS yang bertentangan di bash_profile Anda, AWS CLI secara default memilih ini.
sumber
Saya memiliki masalah ini, kebutuhan saya, saya ingin mengizinkan pengguna untuk menulis ke jalur tertentu
dan masalah terpecahkan dengan perubahan ini
sumber