IAMJSONpolitische Elemente: Condition - AWS Identitäts- und Zugriffsverwaltung

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

IAMJSONpolitische Elemente: Condition

Mit dem Element Condition (oder dem Condition-Block) können Sie angeben, unter welchen Bedingungen eine Richtlinie wirksam ist. Das Element Condition ist optional. Im Condition-Element formulieren Sie Ausdrücke, in denen Sie Bedingungsoperatoren (gleich, kleiner als usw.) verwenden, um die Kontextschlüssel und -werte in der Richtlinie mit Schlüsseln und Werten im Anforderungskontext abzugleichen. Weitere Informationen zum Anforderungskontext finden Sie unter Bestandteile einer Anfrage.

"Condition" : { "{condition-operator}" : { "{condition-key}" : "{condition-value}" }}

Der Kontextschlüssel, den Sie in einer Richtlinienbedingung angeben, kann ein globaler Bedingungskontextschlüssel oder ein servicespezifischer Kontextschlüssel sein. Kontextschlüssel für globale Bedingungen verfügen über das Präfix aws:. Servicespezifische Kontextschlüssel verfügen über das Präfix des Services. EC2Mit Amazon können Sie beispielsweise eine Bedingung mithilfe des ec2:InstanceType Kontextschlüssels schreiben, der für diesen Service einzigartig ist. Informationen zum Anzeigen von dienstspezifischen IAM Kontextschlüsseln mit dem iam: Präfix finden Sie unterIAMund AWS STS Bedingungskontexttasten.

Bei Namen von Kontextschlüsseln wird die Groß-/Kleinschreibung nicht beachtet. Das Einbeziehen des aws:SourceIP-Kontextschlüssels ist beispielsweise gleichbedeutend mit dem Testen auf AWS:SourceIp. Die Berücksichtigung der Groß- und Kleinschreibung bei  Werten von Kontextschlüsseln hängt vom verwendeten Bedingungsoperator ab. Die folgende Bedingung enthält beispielsweise den StringEquals-Operator, um sicherzustellen, dass nur von johndoe gestellte Anfragen übereinstimmen. Benutzern mit dem Namen JohnDoe wird der Zugriff verweigert.

"Condition" : { "StringEquals" : { "aws:username" : "johndoe" }}

Die folgende Bedingung verwendet den StringEqualsIgnoreCase-Operator, damit Benutzer mit dem Namen johndoe oder JohnDoe gefunden werden.

"Condition" : { "StringEqualsIgnoreCase" : { "aws:username" : "johndoe" }}

Einige Kontextschlüssel unterstützen Schlüssel-Wert-Paare, mit denen Sie einen Teil des Schlüsselnamens festlegen können. Beispiele hierfür sind der aws:RequestTag/tag-key Kontextschlüssel AWS KMS kms:EncryptionContext:encryption_context_key, der und der ResourceTag/tag-key Kontextschlüssel, die von mehreren Diensten unterstützt werden.

  • Wenn Sie den ResourceTag/tag-key Kontextschlüssel für einen Service wie Amazon verwendenEC2, müssen Sie einen Schlüsselnamen für den angebentag-key.

  • Bei den Schlüsselnamen muss die Groß- und Kleinschreibung nicht berücksichtigt werden. Dies bedeutet Folgendes: Wenn Sie "aws:ResourceTag/TagKey1": "Value1" im Bedingungselement Ihrer Richtlinie angeben, stimmt die Bedingung mit einem Ressourcen-Tag-Schlüssel mit dem Namen TagKey1 oder tagkey1 überein, aber nicht mit beiden.

  • AWS Dienste, die diese Attribute unterstützen, ermöglichen es Ihnen möglicherweise, mehrere Schlüsselnamen zu erstellen, die sich nur je nach Groß- und Kleinschreibung unterscheiden. Sie könnten beispielsweise eine EC2 Amazon-Instance mit ec2=test1 und kennzeichnenEC2=test2. Wenn Sie eine Bedingung wie "aws:ResourceTag/EC2": "test1" verwenden, um den Zugriff auf diese Ressource zu erlauben, stimmt der Schlüsselname mit beiden Tags, jedoch nur mit einem Wert überein. Dies kann zu unerwarteten Bedingungsfehlern führen.

Wichtig

Als bewährte Methode stellen Sie sicher, dass Mitglieder Ihres Kontos eine konsistente Namenskonvention beim Benennen von Schlüssel-Wert-Paar-Attributen verfolgen. Beispiele hierfür sind Tags oder AWS KMS -Verschlüsselungskontexte. Sie können dies mit dem aws:TagKeysKontextschlüssel für das Tagging oder dem kms:EncryptionContextKeysfür den AWS KMS Verschlüsselungskontext erzwingen.

Der Anforderungskontext

Wenn ein Principal eine Anfrage an stellt AWS, fasst er AWS die Anforderungsinformationen in einem Anforderungskontext zusammen. Die Informationen werden verwendet, um die Anforderung auszuwerten und zu autorisieren. Sie können das Condition Element einer JSON Richtlinie verwenden, um bestimmte Kontextschlüssel anhand des Anforderungskontextes zu testen. Sie können beispielsweise eine Richtlinie erstellen, die den CurrentTime Kontextschlüssel aws: verwendet, um es einem Benutzer zu ermöglichen, Aktionen nur innerhalb eines bestimmten Zeitraums durchzuführen.

Wenn eine Anfrage eingereicht wird, AWS wertet es jeden Kontextschlüssel in der Richtlinie aus und gibt den Wert true, false, not present und gelegentlich Null (eine leere Datenzeichenfolge) zurück. Ein Kontextschlüssel, der in der Anfrage nicht vorhanden ist, wird als Nichtübereinstimmung betrachtet. Die folgende Richtlinie ermöglicht beispielsweise das Entfernen Ihres eigenen Geräts mit Multi-Faktor-Authentifizierung (MFA), aber nur, wenn Sie sich MFA in der letzten Stunde (3.600 Sekunden) mit diesem angemeldet haben.

{ "Version": "2012-10-17", "Statement": { "Sid": "AllowRemoveMfaOnlyIfRecentMfa", "Effect": "Allow", "Action": [ "iam:DeactivateMFADevice" ], "Resource": "arn:aws:iam::*:user/${aws:username}", "Condition": { "NumericLessThanEquals": {"aws:MultiFactorAuthAge": "3600"} } } }

Der Anforderungskontext kann die folgenden Werte zurückgeben:

  • Wahr — Wenn sich der Anforderer innerhalb der letzten Stunde oder weniger angemeldet hat, gibt die Bedingung „Wahr“ zurück. MFA

  • Falsch — Wenn sich der Anforderer vor MFA mehr als einer Stunde angemeldet hat, gibt die Bedingung Falsch zurück.

  • Nicht vorhanden — Wenn der Anforderer eine Anfrage mit seinen IAM Benutzerzugriffsschlüsseln im AWS CLI oder gestellt hat AWS API, ist der Schlüssel nicht vorhanden. In diesem Fall ist der Schlüssel nicht vorhanden und stimmt nicht überein.

  • Null – Für Kontextschlüssel, die vom Benutzer definiert werden, z. B. die Übergabe von Tags in einer Anfrage, ist es möglich, eine leere Zeichenfolge einzuschließen. In diesem Fall ist der Wert im Anforderungskontext null. Ein Null-Wert kann in einigen Fällen "true" zurückgeben. Wenn Sie beispielsweise den mehrwertigen ForAllValues-Bedingungsoperator mit dem aws:TagKeys-Kontextschlüssel verwenden, können unerwartete Ergebnisse auftreten, wenn der Anforderungskontext null zurückgibt. Weitere Informationen finden Sie unter aws: TagKeys undMehrwertige Kontextschlüssel.

Der Bedingungsblock

Das folgende Beispiel zeigt das grundlegende Format eines Condition-Elements:

"Condition": {"StringLike": {"s3:prefix": ["janedoe/*"]}}

Ein Wert aus der Anfrage wird durch einen Kontextschlüssel dargestellt, in diesem Fall s3:prefix. Der Kontextschlüsselwert wird mit einem Wert verglichen, den Sie als Literalwert angeben, z. B. janedoe/*. Der vorzunehmende Vergleich wird vom Bedingungsoperator (hier StringLike) bestimmt. Sie können Bedingungen erstellen, die Zeichenketten, Datumsangaben, Zahlen und vieles mehr mit typischen booleschen Vergleichen wie "gleich", "größer als" und "kleiner als" vergleichen. Wenn Sie Zeichenkettenoperatoren oder ARNOperatoren verwenden, können Sie auch eine Richtlinienvariable im Kontextschlüsselwert verwenden. Das folgende Beispiel enthält die Variable aws:username.

"Condition": {"StringLike": {"s3:prefix": ["${aws:username}/*"]}}

Unter bestimmten Umständen können Kontextschlüssel mehrere Werte enthalten. Eine Anforderung an Amazon DynamoDB könnte beispielsweise darin bestehen, mehrere Attribute einer Tabelle zurückzugeben oder zu aktualisieren. Eine Richtlinie für den Zugriff auf DynamoDB-Tabellen kann den dynamodb:Attributes-Kontextschlüssel enthalten, der alle in der Anfrage aufgeführten Attribute enthält. Sie können diese Attribute mit einer Liste zulässiger Attribute in einer Richtlinie mithilfe von Mengenoperatoren im Element Condition vergleichen. Weitere Informationen finden Sie unter Mehrwertige Kontextschlüssel.

Wenn die Richtlinie während einer Anfrage ausgewertet wird, wird der Schlüssel durch den entsprechenden Wert aus der Anforderung AWS ersetzt. (In diesem Beispiel AWS würden Datum und Uhrzeit der Anfrage verwendet.) Die Auswertung der Bedingung gibt "true" oder "false" zurück und das Ergebnis wird von der Richtlinie berücksichtigt, um die Anforderung zuzulassen oder zu verweigern.

Mehrere Werte in einer Bedingung

Ein Condition-Element kann mehrere Bedingungsoperatoren enthalten, und jeder Bedingungsoperator kann mehrere Kontext-Schlüssel-Wert-Paare enthalten. Dies wird in folgender Abbildung veranschaulicht.

zwei Blockdiagramme für Bedingungsoperatoren. Der erste Block enthält zwei Platzhalter für Kontextschlüssel mit jeweils mehreren Werten. Der zweite Bedingungsblock enthält einen Kontextschlüssel mit mehreren Werten.

Weitere Informationen finden Sie unter Mehrwertige Kontextschlüssel.