Teilen von S3 Objektspeicher mit s3 Bucket Policy auf CODE-DE

S3 BUCKET POLICY

Ceph - der Software Defined Storage, der in CloudFerro-Clouds verwendet wird, ist weitgehend kompatibel mit der Amazon S3 API. Die Bucket-Policy ermöglicht eine selektive Freigabe des Zugriffs auf Objektspeicher Buckets zwischen Nutzern verschiedener Projekte in derselben Cloud.

IN DIESEM DOKUMENT VERWENDETE NAMENSKONVENTION

Bucket Owner - OpenStack-Benutzerin, die einen Objektspeicher-Bucket in ihrem Projekt erstellt hat und beabsichtigt ihren Bucket oder eine Teilmenge von Objekten in diesem Bucket für einen anderen Benutzer in derselben Cloud freizugeben.

Bucket User - OpenStack-Benutzer, der Zugriff auf den Objektspeicher-Bucket eines Bucket Owners erhalten möchte.

Bucket Owner’s Project - ein Projekt, in dem ein gemeinsamer Container erstellt wird.

Bucket User’s Project - ein Projekt, das Zugriff auf den Objektspeicherbereich des Bucket Owners erhält.

Tenant Admin - der Administrator-Benutzer eines Benutzers, der OpenStack-Projekte erstellen und Benutzer und Rollen innerhalb seiner Domäne verwalten kann.

Bemerkung

In den Code-Beispielen sind die in Großbuchstaben geschriebenen Werte, wie BUCKET_OWNER_PROJECT_ID, Platzhalter, die durch die tatsächlichen Werte für Ihren Anwendungsfall ersetzt werden sollten.

EINSCHRÄNKUNGEN

Es ist möglich, den Zugang nur auf Projektebene zu gewähren, nicht auf Benutzerebene. Um einem einzelnen Benutzer Zugriff zu gewähren, muss der Tenant Admin eines Bucket-Benutzers ein separates Projekt innerhalb seiner Domäne erstellen, auf das nur ausgewählte Benutzer Zugriff erhalten.

Die Ceph-S3-Implementierung unterstützt keine Benutzer-, Rollen- oder Gruppenrichtlinien.

Die Ceph S3-Implementierung unterstützt die folgenden S3-Aktionen durch Festlegen von Bucket-Richtlinien.

S3cmd KONFIGURATION

Um einen Bucket mit Hilfe der S3 Bucket Policy freizugeben, müssen Sie zunächst s3cmd mit Hilfe dieses Tutorials konfigurieren: Wie man mit S3cmd oder boto3 auf privaten Objektspeicher zugreift auf CODE-DE

FESTLEGEN DER BUCKET POLICY

JSON-Datei für die Richtlinien

Die Bucket-Policy wird mit einer JSON-Datei deklariert. Sie kann mit vim oder nano erstellt werden. Ein Beispiel für eine JSON-Vorlage für eine Richtlinie:

{
    "Id":  "POLICY_ID",
    "Version":  "2012-10-17",
    "Statement":  [
      {
        "Sid":  "STATEMENT_NAME",
        "Action":  [
          "s3:ACTION_1",
          "s3:ACTION_2"
        ],
        "Effect":  "EFFECT",
        "Resource":  "arn:aws:s3:::KEY_SPECYFICATION",
        "Condition":  {
          "CONDITION_1": {
          }
        },
        "Principal":  {
          "AWS":  [
            "arn:aws:iam::PROJECT_ID:root"
          ]
        }
      }
    ]
  }

POLICY_ID - ID Ihrer Richtlinie.

STATEMENT_NAME - Name Ihrer Erklärung.

ACTION - Aktionen, die Sie dem Bucket-Benutzer zur Ausführung im Bucket erlauben.

PROJECT_ID - FRA1-1 Projekt ID

List of actions:

s3:AbortMultipartUpload
s3:CreateBucket
s3:DeleteBucketPolicy
s3:DeleteBucket
s3:DeleteBucketWebsite
s3:DeleteObject
s3:DeleteObjectVersion
s3:GetBucketAcl
s3:GetBucketCORS
s3:GetBucketLocation
s3:GetBucketPolicy
s3:GetBucketRequestPayment
s3:GetBucketVersioning
s3:GetBucketWebsite
s3:GetLifecycleConfiguration
s3:GetObjectAcl
s3:GetObject
s3:GetObjectTorrent
s3:GetObjectVersionAcl
s3:GetObjectVersion
s3:GetObjectVersionTorrent
s3:ListAllMyBuckets
s3:ListBucketMultiPartUploads
s3:ListBucket
s3:ListBucketVersions
s3:ListMultipartUploadParts
s3:PutBucketAcl
s3:PutBucketCORS
s3:PutBucketPolicy
s3:PutBucketRequestPayment
s3:PutBucketVersioning
s3:PutBucketWebsite
s3:PutLifecycleConfiguration
s3:PutObjectAcl
s3:PutObject
s3:PutObjectVersionAcl

KEY_SPECIFICATION - definiert einen Bucket und seine Schlüssel/Objekte. Zum Beispiel:

"arn:aws:s3:::*" - der Container und alle seine Objekte
"arn:aws:s3:::MY_SHARED_BUCKET/*" - alle Objekte von mybucket
"arn:aws:s3:::MY_SHARED_BUCKET/myfolder/*" - alle Objekte im Unterordner myfolder in mybucket

CONDITIONS - zusätzliche Bedingungen, um den Zugriff auf den Bucket zu filtern. Sie können zum Beispiel den Zugriff für eine bestimmte IP-Adresse gewähren:

"Condition":  {
      "IpAddress":  {
        "aws:SourceIp":  "USER_IP_ADRESS/32"
      }

oder alternativ können Sie den Zugriff auf eine bestimmte IP-Adresse beschränken:

"Condition":  {
      "NotIpAddress":  {
        "aws:SourceIp":  "PERMITTED_USER_IP_ADRESS/32"
      }

EINSTELLEN EINER RICHTLINIE FÜR DEN BUCKET

Die Richtlinie kann für einen Bucket wie folgt festgelegt werden:

s3cmd setpolicy POLICY_JSON_FILE s3://MY_SHARED_BUCKET command.

Um die Richtlinie für einen Bucket zu überprüfen, verwenden Sie den folgenden Befehl:

s3cmd info s3://MY_SHARED_BUCKET

**Die Police kann für den Container wie folgt gelöscht werden

s3cmd delpolicy s3://MY_SHARED_BUCKET

BEISPIELSZENARIEN

Ein Bucket-Besitzer möchte einem Bucket-Benutzer unter Verwendung seiner PROJECT_ID einen Lese-/Schreibzugriff auf einen Bucket gewähren:

  "Version": "2012-10-17",
  "Id": "read-write",
  "Statement": [
    {
      "Sid": "project-read-write",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::BUCKET_OWNER_PROJECT_ID:root",
          "arn:aws:iam::BUCKET_USER_PROJECT_ID:root"
        ]
      },
      "Action": [
        "s3:ListBucket",
        "s3:PutObject",
        "s3:DeleteObject",
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:s3:::*"
      ]
    }
  ]
}

Nehmen wir an, dass die Datei mit dieser Richtlinie den Namen „read-write-policy.json“ trägt. Um sie anzuwenden, sollte der Bucket-Besitzer sie ausführen:

s3cmd setpolicy read-write-policy.json s3://MY_SHARED_BUCKET

Um dann auf den Bucket zuzugreifen, z. B. um den Inhalt aufzulisten, muss der Bucket User folgendes tun:

s3cmd ls s3://MY_SHARED_BUCKET

Ein Bucket-Besitzer möchte einem Bucket-Benutzer über seine IP_ADRESSE Lese-/Schreibzugriff auf einen Bucket gewähren:

(In diesem Fall setzen wir AWS auf „*“, was theoretisch Zugriff auf jedes Projekt in FRA1-1 gewährt, wir werden jedoch den Zugriff auf nur eine IP filtern)

{
  "Id":  "Policy1654675551882",
  "Version":  "2012-10-17",
  "Statement":  [
    {
      "Sid":  "Stmt1654675545682",
      "Action":  [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect":  "Allow",
      "Resource":  "arn:aws:s3:::MY_SHARED_BUCKET/*",
      "Condition":  {
        "IpAddress":  {
          "aws:SourceIp":  "IP_ADRESS/32"
        }
      },
      "Principal":  {
        "AWS":  [
          "*"
        ]
      }
    }
  ]
}

Nehmen wir an, dass die Datei mit dieser Richtlinie den Namen „read-write-policy-ip.json“ trägt. Um sie anzuwenden, sollte der Bucket-Besitzer diesen Befehl anwenden:

s3cmd setpolicy read-write-policy-ip.json s3://MY_SHARED_BUCKET