Nimm eine IAM Rolle an - AWS SDK for PHP

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Nimm eine IAM Rolle an

IAMRollen für EC2 Amazon-Instance-Variablenanmeldedaten verwenden

Wenn Sie Ihre Anwendung auf einer EC2 Amazon-Instance ausführen, besteht die bevorzugte Methode zur Bereitstellung von Anmeldeinformationen für Aufrufe AWS darin, eine IAMRolle zu verwenden, um temporäre Sicherheitsanmeldeinformationen abzurufen.

Wenn Sie IAM Rollen verwenden, müssen Sie sich keine Gedanken über die Verwaltung der Anmeldeinformationen in Ihrer Anwendung machen. Sie ermöglichen es einer Instance, eine Rolle zu „übernehmen“, indem sie temporäre Anmeldeinformationen vom Metadatenserver der EC2 Amazon-Instance abruft.

Die temporären Anmeldeinformationen, die oft als Anmeldeinformationen für das Instance-Profil bezeichnet werden, ermöglichen den Zugriff auf die Aktionen und Ressourcen, die die Rollenrichtlinie zulässt. Amazon EC2 kümmert sich um die sichere Authentifizierung von Instances gegenüber dem IAM Service, um die Rolle zu übernehmen, und um die regelmäßige Aktualisierung der abgerufenen Rollenanmeldedaten. Damit bleibt Ihre Anwendung sicher, ohne dass Sie selbst etwas tun müssen. Eine Liste der Services, die temporäre Sicherheitsanmeldedaten akzeptieren, finden Sie IAM im IAMBenutzerhandbuch unter AWS Services that work with.

Anmerkung

Um zu vermeiden, dass jedes Mal der Metadatenservice benötigt wird, kann eine Instance von Aws\CacheInterface als 'credentials'-Option an einen Client-Konstruktor übergeben werden. Dadurch können sie stattdessen zwischengespeicherte Anmeldeinformationen für das Instanzprofil SDK verwenden. Einzelheiten finden Sie unter Konfiguration für AWS SDK for PHP Version 3.

Weitere Informationen zur Entwicklung von EC2 Amazon-Anwendungen mithilfe von finden Sie unter IAMRollen für EC2 Amazon-Instances verwenden im AWS SDKsund im Tools-Referenzhandbuch. SDKs

Erstellen Sie eine IAM Rolle und weisen Sie sie einer EC2 Amazon-Instance zu

  1. Erstellen Sie einen IAM-Client.

    Importe

    require 'vendor/autoload.php'; use Aws\Iam\IamClient;

    Beispiel-Code

    $client = new IamClient([ 'region' => 'us-west-2', 'version' => '2010-05-08' ]);
  2. Erstellen Sie eine IAM Rolle mit den Berechtigungen für die Aktionen und Ressourcen, die Sie verwenden werden.

    Beispiel-Code

    $result = $client->createRole([ 'AssumeRolePolicyDocument' => 'IAM JSON Policy', // REQUIRED 'Description' => 'Description of Role', 'RoleName' => 'RoleName', // REQUIRED ]);
  3. Erstellen Sie ein IAM Instance-Profil und speichern Sie den Amazon-Ressourcennamen (ARN) aus dem Ergebnis.

    Anmerkung

    Wenn Sie die IAM Konsole anstelle von verwenden AWS SDK for PHP, erstellt die Konsole automatisch ein Instance-Profil und gibt ihm den gleichen Namen wie die Rolle, der es entspricht.

    Beispiel-Code

    $IPN = 'InstanceProfileName'; $result = $client->createInstanceProfile([ 'InstanceProfileName' => $IPN , ]); $ARN = $result['Arn']; $InstanceID = $result['InstanceProfileId'];
  4. Erstellen Sie einen EC2 Amazon-Client.

    Importe

    require 'vendor/autoload.php'; use Aws\Ec2\Ec2Client;

    Beispiel-Code

    $ec2Client = new Ec2Client([ 'region' => 'us-west-2', 'version' => '2016-11-15', ]);
  5. Fügen Sie das Instance-Profil zu einer laufenden oder angehaltenen EC2 Amazon-Instance hinzu. Verwenden Sie den Instance-Profilnamen Ihrer IAM Rolle.

    Beispiel-Code

    $result = $ec2Client->associateIamInstanceProfile([ 'IamInstanceProfile' => [ 'Arn' => $ARN, 'Name' => $IPN, ], 'InstanceId' => $InstanceID ]);

Weitere Informationen finden Sie unter IAMRollen für Amazon EC2 im EC2Amazon-Benutzerhandbuch.

IAMRollen für ECS Amazon-Aufgaben verwenden

Eine Aufgabe in Amazon Elastic Container Service (AmazonECS) kann eine IAM Rolle beim Tätigen von AWS API Aufrufen übernehmen. Dies ist eine Strategie zur Verwaltung der Anmeldeinformationen, die Ihre Anwendungen verwenden sollen, ähnlich wie EC2 Amazon-Instance-Profile Anmeldeinformationen für EC2 Amazon-Instances bereitstellen.

Anstatt langfristige AWS Anmeldeinformationen zu erstellen und an Container zu verteilen oder die Rolle der EC2 Amazon-Instance zu verwenden, können Sie eine IAM Rolle, die temporäre Anmeldeinformationen verwendet, einer ECS Aufgabendefinition oder einem RunTask APIVorgang zuordnen.

Weitere Informationen zur Verwendung von IAM Rollen, die Container-Tasks annehmen können, finden Sie unter dem Thema IAMAufgabenrolle im Amazon ECS Developer Guide. Beispiele für die Verwendung der IAM Aufgabenrolle in Form einer taskRoleArn in Aufgabendefinitionen finden Sie unter Beispielaufgabendefinitionen ebenfalls im Amazon ECS Developer Guide.

Eine IAM Rolle in einer anderen übernehmen AWS-Konto

Wenn Sie in einem AWS-Konto (Konto A) arbeiten und eine Rolle in einem anderen Konto (Konto B) übernehmen möchten, müssen Sie zunächst eine IAM Rolle in Konto B erstellen. Diese Rolle ermöglicht es Entitäten in Ihrem Konto (Konto A), bestimmte Aktionen in Konto B durchzuführen. Weitere Informationen zum kontoübergreifenden Zugriff finden Sie unter Tutorial: Kontoübergreifendes Delegieren des Zugriffs mithilfe von IAM Rollen. AWS

Nachdem Sie eine Rolle in Konto B erstellt haben, notieren Sie die Rolle. ARN Sie verwenden dies, ARN wenn Sie die Rolle von Konto A aus übernehmen. Sie übernehmen die Rolle mit den AWS Anmeldeinformationen, die Ihrer Entität in Konto A zugeordnet sind.

Erstellen Sie einen AWS STS Client mit Anmeldeinformationen für Ihren AWS-Konto. Im Folgenden wird hierzu ein Anmeldeinformationsprofil verwendet, aber Sie können eine beliebige Methode nutzen. Rufen Sie mit dem neu erstellten AWS STS Client assume-role auf und geben Sie einen benutzerdefinierten Client an. sessionName Rufen Sie die neuen temporären Anmeldeinformationen aus dem Ergebnis ab. Die Anmeldedaten sind standardmäßig für eine Stunde gültig.

Beispiel-Code

$stsClient = new Aws\Sts\StsClient([ 'profile' => 'default', 'region' => 'us-east-2', 'version' => '2011-06-15' ]); $ARN = "arn:aws:iam::123456789012:role/xaccounts3access"; $sessionName = "s3-access-example"; $result = $stsClient->AssumeRole([ 'RoleArn' => $ARN, 'RoleSessionName' => $sessionName, ]); $s3Client = new S3Client([ 'version' => '2006-03-01', 'region' => 'us-west-2', 'credentials' => [ 'key' => $result['Credentials']['AccessKeyId'], 'secret' => $result['Credentials']['SecretAccessKey'], 'token' => $result['Credentials']['SessionToken'] ] ]);

Weitere Informationen finden Sie unter IAMRollen verwenden oder AssumeRolein der AWS SDK for PHP API Referenz.

Eine IAM Rolle mit Webidentität verwenden

Web Identity Federation ermöglicht es Kunden, beim Zugriff auf AWS Ressourcen Identitätsanbieter von Drittanbietern für die Authentifizierung zu verwenden. Bevor Sie eine Rolle bei Web Identity übernehmen können, müssen Sie eine IAM Rolle erstellen und einen Web Identity Provider (IdP) konfigurieren. Weitere Informationen finden Sie unter Erstellen von Rollen für Web-Identität oder OpenID Connect-Verbund (Konsole).

Nachdem Sie einen Identitätsanbieter und eine Rolle für Ihre Web-Identität erstellt haben, verwenden Sie einen AWS STS Client, um einen Benutzer zu authentifizieren. Geben Sie das webIdentityToken und ProviderId für Ihre Identität und die Rolle ARN für die IAM Rolle mit den Berechtigungen für den Benutzer an.

Beispiel-Code

$stsClient = new Aws\Sts\StsClient([ 'profile' => 'default', 'region' => 'us-east-2', 'version' => '2011-06-15' ]); $ARN = "arn:aws:iam::123456789012:role/xaccounts3access"; $sessionName = "s3-access-example"; $duration = 3600; $result = $stsClient->AssumeRoleWithWebIdentity([ 'WebIdentityToken' => "FACEBOOK_ACCESS_TOKEN", 'ProviderId' => "graph.facebook.com", 'RoleArn' => $ARN, 'RoleSessionName' => $sessionName, ]); $s3Client = new S3Client([ 'version' => '2006-03-01', 'region' => 'us-west-2', 'credentials' => [ 'key' => $result['Credentials']['AccessKeyId'], 'secret' => $result['Credentials']['SecretAccessKey'], 'token' => $result['Credentials']['SessionToken'] ] ]);

Weitere Informationen finden Sie unter AssumeRoleWithWebIdentity—Verbund über einen webbasierten Identitätsanbieter oder AssumeRoleWithWebIdentityin der AWS SDK for PHP API Referenz.

Nehmen Sie die Rolle mit dem Profil an

Definieren Sie Profile in ~/.aws/credentials

Sie können die AWS SDK for PHP für die Verwendung einer IAM Rolle konfigurieren, indem Sie ein Profil in definieren~/.aws/credentials.

Erstellen Sie ein neues Profil mit der role_arn Einstellung für die Rolle, die Sie übernehmen möchten. Fügen Sie auch die source_profile Einstellung für ein anderes Profil mit Anmeldeinformationen hinzu, die berechtigt sind, die IAM Rolle zu übernehmen. Weitere Informationen zu diesen Konfigurationseinstellungen finden Sie unter Annehmen von Rollenanmeldedaten im Referenzhandbuch AWS SDKsund im Tools-Referenzhandbuch.

Im Folgenden legt das Profil ~/.aws/credentials beispielsweise das project1 Profil fest role_arn und gibt das default Profil als Quelle für Anmeldeinformationen an, um zu überprüfen, ob die mit ihnen verknüpfte Entität die Rolle übernehmen kann.

[project1] role_arn = arn:aws:iam::123456789012:role/testing source_profile = default role_session_name = OPTIONAL_SESSION_NAME [default] aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID aws_secret_access_key = YOUR_AWS_SECRET_ACCESS_KEY aws_session_token= YOUR_AWS_SESSION_TOKEN

Wenn Sie die AWS_PROFILE Umgebungsvariable festlegen oder bei der Instanziierung eines Dienstclients profile Parameter verwenden, wird die in angegebene Rolle übernommen, wobei das default Profil als Quellanmeldeinformationen verwendet project1 wird.

Der folgende Ausschnitt zeigt die Verwendung des profile Parameters in einem Konstruktor. S3Client S3ClientSie werden über die Berechtigungen verfügen, die der Rolle zugeordnet sind, die dem Profil zugeordnet ist. project1

$s3 = new Aws\S3\S3Client([ 'region' => 'us-east-1', 'version' => '2006-03-01', 'profile' => 'project1' ]);

Definieren Sie Profile in ~/.aws/config

Die ~/.aws/config Datei kann auch Profile enthalten, von denen Sie annehmen möchten. Wenn Sie die Umgebungsvariable festlegenAWS_SDK_LOAD_NONDEFAULT_CONFIG, PHP lädt SDK for Profile aus der config Datei. Wenn gesetzt AWS_SDK_LOAD_NONDEFAULT_CONFIG ist, werden Profile sowohl von als ~/.aws/config auch SDK geladen~/.aws/credentials. Profile von ~/.aws/credentials werden zuletzt geladen und haben Vorrang vor Profilen von ~/.aws/config mit demselben Namen. Profile aus beiden Speicherorten können als source_profile oder als das zu übernehmende Profil dienen.

Im folgenden Beispiel werden das in der config Datei definierte project1 Profil und das default Profil in der credentials Datei verwendet. Das AWS_SDK_LOAD_NONDEFAULT_CONFIG ist ebenfalls festgelegt.

# Profile in ~/.aws/config. [profile project1] role_arn = arn:aws:iam::123456789012:role/testing source_profile = default role_session_name = OPTIONAL_SESSION_NAME
# Profile in ~/.aws/credentials. [default] aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID aws_secret_access_key = YOUR_AWS_SECRET_ACCESS_KEY aws_session_token= YOUR_AWS_SESSION_TOKEN

Wenn der S3Client Konstruktor ausgeführt wird, der im folgenden Codeausschnitt gezeigt wird, wird die im Profil definierte Rolle anhand der mit dem project1 Profil verknüpften Anmeldeinformationen übernommen. default

$s3 = new Aws\S3\S3Client([ 'region' => 'us-east-1', 'version' => '2006-03-01', 'profile' => 'project1' ]);