Wie kann ich IAM-Rollen verwenden, um API-Aufrufe von bestimmten IP-Adressen an die AWS-Managementkonsole einzuschränken?

Lesedauer: 4 Minute
0

Ich möchte die Rollen von AWS Identity and Access Management (IAM, Identitäts- und Zugriffsmanagement) verwenden, um den Zugriff von API-Aufrufen auf die AWS-Managementkonsole einzuschränken.

Kurzbeschreibung

Du kannst den globalen Bedingungsschlüssel aws:SourceIp im Bedingungselement einer IAM-Richtlinie verwenden, um API-Aufrufe von bestimmten IP-Adressen einzuschränken. Dadurch wird jedoch der Zugriff auf AWS-Services wie AWS CloudFormation verweigert, die in deinem Namen Anrufe tätigen, sofern du nicht auch die globale Bedingung aws:ViaAWSService verwendest. Weitere Informationen findest du unter AWS: Verweigert den Zugriff auf AWS auf der Grundlage der Quell-IP.

Angenommen, du hast eine AWS-Servicerolle, die es AWS CloudFormation ermöglicht, Amazon Elastic Compute Cloud (Amazon EC2) aufzurufen, um eine Instanz zu stoppen. Die Anfrage wird abgelehnt, weil der Zieldienst (Amazon EC2) die IP-Adresse des anrufenden Dienstes (AWS CloudFormation) sieht und nicht die des ursprünglichen Benutzers. Du kannst die ursprüngliche IP-Adresse nicht über einen anrufenden Dienst an den Zieldienst weitergeben, um sie in einer IAM-Richtlinie auszuwerten.

Lösung

Erstelle eine IAM-Rolle, der dieselben Berechtigungen angehängt sind wie die IAM-Richtlinie, die an den IAM-Benutzer angehängt ist. Dadurch erhält der IAM-Benutzer nur dann die Berechtigung, die Rolle sts:AssumeRole-API zu übernehmen, wenn die Anfrage von der angegebenen IP-Adresse kommt. Dies liegt an der aws:SourceIP-Einschränkungsprüfung, die durchgeführt wird, wenn der Benutzer versucht, die Rolle anzunehmen. Wenn der Benutzer die IAM-Rolle übernimmt, erhält er die Berechtigungen der IAM-Richtlinie, die ihm zugeordnet ist. Da die der Rolle zugeordnete IAM-Richtlinie den Bedingungsschlüssel aws:SourceIp nicht verwendet, ist der Zugriff auf AWS-Services zulässig.

Erstelle die folgende IAM-Richtlinie und hänge diese Richtlinie dann an einen IAM-Benutzer an, der über programmatischen Zugriff verfügt. Diese IAM-Richtlinie erlaubt es dem IAM-Benutzer, AssumeRole mit dem Rollennamen Bob zu übernehmen. Bob benötigt keine zusätzlichen Berechtigungen. Alle anderen erforderlichen Berechtigungen werden erworben, wenn der IAM-Benutzer erfolgreich die Rolle Bob annimmt.

Hinweis:

Beispiel für eine IAM-Benutzerrichtlinie

Diese Beispielrichtlinie verfügt über Berechtigungen zum Ausführen von API-Aufrufen für die Ressourcen im Konto.

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "arn:aws:iam::EXAMPLEIAMACCOUNTID:role/Bob"
  }
}

Erstelle die IAM-Rolle Bob, um Berechtigungen an den IAM-Benutzer zu delegieren. Folge den Anweisungen zum Erstellen einer IAM-Rolle (Konsole). Du kannst auch die AWS-CLI oder API verwenden.

Hinweis:

  • Wenn du die Rolle mithilfe der Konsole erstellst, ändere die Rollen-Vertrauensrichtlinie ähnlich wie in diesem Beispiel für die **Bob-**Vertrauensrichtlinie. Mithilfe der AWS-CLI create-role oder der API CreateRole kannst du das Dokument zur Trust Relationship-Richtlinie als Wert in den Dokumentparameter update-assume-role-policy übergeben.
  • Die Anfrage muss aus dem angegebenen IP-Adressbereich 103.15.250.0/24 oder 12.148.72.0/23 kommen. Andernfalls kann der IAM-Benutzer die Rolle nicht übernehmen und API-Aufrufe tätigen.

Beispiel für eine Vertrauensrichtlinie für IAM-Rollen

Dieses Beispiel für eine Vertrauensrichtlinie ermöglicht es dem Benutzer, die Rolle zu übernehmen, wenn die Anfrage aus dem IP-Adressbereich 103.15.250.0/24 oder 12.148.72.0/23 kommt.

Hinweis: Ersetze YOURIAMUSERNAME durch deinen IAM-Benutzernamen.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::account-id:user/YOURIAMUSERNAME"
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Effect": "Deny",
      "Principal": {
        "AWS": "arn:aws:iam::account-id:user/YOURIAMUSERNAME"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": [
            "103.15.250.0/24",
            "12.148.72.0/23"
          ]
        }
      }
    }
  ]
}

Hinweis: Diese Problemumgehung unterbricht die AWS CloudTrail-Protokolle, da Aktionen von der IAM-Rolle ausgeführt werden, die der Benutzer übernommen hat, und nicht vom IAM-Benutzer. Der vom IAM-Benutzer ausgeführte assumeRole-API-Aufruf wird in den CloudTrail-Protokollen unter dem IAM-Benutzer protokolliert. Alle zusätzlichen API-Aufrufe, die von der IAM-Rolle ausgeführt werden, werden in CloudTrail-Protokollen unter dem Rollennamen protokolliert.

Ähnliche Informationen

Schlüssel für den globalen Bedingungskontext von AWS