2016-04-05 15 views
0

AWS S3 arbeitet auf meinem localhost und auf meiner Live-Website, aber mein Entwicklungsserver (der GENAU die gleiche Konfiguration ist) wirft den folgenden Fehler: resulted in a 404 Not Found Antwort: Fehler beim Abrufen Anmeldeinformationen vom Instanzprofil-Metadatenserver.S3 putObject funktioniert nicht Zugriff verweigert

Localhost URL is http://localhost/example 
Live URL is http://www.example.com 
Development URL is http://dev.example.com 

Warum würde dies auf localhost und live funktionieren, aber nicht auf meinem Entwicklungsserver?

Hier ist mein Beispielcode:

$bucket = 'example' 
$s3Client = new S3Client([ 
       'region'=>'us-west-2', 
       'version'=>'2006-03-01', 
       'key'=>'xxxxxxxxxxxxxxxxxxxxxxxx', 
       'secret'=>'xxxxxxxxxxxxxxxxxxxxxxxx', 
      ]); 
      $uniqueFileName = uniqid().'.txt'; 
      $s3Client->putObject([ 
       'Bucket' => $bucket, 
       'Key' => 'dev/'.$uniqueFileName, 
       'Body' => 'this is the body!' 
      ]); 

Hier ist Politik:

{ 
"Version": "2012-10-17", 
"Id": "Policyxxxxxxxxx", 
"Statement": [ 
    { 
     "Sid": "Stmtxxxxxxxxx", 
     "Effect": "Allow", 
     "Principal": "*", 
     "Action": "s3:GetObject", 
     "Resource": "arn:aws:s3:::example/*" 
    } 
] 
} 
+0

Ich nehme an die xxx.xx.xxx.xx, die Sie redigiert haben, ist 169.254.169.254? –

+0

Ja, das ist richtig – LargeTuna

+0

Dies ist die Standard-IP-Adresse des virtuellen EC2-Metadatenservers, auf dem temporäre rollenbasierte richtlinienbasierte Anmeldeinformationen von Ihrer Anwendung oder von AWS-Bibliotheken abgerufen werden. Warum es auf localhost funktioniert, scheint ein großes Geheimnis zu sein, wenn alles identisch ist. Verwenden Sie Instanzenrollen? Sind die beiden EC2-Maschinen mit den gleichen Rollen konfiguriert? –

Antwort

0

Die von http://169.254.169.254/latest/meta-data/iam/security-credentials/ zurückgegebenen Werte werden mit der Rolle zugeordnet auf die Instanz EC2 zugeordnet, wenn die Instanz erste war gestartet.

Da Sie eine 404 Not Found Antwort erhalten, ist es wahrscheinlich, dass Ihr Entwicklungsserver keine zugewiesene Rolle hat. Sie können die EC2-Managementkonsole einchecken - klicken Sie einfach auf die Instanz, dann sehen Sie sich den Detailbereich an und finden Sie den Wert der Rolle.

Wenn Sie einen neuen Server starten möchten, der "vollständig" identisch ist, verwenden Sie den Befehl Starten Sie mehr wie dieser im Menü Aktionen. Es wird auch die Rolleneinstellung kopiert.

Verwandte Themen