Beispiele für Benutzerrichtlinien - Amazon Simple Storage Service

Beispiele für Benutzerrichtlinien

Dieser Abschnitt zeigt mehrere AWS Identity and Access Management (IAM)-Benutzerrichtlinien zum Steuern des Benutzerzugriffs auf Amazon S3. Beispiele für Bucket-Richtlinien finden Sie unter Verwenden von Bucket-Richtlinien. Informationen zur IAM-Richtliniensprache finden Sie unter Bucket-Richtlinien und Benutzerrichtlinien.

Die folgenden Beispielrichtlinien funktionieren, wenn Sie sie programmgesteuert verwenden. Um sie mit der Amazon-S3-Konsole verwenden zu können, müssen Sie aber zusätzliche Berechtigungen gewähren, die für die Konsole erforderlich sind. Informationen zur Verwendung von Richtlinien wie dieser mit der Amazon-S3-Konsole finden Sie unter Kontrollieren des Zugriffs auf einen Bucket mit Benutzerrichtlinien.

Einem IAM-Benutzer den Zugriff auf einen Ihrer Buckets erlauben

In diesem Beispiel möchten Sie einem IAM-Benutzer in Ihrem AWS-Konto Zugriff auf einen Ihrer Buckets, DOC-EXAMPLE-BUCKET1, gewähren und dem Benutzer erlauben, Objekte hinzuzufügen, zu aktualisieren und zu löschen.

Zusätzlich zum Erteilen der Berechtigungen s3:PutObject, s3:GetObject und s3:DeleteObject für den Benutzer, gewährt die Richtlinie die Berechtigungen s3:ListAllMyBuckets, s3:GetBucketLocation und s3:ListBucket. Dies sind die zusätzlichen Berechtigungen, die von der Konsole benötigt werden. Außerdem sind die Aktionen s3:PutObjectAcl und s3:GetObjectAcl erforderlich, um Objekte in der Konsole kopieren, ausschneiden und einfügen zu können. Ein detailliertes Beispiel für eine Richtlinie, die Berechtigungen für Benutzer erteilt und sie unter Verwendung der Konsole testet, finden Sie unter Kontrollieren des Zugriffs auf einen Bucket mit Benutzerrichtlinien.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action": "s3:ListAllMyBuckets", "Resource":"*" }, { "Effect":"Allow", "Action":["s3:ListBucket","s3:GetBucketLocation"], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1" }, { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:PutObjectAcl", "s3:GetObject", "s3:GetObjectAcl", "s3:DeleteObject" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*" } ] }

Jedem IAM-Benutzer Zugriff auf einen Ordner in einem Bucket erlauben

In diesem Beispiel möchten Sie zwei IAM-Benutzern, Mary und Carlos, den Zugriff auf Ihren Bucket, DOC-EXAMPLE-BUCKET1, gewähren, damit sie Objekte hinzufügen, aktualisieren und löschen können. Allerdings möchten Sie den Zugriff beider Benutzer auf ein einzelnes Präfix (Ordner) im Bucket einschränken. Sie könnten Ordner mit Namen erstellen, die dem jeweiligen Benutzernamen entsprechen.

DOC-EXAMPLE-BUCKET1 Mary/ Carlos/

Um jedem Benutzer nur den Zugriff auf den eigenen Ordner zu gewähren, können Sie für jeden Benutzer eine Richtlinie schreiben und ihnen einzeln zuweisen. Sie können beispielsweise die folgende Richtlinie der Benutzerin Mary zuweisen, um ihr spezifische Amazon-S3-Berechtigungen für den Ordner DOC-EXAMPLE-BUCKET1/Mary zu gewähren.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/Mary/*" } ] }

Dann können Sie dem Benutzer Carlos eine ähnliche Richtlinie zuweisen, indem Sie den Ordner Carlosim Wert Resource angeben.

Statt Richtlinien einzelnen Benutzern zuzuweisen, können Sie auch eine einzelne Richtlinie mit einer Richtlinienvariable schreiben und dann die Richtlinie einer Gruppe zuweisen. Sie müssen zuerst eine Gruppe erstellen und die Benutzer Mary und Carlos in die Gruppe aufnehmen. Die folgende Beispielrichtlinie erlaubt eine Reihe von Amazon-S3-Berechtigungen für den Ordner DOC-EXAMPLE-BUCKET1/${aws:username}. Wenn die Richtlinie ausgewertet wird, wird die Richtlinienvariable ${aws:username} durch den Benutzernamen des Anforderers ersetzt. Wenn Mary beispielsweise eine Anforderung zum Anlegen eines Objekts sendet, ist die Operation nur zulässig, wenn Mary das Objekt in den Ordner DOC-EXAMPLE-BUCKET1/Mary hochlädt.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/${aws:username}/*" } ] }
Anmerkung

Bei der Verwendung von Richtlinienvariablen müssen Sie explizit die Version 2012-10-17 in der Richtlinie angeben. Die Standardversion der IAM-Richtliniensprache, 2008-10-17, unterstützt keine Richtlinienvariablen.

Wenn Sie die vorherige Richtlinie in der Amazon-S3-Konsole testen möchten, erfordert die Konsole zusätzliche Berechtigungen, wie in der folgenden Richtlinie gezeigt. Weitere Informationen darüber, wie die Konsole diese Berechtigungen verwendet, finden Sie unter Kontrollieren des Zugriffs auf einen Bucket mit Benutzerrichtlinien.

{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowGroupToSeeBucketListInTheConsole", "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": "arn:aws:s3:::*" }, { "Sid": "AllowRootLevelListingOfTheBucket", "Action": "s3:ListBucket", "Effect": "Allow", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1", "Condition":{ "StringEquals":{ "s3:prefix":[""], "s3:delimiter":["/"] } } }, { "Sid": "AllowListBucketOfASpecificUserPrefix", "Action": "s3:ListBucket", "Effect": "Allow", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1", "Condition":{ "StringLike":{"s3:prefix":["${aws:username}/*"] } } }, { "Sid": "AllowUserSpecificActionsOnlyInTheSpecificUserPrefix", "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/${aws:username}/*" } ] }
Anmerkung

In der 2012-10-17-Version der Richtlinie beginnen Richtlinienvariablen mit $. Diese Syntaxänderung kann möglicherweise einen Konflikt verursachen, wenn Ihr Objektschlüssel (Objektname) ein $-Zeichen enthält.

Damit dieser Konflikt vermieden wird, geben Sie das Zeichen $ mithilfe von ${$} an. Um beispielsweise einen Objektschlüssel my$file in eine Richtlinie aufzunehmen, geben Sie das Zeichen mit my${$}file an.

Obwohl IAM-Benutzernamen benutzerfreundliche, von Menschen lesbare Bezeichner sind, müssen sie global nicht eindeutig sein. Wenn beispielsweise der Benutzer Carlos die Organisation verlässt und ein anderer Carlos hinzukommt, könnte der neue Carlos auf die Informationen des vorherigen Carlos zugreifen.

Anstatt Benutzernamen zu verwenden, könnten Sie Ordner erstellen, die auf IAM-Benutzer-IDs basieren. Jede IAM-Benutzer-ID muss eindeutig sein. In diesem Fall müssen Sie die vorherige Richtlinie ändern, und die Richtlinienvariable ${aws:userid} verwenden. Weitere Informationen zu den Benutzerkennungen finden Sie unter IAM-Kennungen im IAM-Benutzerhandbuch.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/home/${aws:userid}/*" } ] }

Nicht-IAM-Benutzern (Nutzern mobiler Apps) den Zugriff auf Ordner in einem Bucket erlauben

Angenommen, Sie möchten eine mobile App entwickeln, ein Spiel, in dem Benutzerdaten in einem S3-Bucket gespeichert werden. Sie möchten für jeden App-Benutzer einen Ordner in Ihrem Bucket erstellen. Sie möchten auch den Zugriff jedes Benutzers auf seinen eigenen Ordner beschränken. Sie können jedoch keine Ordner erstellen, bevor jemand Ihre App herunterlädt und das Spiel beginnt, weil Sie dessen Benutzer-ID nicht vorliegen haben.

In diesem Fall können Sie von den Nutzern verlangen, dass Sie sich in Ihrer App über einen öffentlichen Identitätsanbieter anmelden, wie z. B. Login with Amazon, Facebook oder Google. Nachdem sich Benutzer über einen dieser Anbieter bei Ihrer App angemeldet haben, verfügen sie über eine Benutzer-ID, mit der Sie zur Laufzeit benutzerspezifische Ordner erstellen können.

Sie können dann den Web-Identitätsverbund in AWS Security Token Service verwenden, um Informationen vom Identitätsanbieter in Ihre App zu integrieren und um temporäre Sicherheitsanmeldeinformationen für jeden Benutzer zu erhalten. Sie können dann IAM-Richtlinien erstellen, die es der App ermöglichen, auf Ihren Bucket zuzugreifen und solche Vorgänge wie das Erstellen von benutzerspezifischen Ordnern und das Hochladen von Daten durchzuführen. Weitere Informationen zum Web-Identitätsverbund finden Sie unter Über Web Identity Federation im IAM-Benutzerhandbuch.

Einer Gruppe erlauben, einen freigegebenen Ordner in Amazon S3 zu haben

Durch Anfügen der folgenden Richtlinie an die Gruppe erhalten alle Benutzer der Gruppe Zugriff auf den folgenden Ordner in Amazon S3: DOC-EXAMPLE-BUCKET1/share/marketing. Gruppenmitglieder dürfen nur auf die spezifischen Amazon-S3-Berechtigungen zugreifen, die in der Richtlinie gegeben sind, und nur für Objekte im angegebenen Ordner.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/share/marketing/*" } ] }

Erteilen der Erlaubnis für alle Benutzer, Objekte in einem Teil des Buckets zu lesen

In diesem Beispiel erstellen Sie eine Gruppe mit dem Namen AllUsers, die alle IAM-Benutzer enthält, die dem AWS-Konto angehören. Anschließend fügen Sie eine Richtlinie hinzu, die der Gruppe Zugriff auf GetObject und GetObjectVersion gewährt, jedoch nur für Objekte im Ordner DOC-EXAMPLE-BUCKET1/readonly.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObject", "s3:GetObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/readonly/*" } ] }

Erteilen der Erlaubnis für einen Partner, Dateien in einem bestimmten Bereich des Buckets abzulegen

In diesem Beispiel erstellen Sie eine Gruppe namens AnyCompany, die eine Partnerfirma darstellt. Sie erstellen einen IAM-Benutzer für die bestimmte Person oder Anwendung bei der Partnerfirma, die Zugriff benötigt, und dann fügen Sie den Benutzer in die Gruppe ein.

Sie fügen dann eine Richtlinie hinzu, die der Gruppe den PutObject-Zugriff auf den folgenden Ordner im Bucket erteilt:

DOC-EXAMPLE-BUCKET1/uploads/anycompany

Sie möchten verhindern, dass die AnyCompany-Gruppe andere Aktionen für den Bucket ausführt. Daher fügen Sie eine Anweisung hinzu, die explizit die Berechtigung für andere Amazon-S3-Aktionen verweigert, außer für PutObject in einer Amazon-S3-Ressource im AWS-Konto.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"s3:PutObject", "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/uploads/anycompany/*" }, { "Effect":"Deny", "Action":"s3:*", "NotResource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/uploads/anycompany/*" } ] }

Beschränken des Zugriffs auf Amazon-S3-Buckets in einem bestimmten AWS-Konto

Wenn Sie sicherstellen möchten, dass Ihre Amazon-S3-Prinzipale nur auf die Ressourcen zugreifen, die sich innerhalb eines vertrauenswürdigen AWS-Konto befinden, können Sie den Zugriff einschränken. Beispiel: Diese identitätsbasierte IAM-Richtlinie verwendet eine Deny-Auswirkung, um den Zugriff auf Amazon-S3-Aktionen zu blockieren, es sei denn, die Amazon-S3-Ressource, auf die zugegriffen wird, befindet sich im Konto 222222222222. Damit ein IAM-Prinzipal in einem AWS-Konto nicht auf Amazon-S3-Objekte außerhalb des Kontos zugreifen kann, fügen Sie die folgende IAM-Richtlinie an:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyS3AccessOutsideMyBoundary", "Effect": "Deny", "Action": [ "s3:*" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:ResourceAccount": [ "222222222222" ] } } } ] }
Anmerkung

Diese Richtlinie ersetzt Ihre vorhandenen IAM-Zugriffskontrollen nicht, da sie keinen Zugriff gewährt. Stattdessen fungiert diese Richtlinie als zusätzlicher Integritätsschutz für Ihre anderen IAM-Berechtigungen, unabhängig von den durch andere IAM-Richtlinien erteilten Berechtigungen.

Ersetzen Sie unbedingt die Konto-ID 222222222222 in der Richtlinie durch Ihr eigenes AWS-Konto. Wenn Sie eine Richtlinie unter Beibehaltung dieser Einschränkung auf mehrere Konten anwenden möchten, ersetzen Sie die Konto-ID durch den Bedingungsschlüssel aws:PrincipalAccount. Diese Bedingung erfordert, dass sich der Prinzipal und die Ressource in demselben Konto befinden müssen.

Beschränken des Zugriffs auf Amazon-S3-Buckets innerhalb Ihrer Organisationseinheit (OU)

Wenn Sie eine Organisationseinheit (OU) in AWS Organizations eingerichtet haben, können Sie den Amazon-S3-Bucket-Zugriff auf einen bestimmten Teil Ihrer Organisation einschränken. In diesem Beispiel wird der aws:ResourceOrgPaths-Schlüssel verwendet, um den Amazon-S3-Bucket-Zugriff auf eine OU in Ihrer Organisation einzuschränken. In diesem Beispiel lautet die OU-ID ou-acroot-exampleou. Stellen Sie sicher, dass Sie diesen Wert in Ihrer Richtlinie durch Ihre eigenen OU-IDs ersetzen.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowS3AccessOutsideMyBoundary", "Effect": "Allow", "Action": [ "s3:*" ], "Resource": "*", "Condition": { "ForAllValues:StringNotLike": { "aws:ResourceOrgPaths": [ "o-acorg/r-acroot/ou-acroot-exampleou/" ] } } } ] }
Anmerkung

Diese Richtlinie gewährt keinen Zugriff. Stattdessen fungiert diese Richtlinie als Schutz für Ihre anderen IAM-Berechtigungen und verhindert, dass Ihre Prinzipale außerhalb einer von OU definierten Grenze auf Amazon-S3-Objekte zugreifen.

Die Richtlinie verweigert den Zugriff auf Amazon-S3-Aktionen, es sei denn, das Amazon-S3-Objekt, auf das zugegriffen wird, befindet sich in der OU ou-acroot-exampleou Ihrer Organisation. Die IAM-Richtlinienbedingung erfordert, dass aws:ResourceOrgPaths, ein Mehrfachwertbedingungsschlüssel, einen der aufgelisteten OU-Pfade enthält. Die Richtlinie verwendet den Operator ForAllValues:StringNotLike zum Vergleich der Werte von aws:ResourceOrgPaths mit den aufgelisteten OUs ohne Berücksichtigung der Groß- und Kleinschreibung.

Beschränken des Zugriffs auf Amazon-S3-Buckets innerhalb Ihrer Organisation

Wenn Sie den Zugriff auf Amazon-S3-Objekte in Ihrer Organisation einschränken möchten, fügen Sie eine IAM-Richtlinie an das Stammverzeichnis der Organisation an und wenden Sie sie auf alle Konten in Ihrer Organisation an. Verwenden Sie eine Service-Kontrollrichtlinie (SCP), um zu verlangen, dass Ihre IAM-Prinzipale diese Regel befolgen. Wenn Sie sich für die Verwendung einer SCP entscheiden, achten Sie darauf, die SCP gründlich zu testen, bevor Sie die Richtlinie dem Stammverzeichnis der Organisation anfügen.

In der folgenden Beispielrichtlinie wird der Zugriff auf Amazon-S3-Aktionen verweigert, es sei denn, das Amazon-S3-Objekt, auf das zugegriffen wird, befindet sich in derselben Organisation wie der IAM-Prinzipal, der darauf zugreift:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyS3AccessOutsideMyBoundary", "Effect": "Deny", "Action": [ "s3:*" ], "Resource": "arn:aws:s3:::*/*", "Condition": { "StringNotEquals": { "aws:ResourceOrgID": "${aws:PrincipalOrgID}" } } } ] }
Anmerkung

Diese Richtlinie gewährt keinen Zugriff. Stattdessen fungiert diese Richtlinie als Schutz für Ihre anderen IAM-Berechtigungen und verhindert, dass Ihre Prinzipale auf Amazon-S3-Objekte außerhalb Ihrer Organisation zugreifen. Diese Richtlinie gilt auch für Amazon-S3-Ressourcen, die nach Inkrafttreten der Richtlinie erstellt werden.

Die IAM-Richtlinienbedingung in diesem Beispiel erfordert, dass aws:ResourceOrgID und aws:PrincipalOrgID gleich sind. Bei dieser Anforderung müssen sich der Prinzipal, der die Anforderung stellt, und die Ressource, auf die zugegriffen wird, in derselben Organisation befinden.