Direkt zum Inhalt

Wie kann ich Benutzern Zugriff auf einen bestimmten Ordner in meinem Amazon-S3-Bucket gewähren?

Lesedauer: 5 Minute
0

Ich möchte eine(n) AWS Identity and Access Management (IAM)-Benutzer:in darauf beschränken, nur auf bestimmte Ordner in Amazon Simple Storage Service (Amazon S3) zuzugreifen.

Lösung

Wenn der/die IAM-Benutzer:in und der Bucket demselben AWS-Konto angehören, verwende eine IAM-Richtlinie, um dem/der Benutzer:in Zugriff auf den Bucket-Ordner zu gewähren. Wenn du in der IAM-Richtlinie Zugriff gewährst, musst du die Bucket-Richtlinie nicht aktualisieren. Wenn die Bucket-Richtlinie dem/der IAM-Benutzer:in jedoch ausdrücklich den Zugriff auf den Ordner verweigert, musst du die Bucket-Richtlinie aktualisieren.

Wenn der/die IAM-Benutzer:in und der S3-Bucket zu unterschiedlichen Konten gehören, gewähre den Zugriff sowohl in der IAM-Richtlinie als auch in der Bucket-Richtlinie. Weitere Informationen findest du unter Wie kann ich einem/einer Benutzer:in in einem anderen AWS-Konto den Zugriff gewähren, um Objekte in meinen Amazon-S3-Bucket hochzuladen?

In der IAM-Richtlinie kannst du entweder einzelnen oder mehreren Benutzern Zugriff gewähren. Bei mehreren Benutzern kann die Richtlinie Gruppen oder eine AWS-IAM-Identity-Center-ID enthalten.

Einem/einer einzelnen Benutzer:in Zugriff gewähren

Um einem/einer einzelnen Benutzer:in nur für seinen/ihren Ordner Zugriff zu gewähren, erstelle eine IAM-Richtlinie.

Beispiel für eine Richtlinie:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowStatement1",
      "Action": [
        "s3:ListAllMyBuckets",
        "s3:GetBucketLocation"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::*"
      ]
    },
    {
      "Sid": "AllowStatement2A",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
      ],
      "Condition": {
        "StringEquals": {
          "s3:prefix": [
            "",
            "home/",
            "home/David"
          ],
          "s3:delimiter": [
            "/"
          ]
        }
      }
    },
    {
      "Sid": "AllowStatement3",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
      ],
      "Condition": {
        "StringLike": {
          "s3:prefix": [
            "home/David/*"
          ]
        }
      }
    },
    {
      "Sid": "AllowStatement4A",
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/home/David/*"
      ]
    }
  ]
}

Hinweis: Ersetze DOC-EXAMPLE-BUCKET durch den Namen deines Buckets.

In der Richtlinie kannst du Anweisungen wie die folgenden aufnehmen:

  • Verwende AllowStatement1, um dem/der Benutzer:in zu ermöglichen, die Buckets aufzulisten, die zu seinem/ihrem Konto gehören, und zum Bucket auf der Konsole zu navigieren.
  • Verwende AllowStatement2A, um dem/der Benutzer:in zu ermöglichen, die Ordner in DOC-EXAMPLE-BUCKET aufzulisten und zum Ordner auf der Konsole zu navigieren.
  • Verwende AllowStatement3, um dem/der Benutzer:in zu ermöglichen, den Inhalt im Ordner DOC-EXAMPLE-BUCKET/home/Username aufzulisten.
  • Verwende AllowStatement4A, um alle Aktionen wie Lese-, Schreib- und Löschberechtigungen nur im Ordner DOC-EXAMPLE-BUCKET/home/Username zu ermöglichen.

Verwende eine Gruppenrichtlinie, um mehreren Benutzern Zugriff zu gewähren

Verwende Richtlinienvariablen, um eine Gruppenrichtlinie für mehrere Benutzer zu erstellen.

Beispiel für eine Bucket-Richtlinie, die die Richtlinienvariable ${aws:username} verwendet:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowGroupToSeeBucketListInTheConsole",
      "Action": [
        "s3:ListAllMyBuckets",
        "s3:GetBucketLocation"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::*"
      ]
    },
    {
      "Sid": "AllowRootAndHomeListingOfCompanyBucket",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
      ],
      "Condition": {
        "StringEquals": {
          "s3:prefix": [
            "",
            "home/"
          ],
          "s3:delimiter": [
            "/"
          ]
        }
      }
    },
    {
      "Sid": "AllowListingOfUserFolder",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
      ],
      "Condition": {
        "StringLike": {
          "s3:prefix": [
            "home/${aws:username}/*",
            "home/${aws:username}"
          ]
        }
      }
    },
    {
      "Sid": "AllowAllS3ActionsInUserFolder",
      "Action": [
        "s3:*"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/home/${aws:username}/*"
      ]
    }
  ]
}

Hinweis: Ersetze DOC-EXAMPLE-BUCKET durch den Namen deines Buckets.

Die vorherige Richtlinie verwendet den Schlüssel aws:username und gibt den Anzeigenamen des Benutzers zurück, z. B. „Adele“ oder „David“. Du kannst auch eine eindeutige ID verwenden, wenn der Wert aws:username für eine bestimmte IAM-Rolle möglicherweise nicht gültig ist. Weitere Informationen findest du unter Prinzipalschlüsselwerte.

Die IAM-Benutzer können alle Präfixe auf der übergeordneten Ebene auflisten, z. B. DOC-EXAMPLE-BUCKET/. Benutzer können auch in jedem Benutzeroberflächen (GUI)-Client zu ihrem Stammverzeichnis navigieren. Wenn du die Aktion List (Auflisten) nicht auf der übergeordneten Ebene bereitstellst, musst du eine Befehlszeilenschnittstelle verwenden, um auf den angegebenen Ordner zuzugreifen.

Verwendung von AWS IAM Identity Center, um mehreren Benutzern Zugriff zu gewähren

Du kannst den Zugriff auf einen S3-Bucket-Ordner auf der Grundlage des AWS-IAM-Identity-Center-Prinzipals steuern. Alle Benutzer im IAM-Identity-Center-Verzeichnis haben eine eindeutige Benutzer-ID. Verwende die Richtlinienvariable ${identitystore:UserId} für alle Benutzer, für die du den Zugriff auf den Ordner einschränken möchtest.

Verwende beim Erstellen des S3-Ordners einen Ordnernamen, der der ID des Benutzers im IAM-Identity-Center-Verzeichnis entspricht. Der Benutzer John hat beispielsweise die eindeutige Benutzer-ID 1111111111-2a2aaa222-bb33-4444-5555-5cc5555c555c. Um John zu verwalten, erstelle im S3-Bucket einen Ordner für John mit dem Namen /home/1111111111-2a2aaa222-bb33-4444-5555-5cc5555c555c. Um die Benutzer-IDs für die Benutzer zu finden, navigiere in der IAM-Identity-Center-Konsole zu jedem/jeder Benutzer:in oder verwende die DescribeUser-API.

Die folgende Beispiel-IAM-Richtlinie verwendet die Variable ${identitystore:UserId}:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowGroupToSeeBucketListInTheConsole",
      "Action": [
        "s3:ListAllMyBuckets",
        "s3:GetBucketLocation"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::*"
      ]
    },
    {
      "Sid": "AllowRootAndHomeListingOfCompanyBucket",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
      ],
      "Condition": {
        "StringEquals": {
          "s3:prefix": [
            "",
            "home/"
          ],
          "s3:delimiter": [
            "/"
          ]
        }
      }
    },
    {
      "Sid": "AllowListingOfUserFolder",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
      ],
      "Condition": {
        "StringLike": {
          "s3:prefix": [
            "home/${identitystore:UserId}/*",
            "home/${identitystore:UserId}"
          ]
        }
      }
    },
    {
      "Sid": "AllowAllS3ActionsInUserFolder",
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/home/${identitystore:UserId}/*"
      ]
    }
  ]
}

Hinweis: Ersetze DOC-EXAMPLE-BUCKET durch den Namen deines Buckets.

Ähnliche Informationen

Steuern des Zugriffs auf einen Bucket mit Benutzerrichtlinien

Beispiele: Amazon-S3-Bedingungsschlüssel für Bucket-Operationen

Testen von IAM-Richtlinien mit dem IAM-Richtliniensimulator