Kabul edilen yanıtla aynı yönde ancak küçük (önemli) farklılıklar içeren ve daha fazla ayrıntı ekleyen bir yanıt ekliyorum.
Aşağıdaki yapılandırmayı düşünün:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::<Bucket-Name>"]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": ["arn:aws:s3:::<Bucket-Name>/*"]
}
]
}
Politika programlı verir yazma-silme erişimi ve iki bölüme ayrılır: aksiyon kova düzeyinde izinleri sağlar ve diğer eylemler Kovanın içindeki nesnelerin izinlerini gerektirir.
ListBucket
PutObject/DeleteObject
İlk Kaynak öğesi , uygulamaların paketteki tüm nesneleri listeleyebilmesi arn:aws:s3:::<Bucket-Name>
için ListBucket
eylemi belirtir .
İkinci Kaynak öğesi , uygulamaların paketteki nesneleri yazabilmesi veya silebilmesi arn:aws:s3:::<Bucket-Name>/*
için PutObject
, ve DeletObject
eylemlerini belirtir .
Paket düzeyinde ve nesne düzeyinde ayrıntılı izinleri belirtmek için güvenlik nedenlerinden ötürü iki farklı "saat" e ayrılması önemlidir.
Sadece GetObject
2. blokta belirtmiş olsaydım ne olurdu, programlı erişim durumunda aşağıdaki gibi bir hata alırdım:
Upload failed: <file-name> to <bucket-name>:<path-in-bucket> An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
.
aws
bir kullanıcı için yapılandırdım ve bunu başka bir kullanıcıdan cronjob adı verilen bash betiği içinde kullandım, yani erişim anahtarı ve erişim belirteci yanlıştı / ayarlanmadı. Çözümüm, kimlik bilgilerini (AWS_ACCESS_KEY_ID
veAWS_SECRET_ACCESS_KEY
) burada açıklandığı gibi doğrudan bash komut dosyama koymaktı .