2014-02-22 10 views
12

Ich versuche, die AssumeRole Funktion AWS M. in meinem PHP-Programm zu nennen, da ich temporäre Anmeldeinformationen erstellt werden soll, damit ein Benutzer ein Objekt für einen AWS Eimer erstellen.AWS AssumeRole Genehmigung arbeitet nicht

Unten finden Sie die fumction ich PHP nenne:

$sts = StsClient::factory(array(
       'key' => 'XXXXXXXXXXXXXX', 
       'secret' => 'XXXXXXXXXXXXXXXX', 
       'token.ttd' => $timetodie 
      ));    
    $bucket = "mybucket";    
      $result1 = $sts->assumeRole(array(   
       'RoleArn' => 'arn:aws:iam::123456789012:role/createPic', 
       'RoleSessionName' => 'mytest', 
       'Policy' => json_encode(array(
         'Statement' => array(
          array(
            'Sid' => 'Deny attributes', 
            'Action' => array(
            's3:deleteObject', 
            's3:deleteBucket' 
           ), 
            'Effect' => 'Deny', 
            'Resource' => array(
            "arn:aws:s3:::{$bucket}", 
            "arn:aws:s3:::{$bucket}/AWSLogs/*" 
           ), 
            'Principal' => array(
            'AWS' => "*" 
           ) 
          ) 
         ) 
        ) 
       ), 
       'DurationSeconds' => 3600, 
      // 'ExternalId' => 'string', 
      )); 

      $credentials = $result1->get('Credentials'); 

Allerdings halte ich die folgende Fehlermeldung erhalten:

Benutzer arn: aws: iam :: 123456789012: Benutzer/ist TVMUser nicht autorisiert durchführen: sts: AssumeRole auf Ressource: arn: aws: iam :: 123456789012: Rolle/createPic

Unten ist meine Berechtigung Politik für Benutzer TVMUser auf meiner AWS-Konsole:

Unten ist meine Rolle Politik für die Rolle createPic:

 { 
    "Version": "2012-10-17", 
"Statement": [ 
{ 
    "Action": [ 

    "s3:Get*", 
    "s3:List*", 
    "s3:Put*", 

    ], 
    "Effect": "Allow", 
    "Resource": "*" 
    }, 
{ 
    "Effect": "Allow", 

    "Action": "sts:AssumeRole", 
    "Resource": "arn:aws:iam::123456789012:role/createPic" 
} 
] 
} 

Hat jemand jetzt, was ich in meiner AWS politischen Erklärungen und Setup auf AWS bin fehlt also nicht den Fehler Ich erhalte: User arn: aws : iam :: 123456789012: user/TVMUser ist nicht zur Ausführung berechtigt: sts: AssumeRole auf Ressource: arn: aws: iam :: 123456789012: role/createPic?

Fehle ich etwas?

+2

Ich nehme an, die Ressource in der Erlaubnis assumeRole 791.758.789.361 ein Tippfehler ist und Sie meinen 123456789012. –

Antwort

32

Sie müssen auch die Vertrauensbeziehung für die Rolle bearbeiten, dem Konto zu ermöglichen (auch wenn es das gleiche ist), um die Rolle zu übernehmen.

  1. öffnen Sie die Rolle, die Sie in der Konsole
  2. Klick auf die „Vertrauensbeziehungen“ Tab
  3. Klick auf „Bearbeiten relationship“
  4. fügen Sie eine Erklärung für das Konto zu übernehmen wollen, die Sie wollen hinzufügen (normalerweise haben Sie nur den ec2-Dienst in den "Trusted Entities"), z

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/some-role" }, "Action": "sts:AssumeRole" } ] }

In diesem Beispiel musste ich die „AWS“ principal mit der richtigen Kontonummer hinzufügen, war der ec2.amazonaws.com Dienst schon da.

Nachdem ich getan habe, dass ich in der Lage war, die Rolle ohne Probleme zu übernehmen. Nahm mich buchstäblich Stunden, um das herauszufinden, hoffe, dass das jemandem helfen wird.

+1

Das war eine große Hilfe, danke. Für alle Interessierten ist dies [hier] dokumentiert (http://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-sharing-logs-third-party.html). Was nicht klar ist, ist, dass dies auch für das Konto geschehen muss, dem die Rolle gehört. –

+1

Alter, du bist ein Lebensretter. Es dauerte Stunden und ich konnte nicht herausfinden, warum ich abgelehnt wurde. – gkrizek

+0

Froh, dass es hilft. Btw Ich aktualisierte das Beispiel, um eine eingeschränktere Rolle als "root" zu verwenden, was aus Sicherheitsgründen besser ist. – jtblin

0

Vielleicht sollten Sie Ihre sts Region und Endpunkt zuweisen:

$sts = StsClient::factory(array(
    //...  
    'region' => 'us-west-2',                                            
    'endpoint' => 'https://sts.us-west-2.amazonaws.com', 
)); 
0

ich den gleichen Fehler hatte und verbrachte Stunden damit, es mit Berechtigungen beheben und Vertrauensbeziehungen ... aber das war nicht mein Problem. wie angegeben eingesetzt

Ich wurde nach this tutorial und ich den Cluster in West-USA (Oregon).

, damit es funktioniert, ich brauchte STS für diese Region here zu aktivieren.

enter image description here

Verwandte Themen