# Amazon S3 API

Sposób użycia tego API jest różny w zależności od użytego sposobu uwierzytelniania oraz wspieranej wersji sygnatur. Podczas korzystania z autoryzacji poprzez Keystone v3 API wspiera sygnaturę AWSv4, natomiast w przypadku autoryzacji przez Swauth jest to sygnatura AWSv2.

# Keystone

Do połączenia z S3 API z wykorzystaniem autoryzacji Keystone v3 niezbędne jest posiadanie pary kluczy: klucza dostępowego (Access Key) oraz klucza sekretnego (Secret Key). Do ich wygenerowania konieczne jest skorzystanie z jednej ze standardowych metod połączenia. W przypadku braku kompatybilności może to być zrealizowane na innym urządzeniu. Parę kluczy można uzyskać na dwa sposoby w zależności od preferowanego narzędzia do połączenia z usługą OCS. Poniżej przedstawiamy dostępne możliwości.

# python-swiftclient

  1. Ustaw i wczytaj zmienne środowiskowe zgodnie z instrukcją.

  2. W terminalu wydaj polecenie: openstack ec2 credentials create

  3. W odpowiedzi otrzymasz klucze dostępowe:
    +------------+---------------------------------------------------------------
    +------------+---------------------------------------------------------------
    | Field | Value
    +------------+---------------------------------------------------------------
    | access | yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
    | links | {'self': 'https://ocs-pl.oktawave.com/v3/users/login/
    | | /credentials/OS-EC2/yyyyyyyyyyyyyyyyyyyyy'}
    | project_id | project_id
    | secret | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    | trust_id | None
    | user_id | login
    +------------+---------------------------------------------------------------
    Wartość access to AWS Access Key, a secret to AWS Secert Key.

Wszystkie wygenerowane klucze AWS możesz pobrać wydając polecenie:
openstack ec2 credentials list

# curl

  1. Uzyskaj token dostępowy do API zgodnie z instrukcją.

  2. Z wykorzystaniem otrzymanego tocken-a wydaj zapytanie:
    curl -i -XPOST https://ocs-pl.oktawave.com/auth/v3/users/tu_wpisz_swój_login/credentials/OS-EC2 \
    -H "Content-Type: application/json" \
    -H "X-Auth-Token: TOKEN" \
    -d '{"tenant_id": "project_id"}'\

  3. W rezultacie powinna ukazać się wiadomość HTTP 201 wraz z danymi:
    HTTP/2 201
    date: Thu, 31 Dec 2020 12:34:56 GMT
    vary: X-Auth-Token
    x-openstack-request-id: req-1699a977-9cef-4d73-92bb-1d58595af75c
    content-length: 342
    content-type: application/json
    \
    {"credential":
    {"user_id": "login",
    "links": {"self": "https://ocs-pl.oktawave.com/v3/users/login/
    credentials/OS-EC2/yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy 60"},
    "tenant_id": "project_id",
    "access": "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy",
    "secret": "xxxxxxxxxxxxxxxxxxxx", "trust_id": null}}%
    AWS Access Key znajduje się w polu access, a AWS secret Key w polu secret.

Wygenerowane klucze można uzyskać za pomocą zapytania GET:
curl -i -XGET https://ocs-pl.oktawave.com/auth/v3/users/LOG/credentials/OS-EC2 \`
-H "Content-Type: application/json" \
-H "X-Auth-Token: TOKEN"`

# Przykład użycia

Poniżej przestawiamy prosty kod wykorzystujący bibliotekę python-boto3 oraz wygenerowane klucze.

import boto3
import botocore
import urllib3
import json
import boto

session = boto3.session.Session()

s3_client = session.client(service_name='s3',
                           aws_access_key_id='nasz_access_key',
                           aws_secret_access_key='nasz_secret_key',
                           endpoint_url='https://ocs-pl.oktawave.com'
                          )

response_buckets = s3_client.list_objects(Bucket='test')
print(response_buckets)
response = s3_client.list_objects(Bucket='test')
print(response)

W odpowiedzi powinieneś otrzymać słowniki z listą bucketów oraz listą obiektów w naszym buckecie test.

# Swauth

W przypadku połączenia z wykorzystaniem autoryzacji poprzez Swauth nie ma potrzeby generowania dodatkowych kluczy. Do logowania posłuży login, hasło oraz nazwa konta - dane te znajdziesz w Panelu.

Przedstawiamy analogiczny do poprzedniego kod wykorzystujący ten sposób autoryzacji:

import boto3
import botocore

session = boto3.session.Session()

s3_client = session.client(service_name='s3',
                           aws_access_key_id='NazwaKonta:Login
                           aws_secret_access_key='Haslo',
                           endpoint_url='https://ocs-pl.oktawave.com',
                           config=botocore.client.Config(signature_version='s3')
                          )

response_buckets = s3_client.list_objects(Bucket='test')
print(response_buckets)
response = s3_client.list_objects(Bucket='test')
print(response)

# Więcej informacji