AWS JSON-Richtlinienelemente: NotPrincipal
Das NotPrincipal-Element verwendet "Effect":"Deny", um allen Prinzipalen außer dem im NotPrincipal-Element angegebenen Prinzipal den Zugriff zu verweigern. Ein Prinzipal kann ein IAM-Benutzer, ein Verbundbenutzer-Prinzipal von AWS STS, eine IAM-Rolle, eine angenommene Rollensitzung, ein AWS-Konto, ein AWS-Service oder ein anderer Prinzipaltyp sein. Weitere Informationen zu Prinzipalen finden Sie unter AWS JSON-Richtlinienelemente: Principal.
NotPrincipal muss mit "Effect":"Deny" verwendet werden. Die Verwendung mit "Effect":"Allow" wird nicht unterstützt.
Wichtig
Die Verwendung von NotPrincipal für neue ressourcenbasierte Richtlinien wird im Rahmen Ihrer Sicherheits- und Autorisierungsstrategie nicht empfohlen. Wenn Sie NotPrincipal verwenden, kann die Fehlerbehebung bei den Auswirkungen mehrerer Richtlinientypen schwierig sein. Wir empfehlen, stattdessen den aws:PrincipalArn-Kontextschlüssel mit ARN-Bedingungsoperatoren zu verwenden.
Wichtige Punkte
-
Das
NotPrincipal-Element wird in ressourcenbasierten Richtlinien für einige AWS-Services, einschließlich VPC-Endpunkte, unterstützt. Ressourcenbasierte Richtlinien sind Richtlinien, die Sie direkt in eine Ressource einbinden. Sie können dasNotPrincipal-Element weder in einer identitätsbasierten IAM-Richtlinie noch in einer IAM-Rollenvertrauensrichtlinie verwenden. -
Verwenden Sie keine ressourcenbasierten Richtlinienanweisungen, die ein
NotPrincipal-Richtlinienelement mit einerDeny-Wirkung für IAM-Benutzer oder -Rollen enthalten, denen eine Richtlinie mit Berechtigungsgrenzen angefügt ist. DasNotPrincipal-Element mitDeny-Wirkung lehnt immer jeden IAM-Prinzipal ab, an den eine Richtlinie zur Berechtigungsgrenze angefügt ist, unabhängig von den imNotPrincipal-Element angegebenen Werten. Dies führt dazu, dass einige IAM-Benutzer oder -Rollen, die andernfalls Zugriff auf die Ressource hätten, den Zugriff verlieren. Wir empfehlen Ihnen, Ihre ressourcenbasierten Richtlinien dahingehend zu ändern, dass Sie den Bedingungsoperator ArnNotEquals mit dem aws:PrincipalArn-Kontextschlüssel verwenden, um den Zugriff zu begrenzen, anstatt dasNotPrincipal-Element. Weitere Informationen über Berechtigungsgrenzen finden Sie unter Berechtigungsgrenzen für IAM-Entitäten. -
Bei Verwendung von
NotPrincipalmüssen Sie auch den Konto-ARN des nicht verweigerten Prinzipals angeben. Andernfalls könnte durch die Richtlinie der Zugriff auf das gesamte Konto mit dem Auftraggeber verweigert werden. Abhängig vom Service, den Sie in Ihre Richtlinien einschließen, validiert AWS möglicherweise erst das Konto und dann den Benutzer. Wenn ein Benutzer mit übernommener Rolle (also ein Benutzer, der eine Rolle verwendet) bewertet wird, prüft AWS möglicherweise zunächst das Konto und anschließend den Benutzer mit übernommener Rolle. Der Benutzer mit übernommener Rolle wird anhand des Namens der Rollensitzung identifiziert, die bei der Übernahme der Rolle durch den Benutzer angegeben wurde. Aus diesem Grund empfehlen wir dringend, dass Sie den ARN für das Konto eines Benutzers oder sowohl den ARN einer Rolle als auch den ARN für das Konto, das die Rolle enthält, mit aufnehmen. -
Das
NotPrincipal-Element wird in Service-Kontrollrichtlinien (SCP) und Ressourcen-Kontrollrichtlinien (RCP) nicht unterstützt.
Alternativen zum NotPrincipal-Element
Bei der Zugriffsverwaltung in AWS kann es vorkommen, dass Sie allen Prinzipalen den Zugriff auf eine Ressource explizit verweigern müssen, mit Ausnahme eines oder mehrerer von Ihnen angegebener Prinzipale. AWS empfiehlt die Verwendung einer Deny-Anweisung mit globalen Bedingungskontextschlüsseln für eine präzisere Steuerung und einfachere Fehlerbehebung. Die folgenden Beispiele zeigen alternative Ansätze mit Bedingungsoperatoren wie StringNotEquals oder ArnNotEquals, um allen Prinzipalen außer den im Condition-Element angegebenen den Zugriff zu verweigern.
Beispielszenario mit Verwendung einer IAM-Rolle
Sie können eine ressourcenbasierte Richtlinie mit einer Deny-Anweisung verwenden, um zu verhindern, dass alle IAM-Rollen außer den im Condition-Element angegebenen auf Ihre Ressourcen zugreifen oder diese bearbeiten. Dieser Ansatz folgt dem AWS-Sicherheitsprinzip, dass eine explizite Verweigerung immer Vorrang vor Zulassungsanweisungen hat und trägt zur Einhaltung des Prinzips der geringsten Berechtigung in Ihrer AWS-Infrastruktur bei.
Anstatt NotPrincipal zu verwenden, empfehlen wir die Verwendung einer Deny-Anweisung mit globalen Bedingungskontextschlüsseln und dem Bedingungsoperator ArnNotEquals, um einer IAM-Rolle explizit den Zugriff auf Ihre Ressourcen zu erlauben. Das folgende Beispiel verwendet aws:PrincipalArn, um der Rolle read-only-role explizit den Zugriff auf Amazon-S3-Buckets im Ordner Bucket_Account_Audit zu erlauben.
Beispielszenario mit Verwendung eines Service-Prinzipals
Mit einer Deny-Anweisung können Sie verhindern, dass alle Service-Prinzipale außer den im Condition-Element angegebenen auf Ihre Ressourcen zugreifen oder diese bearbeiten. Dieser Ansatz ist besonders nützlich, wenn Sie detaillierte Zugriffskontrollen implementieren oder Sicherheitsgrenzen zwischen verschiedenen Services und Anwendungen in Ihrer AWS-Umgebung festlegen müssen.
Anstatt NotPrincipal zu verwenden, empfehlen wir die Verwendung einer Deny-Anweisung mit globalen Bedingungskontextschlüsseln und dem Bedingungsoperator StringNotEquals, um einem Service-Prinzipal explizit den Zugriff auf Ihre Ressourcen zu erlauben. Das folgende Beispiel verwendet aws:PrincipalServiceName, um dem Service-Prinzipal von AWS CodeBuild explizit den Zugriff auf Amazon-S3-Buckets im Ordner BUCKETNAME zu erlauben.