# Tárolás: Amazon S3

> A digitális termékek fájljainak tárolása az Amazon S3-ban: AWS-kulcsok beszerzése, hitelesítés, tároló (bucket) kiválasztása, biztonsági beállítások és fájlkezelés.

Az Amazon S3 (Simple Storage Service) az AWS felhős objektumtároló szolgáltatása. Ha összekötöd a FluentCarttal, a digitális termékek fájljai lekerülnek a saját kiszolgálódról egy külön, nagyon tartós és globálisan elérhető tárolórétegbe. A webhelyed gyors marad, a letölthető fájlok biztonságban vannak, a tárhely pedig gyakorlatilag korlátlanul nő.

A fejezet a teljes beállítást leírja: az AWS-kulcsok beszerzésétől a tároló kiválasztásán vagy létrehozásán át a biztonsági beállításokig.

## AWS-hozzáférési kulcsok beszerzése

A FluentCart tárolóoldala előtt hozz létre egy S3-hozzáférésikulcs-párt az AWS-ben. Az alábbi menet egy külön, csak a FluentCarthoz tartozó IAM-felhasználót hoz létre, így a kulcsait bármikor cserélheted vagy visszavonhatod anélkül, hogy az AWS-fiók többi része érintett lenne.

Ha már van hozzáférési kulcsod, ugorj a [Az S3 beállításainak megnyitása](#az-s3-beállításainak-megnyitása) részre.

### 1. Az IAM megnyitása, új felhasználó indítása

1. Jelentkezz be az AWS Management Console-ba.
2. A felső keresősávba írd be: **IAM**, és nyisd meg a szolgáltatást.
3. Az IAM oldalsávjában nyisd ki az **Access Management** részt, és kattints a **Users** pontra.
4. Kattints a jobb felső sarokban a **Create user** gombra.

Az IAM globális szolgáltatás, a felhasználó létrehozásához nem kell régiót választanod.

### 2. A felhasználó adatai

Adj a felhasználónak felismerhető nevet, például `fluentcart-s3`. A **Provide user access to the AWS Management Console** jelölőnégyzetet hagyd üresen: a FluentCartnak csak programozott (API-) hozzáférés kell, konzolbelépés nem. Kattints a **Next** gombra.

Egy csak API-hozzáférésű felhasználó csökkenti a támadási felületet: ha a kulcs kiszivárog, vele senki nem tud belépni az AWS-konzolra.

### 3. Az S3-szabályzat csatolása

A **Set permissions** képernyőn:

1. Válaszd az **Attach policies directly** lehetőséget.
2. A **Permissions policies** keresőmezőjébe írd: `s3full`.
3. Pipáld ki az **AmazonS3FullAccess** sort.
4. Kattints a **Next** gombra.

Szigorúbb megoldásként az `AmazonS3FullAccess` helyett saját szabályzatot is készíthetsz, amely egyetlen tároló ARN-jére szűkít, és csak azokat a műveleteket engedi, amelyeket a FluentCart használ: `s3:ListAllMyBuckets`, `s3:ListBucket`, `s3:CreateBucket`, `s3:PutObject`, `s3:GetObject`, `s3:DeleteObject`, `s3:PutBucketPublicAccessBlock`, `s3:PutBucketOwnershipControls`. A kezelt szabályzat egyszerűbb, a leírás ezzel számol.

### 4. Áttekintés és létrehozás

Ellenőrizd a felhasználó nevét és a csatolt szabályzatot. A címkék (Tags) nem kötelezők, kihagyhatod őket. Kattints a **Create user** gombra.

### 5. A felhasználó biztonsági hitelesítő adatai

A **Users** listában kattints az imént létrehozott felhasználóra (`fluentcart-s3`). A részletek oldalon nyisd meg a **Security credentials** fület, görgess az **Access keys** részhez, és kattints a **Create access key** gombra.

### 6. A kulcs felhasználási esetének kiválasztása

Az AWS megkérdezi, mire használod a kulcsot. Válaszd a **Third-party service** lehetőséget (a FluentCart külső alkalmazás, amely a nevedben hívja az S3 API-t). Az AWS ajánlást jelenít meg: pipáld ki az **I understand the above recommendation and want to proceed to create an access key** négyzetet, majd kattints a **Next** gombra.

A leíráscímkét üresen hagyhatod, vagy írhatsz bele valamit, például `fluentcart-production`, ha több környezetben kezelsz kulcsokat. Kattints a **Create access key** gombra.

### 7. Az Access key és a Secret access key másolása

Az AWS mindkét értéket megmutatja:

- **Access key**: a nyilvános azonosító.
- **Secret access key**: a titkos fele. A **Show** gombbal jelenítheted meg.

A titkos kulcsot csak egyszer látod. Az AWS ezt az értéket csak most mutatja meg olvasható formában. Vagy másold ki azonnal mindkét értéket a FluentCartba, vagy mentsd el biztonságos helyre a **Download .csv file** gombbal. Ha elveszted a titkos kulcsot, nem állítható vissza: törölnöd kell a hozzáférési kulcsot, és újat kell létrehoznod.

Ha megvan mindkét érték, kattints a **Done** gombra.

### Összefoglaló: mi hová kerül

| FluentCart mező | AWS érték | Melyik lépésből |
|---|---|---|
| **Access Key** | Access key | 7. lépés |
| **Secret Key** | Secret access key | 7. lépés |
| IAM-felhasználó neve | például `fluentcart-s3` | 2. lépés |
| Csatolt szabályzat | `AmazonS3FullAccess` | 3. lépés |

## Az S3 beállításainak megnyitása

1. Nyisd meg a **FluentCart Pro → Beállítások → Tárolási beállítások** oldalt.
2. Az **S3** sornál kattints a **Kezelés** gombra.

Megnyílik az Amazon S3 beállítóvarázslója, amely három lépésből áll:

1. **Credential**: hogyan azonosítja magát a FluentCart az AWS-nél.
2. **Bucket**: melyik S3-tároló tartalmazza a fájlokat.
3. **Security**: a tároló szintjén beállítható védelem a véletlen nyilvános hozzáférés ellen.

## 1. lépés: Credential

A FluentCart kétféleképpen fogadja az AWS-hozzáférési kulcsokat. A lépés felirata **Verify Access Keys**, a képernyő sarkában pedig a haladás látszik (**1/3 Befejezve**).

### A. mód: kulcsok a `wp-config.php` fájlban (ajánlott)

Ez a legbiztonságosabb: a kulcsok a WordPress konfigurációs fájljában vannak, az adatbázisban soha, és az admin felületről nem olvashatók. Válaszd a **Define access keys in wp-config.php (Recommended)** opciót. A felület megmutatja a kódrészletet és a **Copy Snippet** gombot.

![Az S3 hitelesítő lépése a wp-config.php opcióval: a két define sor és a Copy Snippet gomb](./kepek/tarhely-s3-credential-wpconfig.webp)

*Az S3 hitelesítő lépése a wp-config.php opcióval: a két define sor és a Copy Snippet gomb* (https://minta-bolt.hu/wp-admin/admin.php?page=fluent-cart)

Másold a kódot a `wp-config.php` elejére, a „That's all, stop editing!” sor elé, és írd át a helyőrzőket a saját AWS-kulcsaidra:

```php
define( 'FCT_S3_ACCESS_KEY', 'az-access-key-id-d' );
define( 'FCT_S3_SECRET_KEY', 'a-secret-access-key-ed' );
```

Amint a FluentCart észleli ezeket az állandókat, a hitelesítő mezők automatikusan zárolódnak, és a **Connection Method** kártya jelzi, hogy a kulcsok a `wp-config.php` fájlból jöttek.

Ha később másik módra váltasz, töröld vagy kommentezd ki a `FCT_S3_ACCESS_KEY` és `FCT_S3_SECRET_KEY` sort a `wp-config.php` fájlból, és töltsd újra az oldalt.

### B. mód: kulcsok az adatbázisban

Akkor jó, ha csak a felületen szeretnél beállítani. A kulcsok az adatbázisba kerülnek, ami eleve kevésbé biztonságos, mint egy fájlban lévő állandó, ezért a folytatás előtt a bővítmény elfogadást kér.

![Az S3 hitelesítő lépése az adatbázisban tároló móddal: az Access Key és a Secret Key mező](./kepek/tarhely-s3-credential-adatbazis.webp)

*Az S3 hitelesítő lépése az adatbázisban tároló móddal: az Access Key és a Secret Key mező* (https://minta-bolt.hu/wp-admin/admin.php?page=fluent-cart)

1. Válaszd a **Store credentials in the database** opciót, és fogadd el a kockázatot („I understand the risks but I'd like to store access keys in the database.”).
2. Írd be az **Access Key** mezőbe az AWS Access Key ID értékét.
3. Írd be a **Secret Key** mezőbe az AWS Secret Access Key értékét.
4. Kattints a **Save & Continue** gombra, és folytasd a tároló lépéssel.

Ha még nincs hozzáférési kulcsod, térj vissza az [AWS-hozzáférési kulcsok beszerzése](#aws-hozzáférési-kulcsok-beszerzése) részhez.

## 2. lépés: Bucket

Az S3-tároló (bucket) egy elnevezett tárolóegység az AWS-fiókodban. Háromféleképpen választhatsz vagy hozhatsz létre egyet.

**Meglévő tároló, név kézi megadásával:**

1. Válaszd a **Use Existing Bucket** opciót.
2. Válaszd az **Enter bucket name** lehetőséget.
3. Írd be a tároló pontos nevét, és kattints a **Save Selected Bucket** gombra.

**Meglévő tároló, böngészés az AWS-ből:** a FluentCart lekéri a csatlakoztatott AWS-fiók tárolóit, így legördülő listából választhatsz, másolgatás és elgépelés nélkül.

1. Válaszd a **Use Existing Bucket** opciót.
2. Válaszd a **Browse existing buckets** lehetőséget.
3. Ha a frissen létrehozott tároló nem látszik, kattints a frissítés ikonra.
4. Kattints a kívánt tárolóra, majd a **Save Selected Bucket** gombra.

**Új tároló létrehozása a felületről:** nem kell átlépned az AWS-konzolra, a FluentCart a kiválasztott régióban létrehoz egy új S3-tárolót.

1. Válaszd a **Create New Bucket** opciót.
2. Add meg a **Bucket Name** értékét. A tárolónevek az egész AWS-ben egyediek, DNS-stílusúak (kisbetű, szám, kötőjel), és törlés után egy ideig nem használhatók újra.
3. Válassz **Region** értéket: azt, amelyik földrajzilag a vevőid többségéhez a legközelebb van (például **US East (N. Virginia)** az amerikai kontinensre, **EU (Frankfurt)** Európára).
4. Kattints a **Create New Bucket** gombra. A FluentCart létrehozza a tárolót az AWS-ben, és automatikusan ki is választja.

A tároló régiója létrehozás után nem módosítható. Ha később mást szeretnél, hozz létre új tárolót az új régióban, és költöztesd át a fájlokat.

## 3. lépés: Security

Ez a lépés két, a tároló szintjén érvényes védelmet állít be az AWS-nél.

### Block All Public Access

Az AWS S3 Block Public Access beállítását vezérli az adott tárolóra. Bekapcsolva az AWS minden olyan tárolószabályzatot vagy ACL-t elutasít, amely nyilvánosan elérhetővé tenne objektumokat, akkor is, ha valami lejjebb rosszul van beállítva.

- **Bekapcsolva (ajánlott):** a digitális termékek fájljai privátak maradnak, és csak a FluentCart aláírt hivatkozásain át szolgálódnak ki.
- **Kikapcsolva:** csak akkor kell, ha kifejezetten nyilvánosan elérhető objektumokra van szükséged, ami fizetős digitális termékeknél szokatlan.

### Object Ownership

Azt szabályozza, ki a tulajdonosa a tárolóba feltöltött objektumoknak.

- **Enforced (ajánlott):** a tároló tulajdonosa (a te AWS-fiókod) minden objektum felett teljes ellenőrzést megtart, akárki töltötte is fel. Az ACL-ek gyakorlatilag ki vannak kapcsolva.
- **Not enforced:** a feltöltő ACL-ekkel megtarthatja a tulajdonjogot, ami bonyolítja a jogosultságkezelést.

Mindkettő kapcsolóként jelenik meg, az ajánlott állapotot felirat jelzi. A befejezéshez kattints a **Save Settings** gombra.

## Csatlakoztatott állapot

Ha mindhárom lépés kész, az Amazon S3 kártya **Aktív** állapotban mutatja a szolgáltatót, a tároló nevével, a régióval és a biztonsági összegzéssel. A kártya elemei:

- **Aktív** kapcsoló: a szolgáltatót a beállítások elvesztése nélkül kapcsolhatod be és ki.
- **Edit**: újra megnyitja a varázslót, ahol módosíthatod a hitelesítő adatokat, a tárolót vagy a biztonsági beállításokat.
- A tároló nevére kattintva az AWS-konzolban nyílik meg a tároló.
- A régió felirata: az AWS-régió, ahol a tárolód van.
- **Check again**: igény szerint újra lefuttatja a FluentCart kapcsolatellenőrzését az S3 felé.
- A **Security Configuration** kártyák: a **Block All Public Access** és az **Object Ownership** állapotát mutatják.

## Fájlkezelés

Csatlakozás után a digitális termékek feltöltései automatikusan az S3-tárolóba mennek. A FluentCart fájlböngészőjében:

- új fájlokat tölthetsz fel közvetlenül az S3-ba,
- böngészheted és listázhatod a tárolóban lévő fájlokat,
- fájlnév alapján kereshetsz,
- törölheted a már nem szükséges fájlokat,
- minden fájl mellett jelvény mutatja, hogy az S3-on, az R2-n vagy a helyi tárhelyen van.

## Meglévő S3-kapcsolat módosítása

Ha kulcsot cserélnél, másik tárolóra mutatnál, vagy szigorítanál a biztonsági beállításokon:

1. A **FluentCart Pro → Beállítások → Tárolási beállítások** oldalon, az **S3** kártyán kattints az **Edit** gombra.
2. Menj végig újra a **Credential → Bucket → Security** varázslón.
3. Csak a módosuló mezőket kell frissítened.

Nem kell leválasztanod és újra csatlakoztatnod: a meglévő fájlok hivatkozása érvényes marad.

## Az S3-illesztő be- és kikapcsolása

Az Amazon S3 kártya **Aktív** kapcsolójával kapcsolhatod a szolgáltatót be és ki. Az S3 kikapcsolása nem töröl semmit az AWS-ből, csak azt állítja le, hogy a FluentCart új feltöltéseket irányítson rajta át.

## Teljes `wp-config.php` példa

Ha az A. módot használod, itt egy beilleszthető minta:

```php
// A wp-config.php elejére, a "That's all, stop editing!" sor fölé.
define( 'FCT_S3_ACCESS_KEY', 'AKIAEXAMPLEKEYID1234' );
define( 'FCT_S3_SECRET_KEY', 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY' );
```

Mentés után töltsd újra az Amazon S3 oldalt a FluentCartban: a hitelesítő mezők zároltak lesznek, és a konfigurációból töltődnek ki.

## Hibaelhárítás

- **A kapcsolatellenőrzés mentés után hibával elbukik:**
  - Ellenőrizd, hogy mindkét kulcs szóköz nélkül került be az elején és a végén.
  - Győződj meg róla, hogy az IAM-felhasználónak megvan az `AmazonS3FullAccess` szabályzata (vagy egy egyenértékű, amely engedi az `s3:ListAllMyBuckets`, `s3:CreateBucket`, `s3:PutObject`, `s3:GetObject`, `s3:DeleteObject` műveleteket).
  - Ha nemrég cseréltél kulcsot, a régit kapcsold ki, és a jelenlegit használd.
- **A „Browse existing buckets” üres:** az IAM-felhasználónak nincs `s3:ListAllMyBuckets` joga, vagy a fiókban még tényleg nincs tároló (válaszd a **Create New Bucket** lehetőséget).
- **A tároló létrehozása névütközéssel elbukik:** a tárolónevek az összes AWS-fiókban egyediek. Válassz specifikusabb nevet, például `aruhazneve-fluentcart-fajlok`.
- **A fájlok feltöltődnek, de a vevők nem tudják letölteni őket:** valószínűleg be van kapcsolva a **Block All Public Access** (ez jó), és a FluentCart ilyenkor aláírt URL-eken szolgálja ki a fájlokat. Ellenőrizd, hogy a digitális termék tárolóillesztőként az S3-at használja.
- **Megadtam a `FCT_S3_ACCESS_KEY` és `FCT_S3_SECRET_KEY` állandót, de a mezők üresek:** mindkét állandónak a `wp-config.php` fájlban kell lennie (nem bővítményfájlban), a FluentCart betöltése előtt, és a nevüknek pontosan egyeznie kell.

## Gyakori kérdések

**Futhat egyszerre az S3 és a Cloudflare R2?** Igen, mindkettőt beállíthatod, és kapcsolhatod, melyik az aktív.

**Látszik a titkos kulcs az admin felületen mentés után?** Nem. Az A. módban a kulcsok csak a `wp-config.php` fájlban vannak, a B. módban mentés után a titkos kulcs maszkolva látszik.

**Módosíthatom később a régiót?** Nem, a tároló régiója a létrehozáskor rögzül. Másik régióhoz hozz létre új tárolót ott, és vagy töltsd fel újra a fájlokat, vagy használd az S3 régiók közötti replikációját az áttelepítéshez.

**Támogatja a FluentCart a szerveroldali titkosítást?** Az AWS S3 alapértelmezett titkosítása (SSE-S3) a tároló szintjén érvényes. Kapcsold be az AWS oldalán, és a FluentCart feltöltései automatikusan titkosítva kerülnek be.

**Kötelező az `AmazonS3FullAccess` szabályzat?** Nem, de ez a legegyszerűbb, és a leírás ezzel számol. Szigorúbb környezetben saját szabályzatot is írhatsz, amelyet a konkrét tároló ARN-jére és csak a FluentCart által használt műveletekre szűkítesz.
