S3ko URL aurrez sinatu bat bucket pribatu bateko objektu baterako aldi baterako esteka bat da. Bere kontsulta-katean sinadura bat darama; beraz, esteka duenak objektu hori deskargatu (edo igo) dezake AWS kredentzialik gabe esteka iraungi arte, eta bucketa ez da inoiz publiko bihurtzen. Zure gakoekin sortzen duzu, zure kodean edo AWS CLItik, eta segundo 1etik 7 egunera arte iraun dezake. Gida honek azaltzen du nola dabilen, zer esan nahi duen X-Amz-* parametro bakoitzak, zenbat iraun dezakeen, deskargetarako eta igoeretarako kodea eta aurkitzeko aukera handiena duzun erroreak. Mugak AWSren eta Cloudflareren dokumentaziotik hartuta daude, 2026ko urrian.
S3ko URL aurrez sinatuak begirada batean
| Galdera | Erantzuna |
|---|---|
| Zer ematen du? | Eragiketa bat (GET, PUT, HEAD, DELETE…) objektu batean |
| Gehieneko iraungitzea | 7 egun (604.800 segundo) SigV4 eta IAM erabiltzaileen gakoekin |
| Iraungitzea aldi baterako gakoekin | Rol-saioa edo STS kredentzialak amaitzen direnean amaitzen da, lehenago gertatzen dena |
| S3 kontsolako tartea | Minutu 1etik 12 ordura |
| Iraungitze lehenetsia | 3.600 s AWS CLIn eta boto3n, 900 s JavaScript v3 presignerrean |
| Hainbat aldiz erabil daiteke? | Bai, edonork nahi adina aldiz, iraungi arte |
| URL bakar bat baliogabetu daiteke? | Ez, sinatzeko kredentzialak baliogabetuz edo politika batean ukatuz bakarrik |
| Bat sortzeak S3ri deitzen dio? | Ez, sinadura lokalean kalkulatzen da |
Nola dabilen URL aurrez sinatu bat
- Zure kodeak (edo CLIak) bucketa, objektuaren gakoa, HTTP metodoa eta iraungitze-denbora hartzen ditu.
- SDKak balio horiek zure secret access key-arekin sinatzen ditu AWS Signature Version 4 erabiliz. Une honetan ez zaio ezer bidaltzen S3ri.
- Sortutako URLa norbaiti ematen diozu: nabigatzaile bati, lankide bati, mugikorreko aplikazio bati.
- Erabiltzen dutenean, S3k sinadura berriro kalkulatzen du URLko access key-ari dagokion secret-arekin. Bat badator, URLa iraungi ez bada eta sinatzaileak eragiketa hori egiteko baimena badu, eskaera aurrera doa.
URLak sinatu zuenaren baimenak darama. AWS argia da honetan: URLa sortu zuen IAM erabiltzaileak edo rolak ezin badu objektua irakurri, URLak 403 itzultzen du, sinadura baliozkoa izan arren.
Zer esan nahi duten X-Amz parametroek
SigV4 URL aurrez sinatu batek itxura hau du (lerro-jauziak gehituta):
https://my-bucket.s3.eu-west-1.amazonaws.com/reports/q3.pdf
?X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20261017%2Feu-west-1%2Fs3%2Faws4_request
&X-Amz-Date=20261017T093000Z
&X-Amz-Expires=3600
&X-Amz-SignedHeaders=host
&X-Amz-Signature=5f2c...e91a
| Parametroa | Esanahia |
|---|---|
X-Amz-Algorithm | Sinatzeko algoritmoa: AWS4-HMAC-SHA256 SigV4rako |
X-Amz-Credential | Access key ID-a gehi esparrua: <key-id>/<YYYYMMDD>/<region>/s3/aws4_request |
X-Amz-Date | URLa noiz sinatu zen, UTCn, yyyyMMddTHHmmssZ |
X-Amz-Expires | Zenbat segundoz den baliozkoa URLa X-Amz-Date ondoren, 1etik 604800ra |
X-Amz-SignedHeaders | Sinadurak hartzen dituen goiburuak, beti gutxienez host |
X-Amz-Signature | Sinadura, 64 karaktere hamaseitar |
X-Amz-Security-Token | URLa aldi baterako kredentzialekin sinatu denean bakarrik (STS, rolak, EC2, ECS, SSO) |
Aldatu sinatutako edozein zati (gakoa, metodoa, iraungitzea edo sinatutako goiburu bat) eta sinadura ez dator bat jada. Kontuan izan, gainera, URLak testu argian zer erakusten duen: bucketaren izena, objektuaren gako osoa eta zure access key ID-a. Gako sekretua ez dago inoiz URLan.
Zenbat irauten duen URL aurrez sinatu batek
Muga sinatzen duten kredentzialen araberakoa da:
| Zerekin sinatuta | Gehieneko baliozkotasuna |
|---|---|
| IAM erabiltzaileen sarbide-gakoak (SigV4) | 7 egun, SigV4 sinatze-gakoa bera 7 egunez delako baliozkoa |
| IAM rol-saioa (STS AssumeRole) | Saioa amaitu arte, ordubete berez |
| EC2 instantzia-profila | Rolaren kredentzialak txandakatu arte, gehienez 6 ordu inguru |
| ECS zeregin-rola | Zereginaren kredentzialak txandakatu arte, normalean 1etik 6 ordura behin |
| Baliogabetutako edo ezabatutako edozein kredentzial | Berehala gelditzen da, X-Amz-Expires gorabehera |
| S3 kontsola | Minutu 1 eta 12 ordu artean aukeratzen duzu |
Horrek azaltzen du ezustekorik ohikoena: Lambda funtzio batetik edo EC2 instantzia batetik 7 egun eskatzen dituzu eta esteka ordubete edo ordu gutxi batzuen ondoren hiltzen da. URLak atzean dituen kredentzialek adina bakarrik irauten du. Esteka luzeak behar badituzu, sinatu bucket horretarako irakurketa-sarbidea soilik duen IAM erabiltzaile berezitu batekin.
S3k iraungitzea egiaztatzen du eskaera bat hasten denean. Epea baino segundo bat lehenago hasten den deskarga handi bat normal amaitzen da, baina epearen ondorengo berriro saiakera batek huts egiten du AccessDenied errorearekin eta “Request has expired” mezuarekin. 604.800 segundo baino gehiago eskatzea zuzenean baztertzen da.
Nola sortu URL aurrez sinatu bat
AWS CLI
aws s3 presign s3://my-bucket/reports/q3.pdf --expires-in 3600
Komandoak deskarga-URL bat (GET) sinatzen du. Lehenetsia 3.600 segundo da eta gehienekoa 604.800. CLIaren azken bertsioek beti SigV4 erabiltzen dute; beraz, ziurtatu eskualde bat konfiguratuta dagoela. Igoera-URLetarako SDK bat behar duzu.
Python (boto3)
import boto3
from botocore.config import Config
s3 = boto3.client('s3', region_name='eu-west-1', config=Config(signature_version='s3v4'))
url = s3.generate_presigned_url(
ClientMethod='get_object',
Params={
'Bucket': 'my-bucket',
'Key': 'reports/q3.pdf',
'ResponseContentDisposition': 'attachment; filename="q3.pdf"',
},
ExpiresIn=3600,
)
Ezarri signature_version='s3v4' esplizituki. Boto3 erreferentziak ohartarazten du, atzerako bateragarritasunagatik, bestela Signature Version 2 zaharrarekin sina dezakeela oraindik onartzen duten eskualdeetan, eta horrek isilean kentzen ditu parametro eta goiburu batzuk, Range adibidez. ResponseContentDisposition aukerakoa da: nabigatzaileak fitxategia izen garbi batekin gorde dezan egiten du, lerroan ireki beharrean.
JavaScript (AWS SDK v3)
import { S3Client, GetObjectCommand } from '@aws-sdk/client-s3'
import { getSignedUrl } from '@aws-sdk/s3-request-presigner'
const client = new S3Client({ region: 'eu-west-1' })
const url = await getSignedUrl(
client,
new GetObjectCommand({ Bucket: 'my-bucket', Key: 'reports/q3.pdf' }),
{ expiresIn: 3600 }
)
expiresIn kanpoan uzten baduzu, JavaScript presignerrak 900 segundo (15 minutu) erabiltzen ditu.
Aurrez sinatutako igoera-URLak (PUT)
Ideia berak beste norabidean funtzionatzen du. PutObject bat sinatzen duzu gako baterako, eta URLa duenak objektu hori idatz dezake. Fitxategia zuzenean doa haren gailutik bucketera, eta zure zerbitzariak ez ditu inoiz byteak kudeatzen. Gako hori duen objektu bat badago jada, ordezkatu egiten da.
import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3'
import { getSignedUrl } from '@aws-sdk/s3-request-presigner'
const client = new S3Client({ region: 'eu-west-1' })
const url = await getSignedUrl(
client,
new PutObjectCommand({
Bucket: 'my-bucket',
Key: 'incoming/brief.pdf',
ContentType: 'application/pdf',
}),
{ expiresIn: 900, signableHeaders: new Set(['content-type']) }
)
await fetch(url, {
method: 'PUT',
headers: { 'Content-Type': 'application/pdf' },
body: file,
})
content-type signableHeaders aukerari gehitzeak URLa mota horri lotzen dio; beraz, beste Content-Type batekin egindako igoera bat baztertu egiten da. Boto3n baliokidea generate_presigned_url('put_object', Params={'Bucket': ..., 'Key': ..., 'ContentType': 'application/pdf'}) da, eta bezeroak goiburu bera bidali behar du.
Nabigatzailetik igo aurretik egiaztatu beharreko hiru gauza:
- CORS. Bucketak zure jatorria eta
PUTmetodoa baimentzen dituen CORS arau bat behar du. Multipart igoeretarakoETaggoiburua ere erakutsi behar du, nabigatzaileak zati bakoitzetik irakurri behar duelako. - Gako finkoa. Sortu gako bakar bat zerbitzarian (adibidez UUID aurrizki batekin), bisitari batek beste norbaiten fitxategia gainidatzi ez dezan.
- Kontrol-baturak. AWSren egungo SDKek CRC kontrol-batura bat gehitzen diete igoerei berez. Aurrez sinatutako igoerek huts egiten badute S3rekin bateragarria den hornitzaile baten aurka sinadura- edo kontrol-batura-erroreekin, ezarri
requestChecksumCalculation: 'WHEN_REQUIRED'bezeroan.
Aurrez sinatutako POST mekanismo bereizi bat da HTML inprimaki arruntetarako, tamaina eta eduki mota mugatu ditzakeen politika batekin. S3rekin bateragarriak diren hornitzaile guztiek ez dute onartzen (R2k ez), eta horregatik aurrez sinatutako PUT da aukera eramangarriagoa.
Fitxategi handiak: aurrez sinatutako multipart igoerak
S3rako PUT bakar bat 5 GBra mugatuta dago, eta AWSk multipart iradokitzen du 100 MB ingurutik aurrera. Multipartek fitxategia 10.000 zatitan banatzen du gehienez, bakoitza 5 MiBetik 5 GiBera azkena izan ezik, eta zatiak modu independentean igotzen dira, paraleloan eta zati bakoitzeko berriro saiakerekin. Aurrez sinatzea zatika egiten da: zerbitzariak igoera hasten du, UploadPart URL bat sinatzen du zati bakoitzeko, nabigatzaileak zati bakoitza bidaltzen du eta haren ETag itzultzen du, eta zerbitzariak igoera osatzen du.
import {
CreateMultipartUploadCommand,
UploadPartCommand,
CompleteMultipartUploadCommand,
} from '@aws-sdk/client-s3'
const { UploadId } = await client.send(
new CreateMultipartUploadCommand({ Bucket: 'my-bucket', Key: 'video/raw.mov' })
)
const partUrl = await getSignedUrl(
client,
new UploadPartCommand({ Bucket: 'my-bucket', Key: 'video/raw.mov', UploadId, PartNumber: 1 }),
{ expiresIn: 3600 }
)
await client.send(
new CompleteMultipartUploadCommand({
Bucket: 'my-bucket',
Key: 'video/raw.mov',
UploadId,
MultipartUpload: { Parts: [{ PartNumber: 1, ETag: etagFromPartResponse }] },
})
)
Gehitu osatu gabeko multipart igoerak egun gutxiren buruan bertan behera uzten dituen bizi-zikloko arau bat; bestela, utzitako zatiek biltegiratze fakturagarria hartzen jarraituko dute.
URL aurrez sinatuak R2, B2, Spaces eta Wasabin
S3 APIa SigV4rekin inplementatzen duten hornitzaileek kode bera onartzen dute: endpoint-a, eskualdea eta gakoak bakarrik aldatzen dituzu. Xehetasunak desberdinak dira; beraz, begiratu hornitzailearen dokumentazioa:
- Cloudflare R2k aurrez sinatutako
GET,HEAD,PUTetaDELETEonartzen ditu, segundo 1etik 7 egunera arteko iraungitzearekin. Ez du aurrez sinatutakoPOSTonartzen, eta URL aurrez sinatuek S3 APIaren domeinuan bakarrik funtzionatzen dute (<ACCOUNT_ID>.r2.cloudflarestorage.com), ez domeinu pertsonalizatuetan. Erabiliregion: 'auto'. - Backblaze B2k dio S3rekin bateragarria den bere APIak AWS CLIarekin edo SDKekin sortutako URL aurrez sinatuak onartzen dituela.
- DigitalOcean Spacesek eta Wasabik SDK dei berberekin funtzionatzen dute, haien endpoint-etara bideratuta.
Hornitzaile bakoitzaren prezioetarako, ikusi S3, R2, Spaces, Wasabi eta B2ren konparazioa.
URL aurrez sinatuen errore ohikoak eta nola konpondu
| Errorea | Ohiko kausa | Konponbidea |
|---|---|---|
SignatureDoesNotMatch | Metodoa, goiburuak edo kontsulta sinatutakoaz bestelakoak dira; erlojua sinkronizatu gabe | Bidali Content-Type eta goiburu berberak; sinkronizatu erlojua NTPrekin |
AccessDenied “Request has expired” | URLak X-Amz-Date + X-Amz-Expires gainditu du | Sortu URL berri bat; laburtu sinatzearen eta erabiltzearen arteko tartea |
| URLa eskatutakoa baino lehenago iraungitzen da | Aldi baterako kredentzialekin sinatuta (rola, EC2, ECS, Lambda) | Sinatu estekak iraun behar duen adina bizi diren kredentzialekin |
ExpiredToken | X-Amz-Security-Token atzeko STS saioa amaitu da | Freskatu kredentzialak sinatu aurretik |
403 AccessDenied URL berri batean | Sinatzaileak ez du s3:GetObject edo s3:PutObject, edo politika batek ukatzen du | Eman baimena sinatzen duen identitateari; berrikusi bucket-politikak |
AuthorizationQueryParametersError | 604.800 segundotik gorako iraungitzea edo gaizki osatutako kredentzial-esparrua | Mantendu X-Amz-Expires 7 egunean edo gutxiagoan; sinatu bucketaren eskualdean |
| Nabigatzailea CORSek blokeatuta | Bucketak ez du CORS araurik zure jatorrirako eta metodorako | Gehitu CORS arau bat zure jatorriarekin, GET/PUT metodoekin eta ETag erakutsita |
AccessDenied HeadersNotSigned errorearekin | Range sinatu zen, baina If-Range sinatu gabe bidali zen | Gehitu If-Range sinatutako goiburuei |
Goiburuak edo kontsulta-kateak berridazten dituzten enpresa-proxyek ere sinadurak hausten dituzte. URL batek sare batetik funtzionatzen badu eta beste batetik ez, probatu proxyrik gabe.
Segurtasun-jardunbide egokiak
AWSk bearer token deitzen die URL aurrez sinatuei eta babesteko gomendatzen du. Praktikan:
- Mantendu laburrak. Minutuak igoeretarako eta fitxategi sentikorretarako, orduak deskarga arruntetarako. Sortu berri bat norbaitek fitxategia berriro behar duenean.
- Sinatu identitate mugatu batekin. Aurrizki jakin bat irakurri (edo idatzi) bakarrik dezakeen IAM erabiltzaile edo rol berezitu batek mugatu egiten du kaltea esteka bat filtratzen bada.
- Gehitu babesak bucket-politikan.
s3:signatureAgebaldintzak adin jakin bat baino zaharragoak diren sinadurak baztertzen ditu, etaaws:SourceIpbaldintzak zer sarek erabil ditzaketen mugatzen du. - Ez erregistratu. Aplikazioen erregistroetan, analitiketan edo txat-historian dauden URL aurrez sinatu osoak kredentzial erabilgarriak dira iraungi arte.
- Aurreikusi falta zaiena. Ez dute pasahitzik, deskarga-kontagailurik ez esteka bakoitzeko baliogabetzerik; beraz, jarri aplikazio bat aurrean horiek behar dituzunean.
Partekatzearen aldea sakonago aztertzeko, kontrol horiek gehitzen dituzten aukerekin, ikusi nola partekatu S3 fitxategiak bucketa publiko egin gabe.
Nola erabiltzen dituen Nubbok URL aurrez sinatuak
Nubbo eredu honen gainean eraikita dago. Arakatzailean igotzen duzunean, zerbitzariak PUT bat sinatzen du (edo, 100 MBtik aurrera, hiru zati paraleloan dituen multipart igoera bat) eta zure nabigatzaileak byteak zuzenean bidaltzen ditu zure bucketera. Fitxategi bakarreko deskargek ordubetez baliozkoak diren aurrez sinatutako GET URLak erabiltzen dituzte. Zure sarbide-gakoak AES-256-GCM bidez enkriptatuta gordetzen dira, eta zerbitzarian sinatzeko bakarrik erabiltzen dira.
Partekatzeko estekek URL aurrez sinatu hutsei falta zaiena gehitzen dute: aukerako pasahitz, iraungitze-data eta deskarga-muga bat, Nubbok iraupen laburreko URL bat eman aurretik egiaztatzen dituenak, eta esteka bat edozein unetan desaktiba dezakezu. Fitxategi anitzeko ZIP deskargak zure nabigatzailean muntatzen dira, fitxategi bakoitza zuzenean zure bucketetik deskargatuz: Nubbok ez du inoiz edukia ikusten. Salbuespen zintzo bakarra: miniaturak zure bucketean bertan idazten dira .nubbo-thumbs/ karpetan. Berdin funtzionatzen du Amazon S3, Cloudflare R2, DigitalOcean Spaces, Wasabi, Backblaze B2 eta S3rekin bateragarriak diren endpoint publikoetan.
Ohiko galderak
Zer da S3ko URL aurrez sinatu bat?
Bucket pribatu bateko objektu baterako HTTPS esteka arrunt bat da, kontsulta-katean sinadura bat gehituta. Esteka duenak sinatu zen eragiketa bakarra egin dezake, normalean deskarga bat (GET) edo igoera bat (PUT), iraungi arte. Bucketa pribatu geratzen da, eta esteka erabiltzen duen pertsonak ez du AWS kredentzialik behar.
Zein da S3ko URL aurrez sinatu baten gehieneko iraupena?
Zazpi egun (604.800 segundo) Signature Version 4 eta IAM erabiltzaileen epe luzeko gakoekin sinatzen duzunean. Aldi baterako kredentzialekin sinatutako URL batek, hartutako rol batekin edo EC2 instantzia-profil batekin adibidez, funtzionatzeari uzten dio kredentzial horiek iraungitzen direnean, gehiago eskatu arren. S3 kontsolan minutu 1 eta 12 ordu artean aukera dezakezu.
Zer esan nahi dute X-Amz-Algorithm, X-Amz-Credential, X-Amz-Date, X-Amz-Expires, X-Amz-SignedHeaders eta X-Amz-Signature parametroek?
SigV4 autentifikazio-parametroak dira. Algorithm sinatzeko metodoa da (AWS4-HMAC-SHA256), Credential zure access key ID-a gehi data, eskualdea eta zerbitzuaren esparrua, Date URLa noiz sinatu zen, Expires zenbat segundoz den baliozkoa, SignedHeaders sinadurak hartzen dituen goiburuen zerrenda eta Signature sinadura bera. X-Amz-Security-Token URLa aldi baterako kredentzialekin sinatu denean bakarrik agertzen da.
S3ko URL aurrez sinatu bat baliogabetu dezaket iraungi aurretik?
Ez banan-banan. URL aurrez sinatu batek lehenago funtzionatzeari uzten dio sinatu zuten kredentzialak baliogabetzen, ezabatzen edo desaktibatzen direnean bakarrik, edo bucket-politika batek eskaera ukatzen duenean. Esteka bakoitza bertan behera utzi behar baduzu, jarri aplikazio bat aurrean, bere egiaztapenen ondoren bakarrik iraupen laburreko URLak ematen dituena.
Seguruak dira S3ko URL aurrez sinatuak?
Sinadura ezin da faltsutu ez aldatu, eta bucketa pribatu geratzen da. Baina AWSk bearer token gisa deskribatzen ditu URL aurrez sinatuak: esteka lortzen duen edonork erabil dezake, nahi adina aldiz, iraungi arte. Mantendu iraungitze-denbora laburrak, erabili HTTPS eta saihestu estekak kopia daitezkeen lekuetan argitaratzea.
URL aurrez sinatuek funtzionatzen dute Cloudflare R2, Backblaze B2 edo Wasabirekin?
S3 APIa Signature Version 4rekin inplementatzen duten hornitzaileek orokorrean onartzen dituzte, eta SDK dei berberak erabiltzen dituzu hornitzailearen endpoint-arekin. Cloudflare R2k, adibidez, aurrez sinatutako GET, HEAD, PUT eta DELETE onartzen ditu, segundo 1etik 7 egunera arteko iraungitzearekin, baina ez POST inprimaki-igoerak ez domeinu pertsonalizatuak.
Zergatik itzultzen du nire URL aurrez sinatuak SignatureDoesNotMatch?
AWSk hiru kausa ohiko zerrendatzen ditu: sinkronizatu gabe dagoen ordenagailu-erloju bat, goiburuak edo kontsulta-katea aldatzen dituen proxy bat, eta metodoa, goiburuak edo parametroak sinatutakoetatik desberdinak dituen eskaera bat. Igoeretan, ohiko errudunak URLa sortzean erabilitakoaz bestelako Content-Type bat bidaltzea da.
Iturriak
Prezioak eta mugak beheko orri ofizialetatik datoz. Hornitzaileek aldatu egiten dituzte; beraz, egiaztatu erabaki aurretik.
- Amazon S3: objektuak URL aurrez sinatuekin deskargatu eta igotzea
- AWS IAM: autentifikazio-metodoak (SigV4 kontsulta-parametroak)
- Amazon S3 APIa: eskaerak kontsulta-parametroekin autentifikatzea (SigV4)
- AWS CLI erreferentzia: s3 presign
- Boto3 erreferentzia: generate_presigned_url
- AWS SDK for JavaScript v3: @aws-sdk/s3-request-presigner
- Amazon S3: multipart igoeren mugak
- AWS SDKs and Tools: Amazon S3rako datu-osotasunaren babesak
- Cloudflare R2: URL aurrez sinatuak
- Backblaze: B2ren S3rekin bateragarria den APIak URL aurrez sinatuak onartzen ditu?