Beispiele für Bucket-Richtlinien mit Bedingungsschlüsseln
Sie können die Sprache der Zugriffsrichtlinie verwenden, um Bedingungen anzugeben, wenn Sie Berechtigungen erteilen. Sie können das optionale Condition-Element oder den Condition-Block verwenden, um anzugeben, unter welchen Bedingungen eine Richtlinie wirksam ist.
Richtlinien, die Amazon-S3-Bedingungsschlüssel für Objekt- und Bucket-Vorgänge verwenden, finden Sie in den folgenden Beispielen. Weitere Informationen über Bedingungsschlüssel finden Sie unter Richtlinienbedingungsschlüssel für Amazon S3. Eine vollständige Liste der Amazon-S3-Aktionen, -Bedingungsschlüssel und -Ressourcen, die Sie in Richtlinien angeben können, finden Sie unter Aktionen, Ressourcen und Bedingungsschlüssel für Amazon S3 in der Service-Authorization-Referenz.
Weitere Informationen zu den Berechtigungen für S3-API-Operationen nach S3-Ressourcentypen finden Sie unter Erforderliche Berechtigungen für Amazon-S3-API-Operationen.
Beispiele: Amazon-S3-Bedingungsschlüssel für Objektoperationen
Die folgenden Beispiele zeigen, wie Sie Amazon-S3‑spezifische Bedingungsschlüssel für Objektoperationen verwenden können. Eine vollständige Liste der Amazon-S3-Aktionen, -Bedingungsschlüssel und -Ressourcen, die Sie in Richtlinien angeben können, finden Sie unter Aktionen, Ressourcen und Bedingungsschlüssel für Amazon S3 in der Service-Authorization-Referenz.
Weitere Informationen zu den Berechtigungen für S3-API-Operationen nach S3-Ressourcentypen finden Sie unter Erforderliche Berechtigungen für Amazon-S3-API-Operationen.
Einige der Beispielrichtlinien zeigen, wie Sie Bedingungsschlüssel mit PUT Object-Vorgänge verwenden können. PUT Object-Vorgänge ermöglichen für Access Control List (ACL) spezifische Header, mit denen Sie ACL-basierte Berechtigungen erteilen können. Durch die Verwendung dieser Bedingungsschlüssel können Sie eine Bedingung festlegen, die bestimmte Zugriffsberechtigungen erfordert, wenn der Benutzer ein Objekt hochlädt. Sie können ACL-basierte Berechtigungen auch mittels der Operation PutObjectAcl erteilen. Weitere Informationen finden Sie unter PutObjectAcl in der Amazon S3 Amazon Simple Storage Service-API-Referenz. Weitere Informationen über ACLs finden Sie in Zugriffskontrolllisten (ACL) – Übersicht.
Themen
Beispiel 1: Gewähren einer s3:PutObject-Berechtigung, die erfordert, dass Objekte mit serverseitiger Verschlüsselung gespeichert werden.
Angenommen, Konto A besitzt einen Bucket. Der Kontoadministrator möchte Jane, einer Benutzerin in Konto A, die Berechtigung erteilen, Objekte hochzuladen, unter der Bedingung, dass Jane stets eine serverseitige Verschlüsselung mit von Amazon S3 verwalteten Schlüsseln (SSE-S3) anfordert. Der Administrator von Konto A kann für diesen Zweck, wie gezeigt, mit dem Bedingungsschlüssel s3:x-amz-server-side-encryption arbeiten. Das Schlüssel-Wert-Paar im folgenden Condition-Block gibt den s3:x-amz-server-side-encryption-Bedingungsschlüssel und SSE-S3 (AES256) als Verschlüsselungstyp an:
"Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "AES256" }}
Wenn Sie diese Berechtigung mithilfe von AWS CLI testen, müssen Sie die erforderliche Verschlüsselung mithilfe des --server-side-encryption-Parameters hinzufügen, wie im folgenden Beispiel gezeigt. Wenn Sie diesen Beispielbefehl verwenden möchten, ersetzen Sie durch Ihre Informationen. user input
placeholders
aws s3api put-object --bucketamzn-s3-demo-bucket--keyHappyFace.jpg--bodyc:\HappyFace.jpg--server-side-encryption "AES256" --profileAccountAadmin
Beispiel 2: Erteilen der s3:PutObject-Berechtigung zum Kopieren von Objekten mit einer Einschränkung auf die Kopierquelle
Wenn Sie in der PUT-Objektanforderung ein Quellobjekt angeben, handelt es sich um eine Kopieroperation (siehe CopyObject). Dementsprechend kann der Bucket-Eigentümer einem Benutzer die Berechtigung erteilen, Objekte mit Einschränkungen in Bezug auf die Quelle zu kopieren, z. B.:
-
Erlauben Sie das Kopieren von Objekten nur aus dem angegebenen Quell-Bucket (zum Beispiel
).amzn-s3-demo-source-bucket -
Erlauben Sie das Kopieren von Objekten aus dem angegebenen Quell-Bucket und nur von Objekten, deren Schlüsselnamen-Präfix mit einem bestimmten Präfix beginnt, wie z. B.
(zum Beispielpublic/).amzn-s3-demo-source-bucket/public/* -
Erlauben Sie das Kopieren nur eines bestimmten Objekts aus dem Quell-Bucket (zum Beispiel
).amzn-s3-demo-source-bucket/example.jpg
Die folgende Bucket-Richtlinie erteilt einem Benutzer die Daves3:PutObject-Berechtigung. Diese Richtlinie erlaubt es ihm, Objekte nur unter der Bedingung zu kopieren, dass die Anforderung den s3:x-amz-copy-source-Header enthält und der Headerwert das /-Schlüsselnamenpräfix angibt. Wenn Sie diese Beispielrichtlinie verwenden möchten, ersetzen Sie amzn-s3-demo-source-bucket/public/* durch Ihre eigenen Informationen.user
input placeholders
Testen der Richtlinie mit der AWS CLI
Sie können die Berechtigung mit dem AWS CLI-Befehl copy-object testen. Sie geben die Quelle an, indem Sie den Parameter --copy-source hinzufügen. Das Schlüsselnamenpräfix muss dem Präfix entsprechen, das in der Richtlinie zulässig ist. Sie müssen die Anmeldeinformationen des Benutzers Dave mit dem Parameter --profile angeben. Weitere Informationen zur Einrichtung der AWS CLI finden Sie unter Entwickeln mit Amazon S3 über die AWS-CLI in der API-Referenz zu Amazon S3.
aws s3api copy-object --bucket--keyamzn-s3-demo-source-bucketHappyFace.jpg--copy-sourceamzn-s3-demo-source-bucket/public/PublicHappyFace1.jpg--profileAccountADave
Erteilen der Berechtigung, nur ein bestimmtes Objekt zu kopieren
Die vorherige Richtlinie verwendet die Bedingung StringNotLike. Um die Berechtigung zu erteilen, nur ein bestimmtes Objekt zu kopieren, müssen Sie die Bedingung von StringNotLike zu StringNotEquals ändern und dann den genauen Objektschlüssel angeben, wie im folgenden Beispiel gezeigt. Wenn Sie diesen Beispielbefehl verwenden möchten, ersetzen Sie durch Ihre Informationen.user input
placeholders
"Condition": { "StringNotEquals": { "s3:x-amz-copy-source": "amzn-s3-demo-source-bucket/public/PublicHappyFace1.jpg" } }
Beispiel 3: Gewähren des Zugriffs auf eine bestimmte Version eines Objekts
Angenommen, Konto A besitzt einen Bucket mit aktivierter Versionsverwaltung. Der Bucket beinhaltet mehrere Versionen des Objekts . Der Administrator von Konto A möchte nun dem Benutzer HappyFace.jpg die Berechtigung erteilen, nur eine bestimmte Version des Objekts zu erhalten. Der Kontoadministrator kann dies bewerkstelligen, indem er dem Benutzer Dave bedingt die Daves3:GetObjectVersion‑Berechtigung gewährt, wie im folgenden Beispiel gezeigt. Das Schlüssel-Wert-Paar im Block Condition gibt den Bedingungsschlüssel s3:VersionId an. In diesem Fall muss die genaue Objektversions-ID kennen, um das Objekt aus dem angegebenen Bucket abzurufen. Wenn Sie diese Beispielrichtlinie verwenden möchten, ersetzen Sie Dave durch Ihre eigenen Informationen.user input
placeholders
Weitere Informationen finden Sie unter GetObject in der API-Referenz zu Amazon Simple Storage Service.
Testen der Richtlinie mit der AWS CLI
Sie können die Berechtigungen mit dem AWS CLI-Befehl get-object mit dem Parameter --version-id testen, um die spezifische Objektversion zu identifizieren, die abgerufen werden soll. Der Befehl ruf die angegebene Version des Objekts ab und speichert sie in der -Datei.OutputFile.jpg
aws s3api get-object --bucket--keyamzn-s3-demo-bucketHappyFace.jpgOutputFile.jpg--version-idAaaHbAQitwiL_h47_44lRO2DDfLlBO5e--profileAccountADave
Beispiel 4: Erteilen von Berechtigungen basierend auf Objekt-Tags
Beispiele für die Verwendung von Objektmarkierungs-Bedingungsschlüsseln mit Amazon-S3-Operationen finden Sie unter Markierungs- und Zugriffskontrollrichtlinien.
Beispiel 5: Beschränken des Zugriffs durch die AWS-Konto-ID des Bucket-Eigentümers
Sie können entweder den aws:ResourceAccount- oder s3:ResourceAccount-Bedingungsschlüssel verwenden, um IAM- oder Virtual Private Cloud (VPC)-Endpunktrichtlinien zu schreiben, die den Benutzer- oder Anwendungszugriff auf die Amazon-S3-Buckets einschränken, die einer bestimmten AWS-Konto-ID gehören. Sie können diese Bedingungsschlüssel verwenden, wenn Sie Clients in Ihrer VPC daran hindern möchten, auf Buckets zuzugreifen, die Ihnen nicht gehören.
Dabei sollten Sie allerdings beachten, dass einige AWS-Services auf den Zugriff auf AWS-verwaltete Buckets angewiesen sind. Daher kann es auch den Zugriff auf diese Ressourcen beeinflussen, wenn Sie den Schlüssel aws:ResourceAccount oder s3:ResourceAccount in Ihrer IAM-Richtlinie verwenden. Weitere Informationen finden Sie in den folgenden Ressourcen:
-
Beschränken des Zugriffs auf Buckets in einem bestimmten AWS-Konto im AWS PrivateLink-Handbuch
-
Beschränken des Zugriffs auf Buckets, die Amazon ECR verwendet im Amazon-ECR-Leitfaden
-
Bereitstellung des erforderlichen Zugriffs auf Systems Manager für AWS-verwaltete Amazon-S3-Buckets im AWS Systems Manager-Leitfaden
Weitere Informationen zu den aws:ResourceAccount- und s3:ResourceAccount-Bedingungsschlüsseln sowie Beispiele zu ihrer Verwendung finden Sie unter Limit access to Amazon S3 buckets owned by specific AWS-Konten
Beispiel 6: Mindestanforderung für die TLS-Version
Sie können den Bedingungsschlüssel s3:TlsVersion verwenden, um IAM-, Virtual Private Cloud Endpoint (VPCE)- oder Bucket-Richtlinien zu schreiben, die den Zugriff von Benutzern oder Anwendungen auf Amazon-S3-Buckets basierend auf der vom Client verwendeten TLS-Version einschränken. Sie können diesen Bedingungsschlüssel verwenden, um Richtlinien zu schreiben, die eine minimale TLS-Version erfordern.
Anmerkung
Wenn AWS -Services in Ihrem Namen andere AWS -Services aufrufen (Dienst-zu-Dienst-Aufrufe), werden bestimmte netzspezifische Berechtigungskontexte, einschließlich s3:TlsVersion, aws:SecureTransport, aws:SourceIpund aws:VpcSourceIp, unkenntlich gemacht. Wenn Ihre Richtlinie diese Bedingungsschlüssel mit Deny-Anweisungen verwendet, können AWS-Dienstprinzipale ungewollt blockiert werden. Damit AWS-Services ordnungsgemäß funktionieren und gleichzeitig Ihre Sicherheitsanforderungen erfüllt werden, schließen Sie Dienstprinzipale von Ihren Deny-Anweisungen aus, indem Sie den Bedingungsschlüssel aws:PrincipalIsAWSService mit dem Wert false hinzufügen. Zum Beispiel:
{ "Effect": "Deny", "Action": "s3:*", "Resource": "*", "Condition": { "Bool": { "aws:SecureTransport": "false", "aws:PrincipalIsAWSService": "false" } } }
Diese Richtlinie verweigert den Zugriff auf S3-Operationen, wenn kein HTTPS verwendet wird (aws:SecureTransport ist falsch), aber nur für Prinzipale, die nicht AWS sind. Dadurch wird sichergestellt, dass Ihre bedingten Einschränkungen für alle Prinzipale außer AWS Dienstprinzipale gelten.
Die folgende Beispiel-Bucket-Richtlinie verweigert PutObject-Anforderungen von Clients mit einer TLS-Version, die älter als 1.2 ist, zum Beispiel 1.1 oder 1.0. Wenn Sie diese Beispielrichtlinie verwenden möchten, ersetzen Sie durch Ihre eigenen Informationen.user input placeholders
Die folgende Bucket-Richtlinie erlaubt PutObject-Anforderungen von Clients mit einer TLS-Version neuer als 1.1, zum Beispiel 1.2, 1.3 oder neuer:
Beispiel 7: Ausschließen bestimmter Prinzipale aus einer Deny-Anweisung
Die folgende Bucket-Richtlinie verweigert den s3:GetObject-Zugriff auf den , mit Ausnahme von Prinzipalen mit der Kontonummer amzn-s3-demo-bucket. Wenn Sie diese Beispielrichtlinie verwenden möchten, ersetzen Sie 123456789012 durch Ihre eigenen Informationen.user input
placeholders
Beispiel 8: Erzwingen, dass Clients Objekte basierend auf Objektschlüsselnamen oder ETags bedingt hochladen
Mit bedingten Schreibvorgängen können Sie Ihren WRITE-Anforderungen einen zusätzlichen Header hinzufügen, um Vorbedingungen für Ihren S3-Vorgang festzulegen. Dieser Header spezifiziert eine Bedingung, die, wenn sie nicht erfüllt wird, dazu führt, dass der S3-Vorgang fehlschlägt. Beispielsweise können Sie das Überschreiben vorhandener Daten verhindern, indem Sie beim Hochladen des Objekts überprüfen, ob sich kein Objekt mit demselben Schlüsselnamen bereits in Ihrem Bucket befindet. Sie können alternativ das Entity-Tag (ETag) eines Objekts in Amazon S3 überprüfen, bevor Sie ein Objekt schreiben.
Beispiele für Bucket-Richtlinien, die Bedingungen in einer Bucket-Richtlinie verwenden, um bedingte Schreibvorgänge zu erzwingen, finden Sie unter Erzwingen bedingter Schreibvorgänge in Amazon-S3-Buckets.
Beispiele: Amazon-S3-Bedingungsschlüssel für Bucket-Vorgänge
Die folgenden Beispielrichtlinien zeigen, wie Sie Amazon-S3-spezifische Bedingungsschlüssel für Bucket-Operationen verwenden können.
Themen
Beispiel 1: Erteilen von s3:GetObject-Berechtigungen mit einer Bedingung für eine IP-Adresse
Sie können authentifizierten Benutzern die Berechtigung zum Verwenden der s3:GetObject-Aktion erteilen, wenn die Anforderung aus einem bestimmten Bereich von IP-Adressen stammt (z. B. ), sofern Sie die IP-Adresse nicht ausschließen möchten (z. B. 192.0.2.*). Im 192.0.2.188Condition-Block sind IpAddress und NotIpAddress Bedingungen und bei jeder Bedingung ist ein Schlüssel-Wert-Paar zur Auswertung angefügt. Beide Schlüssel-Wert-Paare in diesem Beispiel verwenden den AWS-weiten Schlüssel aws:SourceIp. Wenn Sie diese Beispielrichtlinie verwenden möchten, ersetzen Sie durch Ihre eigenen Informationen.user input placeholders
Anmerkung
Die im IPAddress-Block angegebenen Schlüsselwerte NotIpAddress und Condition verwenden die CIDR-Notation, wie in RFC 4632 beschrieben. Weitere Informationen finden Sie unter http://www.rfc-editor.org/rfc/rfc4632.txt
Sie können auch andere AWS-weite Bedingungsschlüssel in Amazon-S3-Richtlinien verwenden. Beispielsweise können Sie die Bedingungsschlüssel aws:SourceVpce und aws:SourceVpc in Bucket-Richtlinien für VPC-Endpunkte angeben. Spezifische Beispiele finden Sie unter Steuern des Zugriffs von VPC-Endpunkten mit Bucket-Richtlinien.
Anmerkung
Bei einigen globalen AWS-Bedingungsschlüsseln werden nur bestimmte Ressourcentypen unterstützt. Prüfen Sie daher, ob Amazon S3 den globalen Bedingungsschlüssel und den Ressourcentyp unterstützt, die Sie verwenden möchten, oder ob Sie stattdessen einen spezifischen Bedingungsschlüssel von Amazon S3 verwenden müssen. Eine vollständige Liste der unterstützten Ressourcentypen und Bedingungsschlüssel für Amazon S3 finden Sie unter Aktionen, Ressourcen und Bedingungsschlüssel für Amazon S3 in der Service-Authorization-Referenz.
Weitere Informationen zu den Berechtigungen für S3-API-Operationen nach S3-Ressourcentypen finden Sie unter Erforderliche Berechtigungen für Amazon-S3-API-Operationen.
Beispiel 2: Abrufen einer Liste von Objekten in einem Bucket mit einem bestimmten Präfix
Sie können den s3:prefix-Bedingungsschlüssel verwenden, um die Antwort der ListObjectsV2-API-Operation auf Schlüsselnamen mit einem bestimmten Präfix zu beschränken. Wenn Sie der Bucket-Eigentümer sind, können Sie diesen Bedingungsschlüssel verwenden, um einen Benutzer darauf zu beschränken, den Inhalt eines bestimmten Präfixes im Bucket aufzulisten. Dieser Bedingungsschlüssel s3:prefix ist nützlich, wenn Objekte im Bucket nach Schlüsselnamenpräfixen organisiert sind.
Die Amazon-S3-Konsole verwendet Schlüsselnamenpräfixe zum Anzeigen von Ordnerkonzepten. Nur die Konsole unterstützt das Ordnerkonzept. Die Amazon-S3-API unterstützt ausschließlich Buckets und Objekte. Wenn Sie zum Beispiel zwei Objekte mit den Schlüsselnamen und public/object1.jpg haben, zeigt die Konsole die Objekte unter dem Ordner public/object2.jpg. In der Amazon-S3-API sind dies Objekte mit Präfixen, nicht Objekte in Ordnern. Weitere Informationen zur Verwendung von Präfixen und Trennzeichen zum Filtern von Zugriffsberechtigungen finden Sie unter Kontrollieren des Zugriffs auf einen Bucket mit Benutzerrichtlinien. public
In dem folgenden Szenario sind der Bucket-Eigentümer und das übergeordnete Konto, zu dem der Benutzer gehört, dasselbe. Daher kann der Bucket-Eigentümer entweder eine Bucket-Richtlinie oder eine Benutzer-Richtlinie verwenden, um Zugriff zu gewähren. Weitere Informationen zu anderen Bedingungsschlüsseln, die Sie mit der ListObjectsV2-API-Operation verwenden können, finden Sie unter ListObjectsV2.
Anmerkung
Wenn die Versionsverwaltung für den Bucket aktiviert ist, müssen Sie die Berechtigung s3:ListBucketVersions in den folgenden Richtlinien erteilen, anstelle der Berechtigung s3:ListBucket, um die Objekte im Bucket aufzulisten. Die s3:ListBucketVersions-Berechtigung unterstützt auch den s3:prefix-Bedingungsschlüssel.
Richtlinie für Benutzer:
Die folgende Benutzerrichtlinie erteilt die Berechtigung s3:ListBucket (siehe ListObjectsV2) mit einer Condition-Anweisung, nach der der Benutzer in der Anfrage ein Präfix mit dem Wert von angeben muss. Wenn Sie diese Beispielrichtlinie verwenden möchten, ersetzen Sie projects durch Ihre eigenen Informationen.user input placeholders
Die Condition-Anweisung beschränkt den Benutzer darauf, nur Objektschlüssel aufzulisten, die das -Präfix haben. Die hinzugefügte explizite projectsDeny‑Anweisung verweigert dem Benutzer das Auflisten von Schlüsseln mit jedem anderen Präfix, unabhängig davon, welche weiteren Berechtigungen der Benutzer haben könnte. Beispielsweise ist es möglich, dass der Benutzer die Berechtigung erhält, Objektschlüssel ohne Einschränkungen aufzulisten – entweder durch Updates der vorherigen Benutzerrichtlinie oder durch eine Bucket-Richtlinie. Da explizite Deny-Anweisungen immer Allow-Anweisungen überschreiben, wird die Anforderung verweigert, wenn der Benutzer versucht, andere Schlüssel als die aufzulisten, die das -Präfix haben. projects
Bucket-Richtlinie
Wenn Sie das Principal‑Element zur oben genannten Benutzerrichtlinie hinzufügen, das den Benutzer identifiziert, besitzen Sie nun eine Bucket-Richtlinie, wie im folgenden Beispiel gezeigt. Wenn Sie diese Beispielrichtlinie verwenden möchten, ersetzen Sie durch Ihre eigenen Informationen.user input
placeholders
Testen der Richtlinie mit der AWS CLI
Sie können die Richtlinie mit dem folgenden list-object AWS CLI-Befehl testen. Im Befehl geben Sie Benutzer-Anmeldeinformationen mit dem Parameter --profile an. Weitere Informationen zur Einrichtung und Verwendung der AWS CLI finden Sie unter Entwickeln mit Amazon S3 über die AWS CLI in der API-Referenz zu Amazon S3.
aws s3api list-objects --bucket--prefixamzn-s3-demo-bucketprojects--profileAccountA
Beispiel 3: Festlegen der maximalen Anzahl von Schlüsseln
Sie können den Bedingungsschlüssel s3:max-keys verwenden, um die maximale Anzahl von Schlüsseln festzulegen, die ein Anforderer in einer ListObjectsV2- oder ListObjectVersions-Anforderung zurückgeben kann. Standardmäßig gibt diese API-Operation bis zu 1000 Schlüssel zurück. Die Liste der numerischen Bedingungsoperatoren, die Sie mit s3:max-keys und begleitenden Beispielen verwenden können, finden Sie unter Numerische Bedingungsoperatoren im IAM-Benutzerhandbuch.