Skip to main content
  • »
  • S3 »
  • Udostępnianie bucketów przy użyciu polityki s3 bucket w NSIS

Udostępnianie bucketów przy użyciu polityki s3 bucket w NSIS

Polityka dotycząca bucket S3

Ceph - Software Defined Storage używany w chmurze NSIS, zapewniający kompatybilność object storage z podzbiorem API Amazon S3. Bucket policy w Ceph jest częścią S3 API i pozwala na selektywne współdzielenie dostępu do object storage buckets pomiędzy użytkownikami różnych projektów, w tej samej chmurze.

Konwencje nazewnictwa stosowane w niniejszym dokumencie

Bucket Owner

Dzierżawca OpenStack, który utworzył object storage backet w swoim projekcie, zamierzając udostępnić swój bucket lub podzbiór obiektów w bucket innemu dzierżawcy w tej samej chmurze.

Bucket User

Dzierżawca OpenStack, który chce uzyskać dostęp do object storage bucket, należącego do Bucket Ownera.

Projekt Bucket Ownera

Projekt, w którym tworzony jest shared (współdzielony) bucket.

Projekt Bucket Usera

Projekt, który uzyskuje dostęp do object storage bucket, należącego do Bucket Ownera.

Tenant Admin

Tenant administrator (użytkownik), który może tworzyć projekty OpenStack oraz zarządzać użytkownikami i rolami w swojej domenie.

W przykładach kodu, wartości wpisane wielkimi literami, takie jak BUCKET_OWNER_PROJECT_ID, są symbolami zastępczymi, które należy zastąpić rzeczywistymi wartościami pasującymi do danego przypadku użycia.

Ograniczenia

Możliwe jest przyznanie dostępu wyłącznie na poziomie projektu, a nie na poziomie użytkownika. Aby przyznać dostęp indywidualnemu użytkownikowi, Tenant Admin Bucket Usera powinien utworzyć osobny projekt w ramach swojej domeny, do którego dostęp zostanie przyznany wyłącznie wybranym użytkownikom.

Implementacja Ceph S3

  • obsługuje następujące akcje S3 poprzez ustawienie polityki bucket, ale

  • nie obsługuje zasad dotyczących użytkowników, ról ani grup.

KONFIGURACJA S3cmd

Aby udostępnić bucket przy użyciu polityki S3 Bucket należy najpierw skonfigurować s3cmd korzystając z tego poradnika Jak uzyskać dostęp do object storage z NSIS za pomocą s3cmd

Deklarowanie polityki S3 Bucket

Ważne

Kod w tym artykule będzie działał tylko wtedy, gdy wartość parametru Version to

"Version":  "2012-10-17",

Sekcje pliku JSON, deklarującego tę politykę

Polityka S3 Bucket jest deklarowana za pomocą pliku JSON. Można go utworzyć za pomocą edytorów takich jak vim lub nano. Oto przykładowy szablon JSON polityki:

{
    "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_SPECIFICATION",
        "Condition":  {
          "CONDITION_1": {
          }
        },
        "Principal":  {
          "AWS":  [
            "arn:aws:iam::PROJECT_ID:root"
          ]
        }
      }
    ]
  }
POLICY_ID

Identyfikator polisy.

STATEMENT_NAME

Nazwa oświadczenia.

AKCJA

Akcje, do wykonywania których Bucket User ma dostęp.

PROJECT_ID

Identyfikator projektu

Lista działań

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

Definiuje on bucket i jego klucze/obiekty. Na przykład:

"arn:aws:s3:::*" - the bucket and all of its objects
"arn:aws:s3:::MY_SHARED_BUCKET/*" - all objects of mybucket
"arn:aws:s3:::MY_SHARED_BUCKET/myfolder/*" - all objects which are subkeys to myfolder in mybucket

Warunki

Dodatkowe warunki filtrowania dostępu do bucketu. Na przykład można przyznać dostęp do określonego adresu IP przy użyciu:

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

lub, alternatywnie, można zezwolić na dostęp do określonego adresu IP przy użyciu:

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

USTALANIE ZASAD DOTYCZĄCYCH BUCKETU

Polityka może być ustawiona na bucket przy użyciu:

s3cmd setpolicy POLICY_JSON_FILE s3://MY_SHARED_BUCKET command.

Aby sprawdzić zasady dotyczące bucketu, użyj następującego polecenia:

s3cmd info s3://MY_SHARED_BUCKET

Polityka może zostać usunięta z bucketu przy użyciu:

s3cmd delpolicy s3://MY_SHARED_BUCKET

Przykładowe scenariusze

1 Przyznanie dostępu do odczytu/zapisu użytkownikowi Bucket User przy użyciu jego PROJECT_ID.

Bucket Owner chce przyznać Bucket Userowi dostęp do odczytu/zapisu, używając jego PROJECT_ID:

{
  "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:::*"
      ]
    }
  ]
}

Załóżmy, że plik z tą polityką nosi nazwę „read-write-policy.json”. Aby ją zastosować, Bcuket Owner powinien wydać polecenie:

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

Następnie, aby uzyskać dostęp do bucketu, na przykład wylistować bucket, Bucket User powinien wydać polecenie:

s3cmd ls s3://MY_SHARED_BUCKET

2 – Ograniczenie dostępu do odczytu/zapisu do bucketu dla użytkowników korzystających z określonego zakresu adresów IP

Bucket Owner chce przyznać dostęp do odczytu/zapisu Bucket Userom, którzy uzyskują dostęp do bucketu z określonych zakresów adresów IP.

(W tym przypadku ustawiamy AWS na „*”, co teoretycznie zapewni dostęp do każdego projektu w NSIS, jednak zamierzamy filtrować dostęp tylko do jednego adresu IP).

{
  "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":  [
          "*"
        ]
      }
    }
  ]
}

Załóżmy, że plik z tą polityką nosi nazwę „read-write-policy-ip.json”. Aby ją zastosować, Bucket Owner powinien wydać polecenie:

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