Anslut till ett lagringskonto
Rikta AWS CLI, AWS SDK:erna och andra S3-klienter mot ett lagringskonto, använd försignerade URL:er och CORS, och anslut från en arbetslast.
Vad en klient behöver
- Slutpunkt —
https://och värdnamnet under Slutpunkt på kontots Översikt; som standardhttps://<account>.s3.example.com. Ett konto inställt på Endast HTTP betjänas påhttp://i stället. - Adressering i path-style — anrop går till
<endpoint>/<bucket>/<key>. Adresser med bucketen i värdnamnet (<bucket>.<endpoint>) betjänas inte, så slå på path-style i varje klient. - Inloggningsuppgifter — en åtkomstnyckel, eller tillfälliga inloggningsuppgifter.
- Region — vilket värde som helst, till exempel
us-east-1. Servern kontrollerar signaturen med den region som klienten signerade med.
Anrop måste signeras med AWS Signature Version 4, och klientens klocka får skilja högst 15 minuter från serverns.
Inloggningsuppgifter
| Inloggningsuppgift | Åtkomstnyckel-ID | Behöver också |
|---|---|---|
| Åtkomstnyckel | Börjar med AKIA |
Den hemliga åtkomstnyckeln |
| Tillfälliga inloggningsuppgifter | Börjar med ASIA |
Den hemliga åtkomstnyckeln och sessionstoken |
S3-klienter läser dem från de vanliga ställena — för AWS CLI och SDK:erna variablerna
AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY och AWS_SESSION_TOKEN, eller en profil.
AWS CLI
export AWS_ACCESS_KEY_ID=<access-key-id>
export AWS_SECRET_ACCESS_KEY=<secret-access-key>
export AWS_DEFAULT_REGION=us-east-1
aws configure set default.s3.addressing_style path
ENDPOINT=https://my-storage.s3.example.com
aws --endpoint-url "$ENDPOINT" s3 ls
aws --endpoint-url "$ENDPOINT" s3 cp ./report.pdf s3://my-bucket/reports/report.pdf
aws --endpoint-url "$ENDPOINT" s3 sync ./site s3://my-bucket/sitePython
import boto3
from botocore.config import Config
s3 = boto3.client(
"s3",
endpoint_url="https://my-storage.s3.example.com",
aws_access_key_id="<access-key-id>",
aws_secret_access_key="<secret-access-key>",
region_name="us-east-1",
config=Config(s3={"addressing_style": "path"}),
)
s3.upload_file("report.pdf", "my-bucket", "reports/report.pdf")JavaScript
Med AWS SDK for JavaScript v3:
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
const s3 = new S3Client({
endpoint: "https://my-storage.s3.example.com",
region: "us-east-1",
forcePathStyle: true,
credentials: { accessKeyId: "<access-key-id>", secretAccessKey: "<secret-access-key>" },
});
await s3.send(new PutObjectCommand({ Bucket: "my-bucket", Key: "hello.txt", Body: "Hello" }));Försignerade URL:er
En försignerad URL låter någon utan inloggningsuppgifter läsa eller ladda upp ett objekt tills den slutar gälla. Servern godtar dem; skapa dem med din klient, till exempel:
aws --endpoint-url "$ENDPOINT" s3 presign s3://my-bucket/reports/report.pdf --expires-in 3600En URL som signerats med tillfälliga inloggningsuppgifter slutar fungera när de inloggningsuppgifterna går ut. Servern sätter ingen övre gräns för själva giltighetstiden: en URL som signerats med en åtkomstnyckel fungerar tills den går ut eller nyckeln inaktiveras eller tas bort.
CORS
En webbsida som anropar lagringskontot från webbläsaren — för att ladda upp med en försignerad URL,
till exempel — behöver ha sitt ursprung på kontots lista. Lägg till det under
Ytterligare CORS-ursprung, i Konfiguration → Nätverk & säkerhet, som schema, värd och valfri
port, till exempel https://app.example.com. Portalens eget ursprung är alltid tillåtet.
Tillåtna ursprung får använda GET, HEAD, PUT, POST och DELETE. Ett anrop från webbläsaren
med något annat ursprung avvisas. CORS-regler per bucket (PutBucketCors) stöds inte.
Anslut från en arbetslast
Arbetslaster når kontot via dess HTTPS-slutpunkt precis som andra klienter; boundaryns nätverksregler tillåter utgående HTTPS. De tillåter ingen utgående trafik på port 80, så ett konto med Endast HTTP går inte att nå från arbetslaster. Håll inloggningsuppgifterna utanför konfigurationen:
- Lägg åtkomstnyckel-ID:t och den hemliga åtkomstnyckeln i ett valv som två hemligheter — se Lägg till en hemlighet.
- Referera båda från arbetslasten, till exempel som
S3_ACCESS_KEY_IDochS3_SECRET_ACCESS_KEY— se Hemligheter i appar och funktioner eller Hemligheter i containerinstanser. - Lägg slutpunkten i en vanlig inställning, till exempel miljövariabeln
S3_ENDPOINT.
En app läser sina hemligheter från /secrets/env.json; en funktion får dem som miljövariabler med
prefixet STSH_. I en Python-app:
import json
import os
import boto3
from botocore.config import Config
secrets = json.load(open("/secrets/env.json"))
s3 = boto3.client(
"s3",
endpoint_url=os.environ["S3_ENDPOINT"],
aws_access_key_id=secrets["S3_ACCESS_KEY_ID"],
aws_secret_access_key=secrets["S3_SECRET_ACCESS_KEY"],
region_name="us-east-1",
config=Config(s3={"addressing_style": "path"}),
)När anrop misslyckas
| Svar | Vanlig orsak |
|---|---|
403 |
En fel eller felskriven hemlighet; en nyckel som är inaktiverad eller borttagen; en klientklocka som skiljer mer än 15 minuter; en bucket i värdnamnet i stället för i sökvägen; eller, för CreateBucket och DeleteBucket, att Tillåt bucket-livscykel via S3-API är avstängt |
404 NoSuchBucket för en bucket du nyss skapade |
Servern uppdaterar sin lista över buckets med några sekunders mellanrum; försök igen |
405 eller ett annat fel |
En S3-operation som servern inte stöder — se Operationer som stöds |
507 InsufficientStorage |
Uppladdningen skulle ta kontot över dess kvot — se Kvot |