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

Lesedauer: 5 Minute
0

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

Lösung

Wenn der IAM-Benutzer und der Bucket demselben AWS-Konto angehören, verwende eine IAM-Richtlinie, um dem Benutzer 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 IAM-Benutzer jedoch ausdrücklich den Zugriff auf den Ordner verweigert, musst du die Bucket-Richtlinie aktualisieren.

Wenn der IAM-Benutzer 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 Benutzer 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 einzelnen Benutzer Zugriff gewähren

Um einem einzelnen Benutzer nur für seinen 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/*"
      ]
    }
  ]
}

In deiner Richtlinie kannst du Anweisungen wie die folgenden aufnehmen:

  • Verwende AllowStatement1, um dem Benutzer zu ermöglichen, die Buckets aufzulisten, die zu seinem Konto gehören, und zum Bucket auf der Konsole zu navigieren.
  • Verwende AllowStatement2A, um dem Benutzer zu ermöglichen, die Ordner in DOC-EXAMPLE-BUCKET aufzulisten und zum Ordner auf der Konsole zu navigieren.
  • Verwende AllowStatement3, um dem Benutzer 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}/*"
      ]
    }
  ]
}

Die vorstehende 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 Liste 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. Jeder Benutzer im IAM Identity Center-Verzeichnis hat eine eindeutige Benutzer-ID. Verwende die Richtlinienvariable ${identitystore:UserId} für jeden Benutzer, für den 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 Benutzer 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}/*"
      ]
    }
  ]
}

Ä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

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Monaten