Wie kann ich kontoübergreifende IAM-Autorisierung für API-Gateway-HTTP-APIs bereitstellen?

Letzte Aktualisierung: 31.08.2022

Ich möchte die AWS-Identity-and-Access-Management-Authentifizierung (IAM) für den kontoübergreifenden Zugriff auf meine Amazon-API-Gateway-HTTP-API aktivieren. Wie richte ich das ein?

Kurzbeschreibung

Für API-Gateway-REST-APIs können Sie Ressourcenrichtlinien verwenden, um die IAM-Authentifizierung für kontoübergreifende Konten bereitzustellen. Diese Option ist jedoch nicht für API-Gateway-HTTP-APIs verfügbar.

Sie können die API-Aktion sts:AssumeRole verwenden, um eine Rolle für das HTTP-API-Konto anzunehmen. Die übernommene Rolle stellt temporäre Sicherheitsnachweise bereit, die zum Aufrufen der HTTP-API in einem anderen Konto verwendet werden können.

Auflösung

Temporäre IAM-Anmeldeinformationen erstellen

Hinweis: Wenn Sie beim Ausführen von Befehlen von AWS Command Line Interface (AWS CLI) Fehlermeldungen erhalten, stellen Sie sicher, dass Sie die neueste AWS-CLI-Version verwenden.

1.    Erstellen Sie eine IAM-Richtlinie für Konto A, das die HTTP-API hostet. Diese Richtlinie bietet die Berechtigung zum Aufrufen des HTTP-API-Execute-API-ARN.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "execute-api:Invoke",
            ],
            "Resource": [
                "arn:aws:execute-api:us-east-1:<AccountA-id>:<Api-id>/$default/*/*"
            ]
        }
    ]
}

2.    Erstellen Sie eine IAM-Rolle in Konto A, fügen Sie „Trusted Entity Type“ als „AWS-Konto“ hinzu und geben Sie die ID für Konto B ein.

3.    Fügen Sie die in Schritt 1 erstellte IAM-Richtlinie der in Schritt 2 erstellten IAM-Rolle hinzu.

4.    Erstellen Sie eine IAM-Richtlinie für Konto B, um die sts:AssumeRole API-Aktion zuzulassen:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::<AccountA-id>:role/<AssumedRoleName>"
    }
  ]
}

5.    Hängen Sie die IAM-Richtlinie an den Benutzer in Konto B an.

6.    Führen Sie den AWS-CLI-Befehl asume-role ähnlich dem folgenden aus:

$ aws sts assume-role --role-arn arn:aws:iam::<account-id>:role/<AssumedRoleName> --role-session-name role_session

Beispielausgabe:

{
    "Credentials": {
        "AccessKeyId": "A1B2C3D4E5E6G7H8J9K0",
        "SecretAccessKey": "abcdefghijk123456789",
       
 "SessionToken": 
"11111111111122222222223333333333344444444455555566666667777777777778888888999999999aaaaaaaaaabbbbbbbbbcccccccc==",
        "Expiration": "2022-07-11T15:55:25+00:00"
    },
    "AssumedRoleUser": {
        "AssumedRoleId": "AAAAAAABBBBBBBBBBB:role_session",
        "Arn": "arn:aws:sts::<account-id>:assumed-role/<AssumedRoleName>/role_session"
    }
}

Überprüfen Sie das Objekt der Anmeldedaten für den AccessKeyId, SecretAccessKey und SessionToken. Diese temporären Anmeldeinformationen, die von der angenommenen Rolle bereitgestellt werden, können zum Aufrufen der HTTP-API verwendet werden.

Testen Sie die IAM-Authentifizierung

Verwenden Sie die Postman-App, um mithilfe der Methode, für die Sie die IAM-Authentifizierung aktiviert haben, eine Anfrage an Ihre API-Ressource zu senden.

Hinweis: Um Anforderungen, die mit einem anderen Tool oder einer anderen Umgebung an API Gateway gesendet werden, manuell zu authentifizieren, verwenden Sie den Signature-Version-4-Signaturprozess (SigV4). Weitere Informationen finden Sie unter Signieren von AWS-API-Anforderungen.

1.    Wählen Sie in Postman die Registerkarte Autorisierung und gehen Sie wie folgt vor:
Wählen Sie für Typ die Option AWS Signature.
Geben Sie für AccessKey, SecretKey und SessionToken die Werte aus dem API-Aufruf von assume-role ein.

2.    Geben Sie für Anforderungs-URL eingeben die Aufruf-URL Ihrer API ähnlich der folgenden ein:

https://<Api-id>.execute-api.<region>.amazonaws.com/<stagename>/<resourcepath>

Eine authentifizierte Anforderung gibt einen 200-OK-Antwortcode zurück. Eine nicht autorisierte Anfrage gibt die Nachricht Missing Authentication Token und einen 403-Forbidden-Antwortcode.


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?