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 den Zugriff auf AWS-API-Aufrufe auf bestimmte IP-Adressen beschränken. Wie kann ich die Rollen von AWS Identity and Access Management (IAM) verwenden, um den Zugriff von API-Aufrufen auf die AWS-Managementkonsole einzuschränken?

Kurzbeschreibung

Sie können 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 Ihrem Namen Anrufe tätigen, sofern Sie nicht auch die globale Bedingung aws:ViaAWSService verwenden. Weitere Informationen finden Sie unter AWS: Verweigert den Zugriff auf AWS auf der Grundlage der Quell-IP.

Angenommen, Sie haben 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. Sie können die ursprüngliche IP-Adresse nicht über einen anrufenden Dienst an den Zieldienst weitergeben, um sie in einer IAM-Richtlinie auszuwerten.

Lösung

Erstellen Sie eine IAM-Rolle, der dieselben Berechtigungen zugewiesen sind wie die IAM-Richtlinie, die dem IAM-Benutzer zugewiesen 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.

Erstellen Sie die folgende IAM-Richtlinie, und fügen Sie diese Richtlinie dann einem IAM-Benutzer zu, der über programmatischen Zugriff verfügt. Diese IAM-Richtlinie ermöglicht es dem IAM-Benutzer, AssumeRole mit dem Rollennamen Bob anzunehmen. 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"
  }
}

Erstellen Sie die IAM-Rolle Bob, um Berechtigungen an den IAM-Benutzer zu delegieren. Folgen Sie den Anweisungen zum Erstellen einer IAM-Rolle (Konsole). Sie können auch die AWS-CLI oder API verwenden.

Hinweis:

  • Wenn Sie die Rolle mithilfe der Konsole erstellen, ändern Sie die Rollen-Vertrauensrichtlinie ähnlich wie in diesem Beispiel für die **Bob-**Vertrauensrichtlinie. Mithilfe der AWS-CLI create-role oder der API CreateRole können Sie 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: Ersetzen Sie YOURIAMUSERNAME durch Ihren 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