Amazon S3'ten indirmek için aws cli kullanırken, Erişim Engellendi'nin nedeni nedir?


57

Gerçekten neyi kaçırdığımı anlamaya çalışarak AWS’de etrafta dolaşıyorum. Bir IAM kullanıcısının bir S3 kovasından dosyaları indirebilmesi için - dosyaları tamamen genel hale getirmeden - yapmak istiyorum ancak erişim reddedildi. Biri neyin kapalı olduğunu anlayabiliyorsa stoklanmayacağım.

Şimdiye kadar ne yaptım:

  • My-user adlı bir kullanıcı yarattı (örnek olarak)
  • Kullanıcı için oluşturulan erişim anahtarları ve bir EC2 örneğinde ~ / .aws içine koyun
  • Kullanıcıma erişim izni vermesini umduğum bir kova politikası oluşturdu
  • Komutu koştu aws s3 cp --profile my-user s3://my-bucket/thing.zip .

Kova politikası:

{
  "Id": "Policy1384791162970",
  "Statement": [
    {
      "Sid": "Stmt1384791151633",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::my-bucket/*",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:user/my-user"
      }
    }
  ]
}

Sonuçta A client error (AccessDenied) occurred: Access Deniedaynı komutu ve varsayılan (root hesabı?) Erişim tuşlarını kullanarak indirebilirim.

Bir kullanıcı politikası eklemeyi de denedim. Neden gerekli olacağını bilmeme rağmen, incinmeyeceğini düşündüm, bu yüzden bunu kullanıcıma ekledim.

{
  "Statement": [
    {
      "Sid": "Stmt1384889624746",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::my-bucket/*"
    }
  ]
}

Aynı sonuç

Yanıtlar:


39

Ben de bununla mücadele ediyordum, ancak bu sorunun benim için çözülmesine yardımcı olan https://stackoverflow.com/a/17162973/1750869 adresinde bir cevap buldum . Aşağıdaki cevabı tekrar gönder.


Herkese izin vermek zorunda değilsin. Bir IAM kullanıcısı kullanarak bir hesaptaki bir kovadan diğerine kopyalamak için kaynak ve hedef üzerindeki aşağıdaki Kova ilkelerini kullanın

Kopyalanacak Kova - SourceBucket

Kopyalanacak Kova - DestinationBucket

Kaynak AWS Hesap Kimliği - XXXX – XXXX-XXXX

Kaynak IAM Kullanıcısı - src – iam kullanıcısı

Aşağıdaki politika şu anlama gelir - IAM kullanıcısı - XXXX – XXXX-XXXX: src – iam kullanıcısı s3: ListBucket ve s3: SourceBucket / * üzerindeki GetObject ayrıcalıkları ve * ve s3: ListBucket ve s3: DestinationBucket / * üzerindeki PutObject ayrıcalıkları

SourceBucket'te politika şöyle olmalıdır:

{
"Id": "Policy1357935677554",
"Statement": [
    {
        "Sid": "Stmt1357935647218",
        "Action": [
            "s3:ListBucket"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::SourceBucket",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
    },
    {
        "Sid": "Stmt1357935676138",
        "Action": ["s3:GetObject"],
        "Effect": "Allow",
        "Resource": "arn:aws:s3::: SourceBucket/*",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
   }
]
}

Hedef Hedefinde, politika şöyle olmalıdır:

{
"Id": "Policy1357935677554",
"Statement": [
    {
        "Sid": "Stmt1357935647218",
        "Action": [
            "s3:ListBucket"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3::: DestinationBucket",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
    },
    {
        "Sid": "Stmt1357935676138",
        "Action": ["s3:PutObject"],
        "Effect": "Allow",
        "Resource": "arn:aws:s3::: DestinationBucket/*",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
   }
]
}

çalıştırılacak komut s3cmd cp s3://SourceBucket/File1 s3://DestinationBucket/File1


1
Aman Tanrım, sen benim kahramanımsın. Sadece liste düzeyinde ListBucket iznini kaçırıyordum. Bir nesneyi kopyalamak için neden kovaya ihtiyacım olduğunu hala bilmiyorum ama sorun değil. Belki de sadece aws komutunu kullanmak bir tuhaflıktır?
Josh Gagnon

Evet, oldukça garip. Tek bir s3 politikasına sahip olduğunuzu düşünebilirsiniz: * (ancak güvensiz olabilir) akıl sağlığı testi için yeterli olacaktır.
Sergio

fml, bu ListBucket izni için 2 gün boşa. iyi yakalamak
chaqke

Çok zaman geçirdim .. Bu gerekli cevaptı. ListBucket - bucketname, GetObject - bucketname / *
rsmoorthy

12

Aynı sorunla karşılaştığımda, AWS'nin sunucu tarafında şifrelemenin etkin olmasını gerektirdiği ortaya çıktı. Bu yüzden aşağıdaki komut benim için başarılı bir şekilde çalıştı:

aws s3 cp test.txt s3://my-s3-bucket --sse AES256

3
Teşekkürler! Benim durumumda --sse aws:kms"varsayılan" kepçeyi kullanmak vardı ...
Michael Yoo

Varsayılan olmayan bir KMS anahtarı kullanıyorsanız, bunu da iletmeniz gerekir: --sse-kms-key-id 0123-abc-etc Ancak, net olmayan kısım, kendi KMS anahtarınızı kullanmak için IAM iznine sahip olmanız kms:GenerateDataKeyveya hala reddedilmiş olmanız gerekir .
digarok

Soru, İndir hakkında. Şifrelenmiş bir S3'e yükleme yapıyorsunuz, bu nedenle anahtarın şartı.
Ilhicas

4

James tarafından belirtilen 'Kimliği doğrulanmış herhangi bir AWS kullanıcısı' seçeneğini tavsiye etmem.

Bunu yapmak, herhangi bir AWS hesabının (yalnızca IAM kullanıcılarınız değil) o kepçe için listelemelerine / silmelerine / değiştirmelerine izin veren bir kova düzeyinde ACL ekler.

Bir kamu hesabı, aws hesabı olan herkes için okuma / yazma.


Bunu test ettin mi? AWS hesabının aslında kuruluşumla olan herhangi bir varlık - yani bir kullanıcı, bir EC2 örneği, bir IAM rolü, ancak farklı bir hesaptaki bir kişi olmadığı izlenimi altındaydım. Yanılıyor olabilirim, katkımı düzenleyeceğim ve bu durumda kovalarımı hızla denetleyeceğim. Teşekkürler.
James Dunmore,

1
Evet. S3 ACL'lerinde "Kimliği Doğrulanmış Kullanıcı" izni alan tüm AWS hesaplarını ifade eder. İmzalı istekleri zorlar, fakat başka bir şey yapmaz. İşte bir referans: link
Andrew,

3

Bunu polise yazmak zorunda kalmadan düzeltmeyi başardım - S3 konsolundan (web kullanıcı arayüzü) Kepçeyi seçtim ve izinler sekmesinde "Herhangi Doğrulanmış Bir AWS Kullanıcısı" seçtim ve tüm kutuları işaretledim.

GÜNCELLEME: "Herhangi bir Kimliği Doğrulanmış AWS Kullanıcısı" yorumunda belirtildiği gibi, yalnızca hesabınızdaki kullanıcılar değil, hepsi AWS onaylı kullanıcı, lütfen dikkatli kullanın


Bunun senin için bir politika oluşturduğunu hayal ediyorum. Tüm kutuları işaretlemek, sizi ListBucket vb.
Josh Gagnon

Öyle olduğuna eminim - sadece yazma politikalarının bir acı olabileceğini biliyorum, bu onay kutuları size biraz daha fazlasını verebilir, ancak hızlı bir düzeltme
James Dunmore

2

IAM politikalarınız doğru ayarlanmış olsa bile An error occurred (AccessDenied) when calling the <OPERATION-NAME> operation: Access Denied, kimlik bilgilerinizdeki MFA (Çok Faktörlü Kimlik Doğrulama) gereksinimleri gibi bir hata alabilirsiniz . Bunlar, sizi AWS konsoluna önceden giriş yaptıysanız, kimlik bilgilerinizin iyi çalıştığını ve aws cli'daki izin reddedilen hata iletisinin özellikle yararlı olmadığını gösterir.

MFA'yı aws cli ile nasıl kuracağınızla ilgili bazı iyi talimatlar var:

Temel olarak, MFA cihazınızın adresini almanız ve bunu geçici bir simge almak için cihazınızdaki kodla göndermeniz gerekir.


Benim gün kardeşimi kurtardın!
Shintaroid

Yas, sebep bu! Neden AWS çıktıda bu nedeni göstermedi?
tommy.qichang

0

Ben sadece web kullanıcılarına gittim ve kepçeye tıkladım, sonra izinlere gittim ve sonra poliçeye gittim. Açtığımda sil düğmesine tıkladım. Bunu ben de yapılandırdım diye düşünüyorum.

Ana s3 sayfasına geri döndüm, daha sonra kovayı tıkladım ve silmeye çalıştım ve çalıştı.

aws-cli kullanarak yaptım bile

$ aws s3 rb s3://bucket-name --force  

Neyse, bu benim için işe yarayan şeydi. İzinlerle ilgili politika, kepçeyi silmenizi engelliyor.


0

Bir keresinde, sadece çalıştırmayı deneyerek bu hatayı aldım:

aws s3 cp s3://[bucketName]/[fileName] .

izinlerin olmadığı bir klasörde. Aptalca ama devam etmeden önce içinde bulunduğunuz klasörün sahibi olduğunuzdan emin olun!


0

Sorun, geçersiz kaynak veya nesne adları eklediğinizde ortaya çıkıyor.

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.