# 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
Ustaw i wczytaj zmienne środowiskowe zgodnie z instrukcją.
W terminalu wydaj polecenie:
openstack ec2 credentials create
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
Uzyskaj token dostępowy do API zgodnie z instrukcją.
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"}'
\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)