Wie kann ich IAM-Rollen verwenden, um API-Aufrufe von bestimmten IP-Adressen an die AWS-Managementkonsole einzuschränken?
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:
- Wenn Sie beim Ausführen von Befehlen der AWS Command Line Interface (AWS CLI) Fehler erhalten, stellen Sie sicher, dass Sie die neueste AWS CLI-Version verwenden.
- Ersetzen Sie Bob durch Ihren IAM-Rollennamen und EXAMPLEIAMACCOUNTID durch Ihre Konto-ID.
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
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr