IAM-JSON-Richtlinienelemente: 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 verwenden (gleich, kleiner als usw.), um die Bedingungsschlüssel und -werte der Richtlinie mit den Schlüsseln und Werten in der Anforderungen abzugleichen. Weitere Informationen zum Anforderungskontext finden Sie unter Request.
"Condition" : { "
{condition-operator}
" : { "{condition-key}
" : "{condition-value}
" }}
Der von Ihnen angegebene Bedingungsschlüssel kann ein globaler Bedingungsschlüssel oder ein servicespezifischer Bedingungsschlüssel sein. Globale Bedingungsschlüssel haben das Präfix aws:
. Servicespezifische Bedingungsschlüssel haben das Präfix des Services. Mit Amazon EC2 können Sie beispielsweise eine Bedingung mit dem ec2:InstanceType
-Schlüssel schreiben, der für diesen Service eindeutig ist. Informationen zum Anzeigen von servicespezifischen IAM-Bedingungsschlüsseln mit dem Präfix iam:
finden Sie unter IAM- und AWS STS-Bedingungskontextschlüssel.
Bei Namen von Bedingungsschlüsseln wird die Groß- und Kleinschreibung nicht beachtet. Beispiel: Das Einbeziehen des aws:SourceIP
-Bedingungsschlüssels entspricht dem Testen auf AWS:SourceIp
. Die Groß-/Kleinschreibung der Werte von Bedingungsschlüsseln hängt vom verwendeten Bedingungsoperator ab. Beispiel: Die folgende Bedingung enthält die StringEquals
-Produktion, um sicherzustellen, dass nur Anfragen von johndoe
gefunden werden. 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 Bedingungsschlüssel unterstützen Schlüsselwert-Paare, mit denen Sie einen Teil des Schlüsselnamens festlegen können. Beispiele hierfür sind der globale aws:RequestTag/tag-key-Bedingungsschlüssel, AWS KMSkms:EncryptionContext:
und der encryption_context_key
ResourceTag/
-Bedingungsschlüssel, der von mehreren Services unterstützt wird. Wenn Sie den tag-key
ResourceTag/
-Bedingungsschlüssel für einen Service wie etwa Amazon EC2 verwenden, müssen Sie einen Schlüsselnamen für den tag-key
tag-key
angeben. 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-Services, die diese Attribute unterstützen, erlauben Ihnen das Erstellen mehrerer Schlüsselnamen, die sich nur durch Groß-/Kleinschreibung unterscheiden. Ein Beispiel wäre hier das Tagging einer Amazon-EC2-Instance mit ec2=test1
und EC2=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.
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 erzwingen, indem Sie den aws:TagKeys-Bedingungsschlüssel zum Markieren oder kms:EncryptionContextKeys
für den AWS KMS-Verschlüsselungskontext verwenden.
-
Eine Liste aller Bedingungsoperatoren und eine Beschreibung, wie diese funktionieren, finden Sie unter Bedingungsoperatoren
-
Sofern nicht anders angegeben, können alle Schlüssel mehrere Werte haben. Eine Beschreibung, wie Bedingungsschlüssel mit mehreren Werten verarbeitet werden, finden Sie unter Erstellen einer Bedingung mit mehreren Schlüsseln oder Werten
-
Eine Liste aller global verfügbaren Bedingungsschlüssel finden Sie unter AWS Globale Bedingungskontextschlüssel.
-
Informationen zu Bedingungsschlüsseln, die von jedem Service definiert werden, finden Sie unter Aktionen, Ressourcen und Bedingungsschlüssel für AWS-Services.
Der Anforderungskontext
Wenn ein Auftraggeber eine Anforderung an AWS stellt, erfasst AWS die Anforderungsinformationen in einem Anforderungskontext. Die Informationen werden verwendet, um die Anforderung auszuwerten und zu autorisieren. Sie können das Condition
-Element einer JSON-Richtlinie verwenden, um bestimmte Bedingungen im Hinblick auf den Anforderungskontext zu testen. Sie können beispielsweise eine Richtlinie erstellen, die den aws:CurrentTime-Bedingungsschlüssel verwendet, um einem Benutzer zu erlauben, bestimmte Aktionen mit nur einem bestimmten Datumsbereich auszuführen.
Wenn eine Anforderung übermittelt wird, wertet AWS jeden Bedingungsschlüssel in der Richtlinie aus, der den Wert true, false, not present (nicht vorhanden) oder (gelegentlich) null (eine leere Datenzeichenfolge) zurückgibt. Ein Schlüssel, der nicht in der Anforderung vorhanden ist, wird als fehlende Übereinstimmung gewertet. Die folgende Richtlinie erlaubt beispielsweise das Entfernen Ihres eigenen Multi-Factor-Authentication (MFA)-Geräts, aber nur, wenn Sie sich in der letzten Stunde (3.600 Sekunden) per MFA angemeldet haben.
{ "Version": "2012-10-17", "Statement": { "Sid": "AllowRemoveMfaOnlyIfRecentMfa", "Effect": "Allow", "Action": [ "iam:DeactivateMFADevice", "iam:DeleteVirtualMFADevice" ], "Resource": "arn:aws:iam::*:user/${aws:username}", "Condition": { "NumericLessThanEquals": {"aws:MultiFactorAuthAge": "3600"} } } }
Der Anforderungskontext kann die folgenden Werte zurückgeben:
-
True – Wenn der Anforderer sich innerhalb der letzten Stunde per MFA angemeldet hat, gibt die Bedingung true zurück.
-
False – Wenn sich der Anforderer vor mehr als einer Stunde per MFA angemeldet hat, gibt die Bedingung false zurück.
-
Not present (nicht vorhanden) – Wenn der Anforderer eine Anforderung unter Verwendung seiner IAM-Benutzerzugriffsschlüssel in der AWS CLI oder AWS-API gestellt hat, ist der Schlüssel nicht vorhanden. In diesem Fall ist der Schlüssel nicht vorhanden und stimmt nicht überein.
-
Null – Bei Bedingungsschlüsseln, die vom Benutzer definiert werden, beispielsweise Übergabe von Tags in einer Anforderung, kann eine leere Zeichenfolge eingeschlossen werden. 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 demaws:TagKeys
-Bedingungsschlüssel verwenden, können unerwartete Ergebnisse auftreten, wenn der Anforderungskontext nullzurückgibt. Weitere Informationen finden Sie unter aws:TagKeys und Verwenden mehrerer Schlüssel und Werte.
Der Bedingungsblock
Das folgende Beispiel zeigt das grundlegende Format eines Condition
-Elements:
"Condition": {"StringLike": {"s3:prefix": ["janedoe/*"]}}
Ein Wert aus der Anforderung wird durch einen Bedingungsschlüssel repräsentiert, 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 Zeichenfolgen-Operatoren oder ARN-Operatoren verwenden, können Sie im Bedingungswert auch eine Richtlinienvariable verwenden. Das folgende Beispiel enthält die aws:username
-Variable.
"Condition": {"StringLike": {"s3:prefix": ["${aws:username}/*"]}}
Unter bestimmten Umständen können Schlüssel mehrere Werte enthalten. Eine Anforderung an Amazon DynamoDB könnte beispielsweise darin bestehen, mehrere Attribute einer Tabelle zurückzugeben oder zu aktualisieren. In einer Richtlinie für den Zugriff auf DynamoDB-Tabellen kann der dynamodb:Attributes
-Schlüssel definiert werden, der alle in der Anforderung angegebenen 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 Erstellen einer Bedingung mit mehreren Schlüsseln oder Werten.
Wenn die Richtlinie im Zuge einer Anforderung ausgewertet wird, ersetzt AWS den Schlüssel mit dem entsprechenden Anforderungswert. (In diesem Beispiel würde AWS das Datum und die Uhrzeit der Anforderung verwenden.) 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 Bedingungen und jede Bedingung kann mehrere Schlüssel-Wert-Paare enthalten. Dies wird in folgender Abbildung veranschaulicht.

Weitere Informationen finden Sie unter Erstellen einer Bedingung mit mehreren Schlüsseln oder Werten.