AWS Solutions Architect · Lektion

S3-adgangskontrol: Bucket-politikker og ACL'er

Skriv bucket-politikker, sammenlign dem med ACL'er, og konfigurer indstillinger for blokering af offentlig adgang til sikker hosting.

Lektion 2 af 413 trin

S3-adgangskontrol: Bucket-politikker og ACL'er er en gratis AWS Solutions Architect-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i AWS Solutions Architect, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. AWS Solutions Architect-kurset indeholder 4 lektioner i alt.

Oversigt over S3-adgangskontrol

S3 tilbyder flere overlappende mekanismer til adgangskontrol: IAM-politikker (identitetsbaserede, styrer hvad principaler kan gøre), bucket-politikker (ressourcebaserede JSON-politikker på bucketen), Access Control Lists (ACL'er) (ældre tildelinger pr. objekt eller bucket) og S3 Block Public Access (en tilsidesættelse på konto- eller bucketniveau, der blokerer al offentlig adgang uanset andre politikker). Til de fleste anvendelser i dag anbefales bucket-politikker sammen med Block Public Access – ACL'er betragtes som forældede.

Bucketpolitikker: Ressourcebaseret JSON

En bucketpolitik er et JSON-dokument, der er knyttet direkte til S3-bucketten. Den angiver, hvilke principals (IAM-brugere, roller, AWS-konti, tjenester eller offentligheden) der må udføre hvilke handlinger på hvilke ressourcer (bucketten og/eller bestemte nøglepræfikser). Bucketpolitikker understøtter adgang på tværs af konti uden behov for IAM-roller: Du kan give en IAM-rolle i en anden AWS-konto læseadgang til bestemte objekter direkte i bucketpolitikken. Hver bucket kan have én politik, og den maksimale størrelse er 20 KB.

# Allow a specific IAM role from another account to read objects
{
  'Version': '2012-10-17',
  'Statement': [{
    'Effect': 'Allow',
    'Principal': {
      'AWS': 'arn:aws:iam::999999999999:role/PartnerReadRole'
    },
    'Action': 's3:GetObject',
    'Resource': 'arn:aws:s3:::my-bucket/partner-data/*'
  }]
}

Gør objekter offentligt læsbare

Hvis du vil levere offentligt indhold (f.eks. aktiver til et statisk website eller offentlige datasæt), kan du gøre objekter offentligt læsbare via en bucketpolitik. Først skal du deaktivere Block Public Access på bucketniveau og derefter tilføje en bucketpolitik-erklæring med Principal: '*' og Action: s3:GetObject. Kombinationen af den deaktiverede Block Public Access-indstilling og bucketpolitikkens Allow er påkrævet – det virker ikke at aktivere den ene uden den anden. Begræns altid Resource til et bestemt præfiks i stedet for hele bucketten, medmindre du bevidst vil gøre alle objekter offentlige.

# Public read policy for static website assets
{
  'Version': '2012-10-17',
  'Statement': [{
    'Effect': 'Allow',
    'Principal': '*',
    'Action': 's3:GetObject',
    'Resource': 'arn:aws:s3:::my-website-bucket/public/*'
  }]
}

Indstillinger for S3 Block Public Access

S3 Block Public Access fungerer som et sikkerhedsnet med fire indstillinger, der tilsidesætter bucketpolitikker og ACL'er: BlockPublicAcls (afviser anmodninger om at angive offentlige ACL'er), IgnorePublicAcls (ignorerer eksisterende offentlige ACL'er), BlockPublicPolicy (afviser bucketpolitikker, der giver offentlig adgang) og RestrictPublicBuckets (begrænser adgang baseret på en offentlig politik). Alle fire indstillinger er aktiveret som standard. Du kan også aktivere Block Public Access på kontoniveau, så det blokeres for alle buckets uanset de enkelte bucketindstillinger – ideelt til at forhindre utilsigtet offentlig eksponering.

# Enable all Block Public Access settings on a bucket
aws s3api put-public-access-block \
  --bucket my-private-bucket \
  --public-access-block-configuration \
    BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true

Adgangskontrollister (ACL'er): Ældre mekanisme

S3 ACL'er er den oprindelige mekanisme til adgangskontrol og blev introduceret før IAM. En ACL tildeler foruddefinerede tilladelser (READ, WRITE, FULL_CONTROL) til AWS-konti eller foruddefinerede grupper (alle brugere, godkendte AWS-brugere, loglevering). ACL'er kan anvendes på bucketniveau eller på det enkelte objektniveau. AWS anbefaler nu at deaktivere ACL'er (indstillingen 'Bucket Owner Enforced' i S3 gør bucketejeren til ejer af alle objekter og deaktiverer ACL'er) og i stedet bruge bucketpolitikker og IAM. ACL'er indgår stadig i SAA-C03-eksamen som et ældre koncept.

# Disable ACLs by setting ownership to BucketOwnerEnforced
aws s3api put-bucket-ownership-controls \
  --bucket my-bucket \
  --ownership-controls '{"Rules":[{"ObjectOwnership":"BucketOwnerEnforced"}]}'

Origin Access Control til CloudFront

Når du leverer S3-indhold via CloudFront, skal bucketten være privat, samtidig med at CloudFront skal kunne hente objekter. Brug Origin Access Control (OAC) – den moderne erstatning for Origin Access Identity (OAI). OAC opretter en CloudFront-identitet, som du giver tilladelse til s3:GetObject i bucketpolitikken, mens Block Public Access forbliver aktiveret. På den måde skal brugere gå gennem CloudFront (til caching, WAF og HTTPS), og de kan ikke få direkte adgang til bucketten – et almindeligt sikkert arkitekturmønster i SAA-C03-eksamen.

# Bucket policy granting CloudFront OAC access
{
  'Version': '2012-10-17',
  'Statement': [{
    'Effect': 'Allow',
    'Principal': {
      'Service': 'cloudfront.amazonaws.com'
    },
    'Action': 's3:GetObject',
    'Resource': 'arn:aws:s3:::my-bucket/*',
    'Condition': {
      'StringEquals': {
        'AWS:SourceArn': 'arn:aws:cloudfront::123456789012:distribution/EDFDVBD6EXAMPLE'
      }
    }
  }]
}

S3-adgang på tværs af konti

Der er to måder at give en anden AWS-konto adgang til din S3-bucket på. Mulighed 1 – bucketpolitik: Tilføj en erklæring med den eksterne kontos ARN som Principal og de ønskede S3-handlinger. Den eksterne kontos IAM-brugere og roller skal stadig have IAM-tilladelser til at kalde S3, og bucketpolitikken skal desuden give dem Allow. Mulighed 2 – IAM-rolle med tillidspolitik: Opret en rolle på din konto, som den eksterne konto har tillid til; den eksterne kontos identiteter antager rollen og får din buckets tilladelser. En bucketpolitik er enklere i skrivebeskyttede scenarier, mens roller er bedre til operationel adgang.

CORS-konfiguration til webapplikationer

Cross-Origin Resource Sharing (CORS) gør det muligt for en webapplikation, der hostes på ét domæne, at sende JavaScript-henteanmodninger til en S3-bucket på et andet domæne. Uden en CORS-konfiguration blokerer browsere disse anmodninger af sikkerhedshensyn. Du tilføjer en CORS-konfiguration til bucketten, som angiver tilladte oprindelser, HTTP-metoder og headere. CORS er almindeligvis nødvendig, når en React SPA, der hostes på example.com, henter billeder eller filer direkte fra en S3-bucket-URL.

# Apply a CORS configuration
aws s3api put-bucket-cors \
  --bucket my-website-bucket \
  --cors-configuration '{"CORSRules":[{"AllowedOrigins":["https://example.com"],"AllowedMethods":["GET"],"AllowedHeaders":["*"],"MaxAgeSeconds":3600}]}'

Forudsignerede URL'er til midlertidig adgang

En forudsigneret URL giver tidsbegrænset adgang til et privat S3-objekt (til GET eller PUT) uden at ændre bucketens eller objektets tilladelser. URL'en indeholder dine legitimationsoplysninger og et udløbstidspunkt – alle, der har URL'en, kan få adgang til objektet, indtil den udløber. Brug forudsignerede URL'er til at lade godkendte brugere i din app downloade private filer, lade klienter uploade direkte til S3 uden at gå gennem din backend eller dele rapporter midlertidigt. Udløbstiden kan være fra 1 sekund til 7 dage (ved brug af midlertidige STS-legitimationsoplysninger er maksimum 12 timer).

# Generate a pre-signed GET URL valid for 24 hours
aws s3 presign s3://my-private-bucket/reports/invoice.pdf \
  --expires-in 86400

# Generate a pre-signed PUT URL (for client uploads)
aws s3 presign s3://my-private-bucket/uploads/new-file.pdf \
  --expires-in 3600 \
  --method PUT

Betingelser i bucketpolitikker til sikkerhed

Brug betingelser i bucketpolitikker til at tilføje kontekstbaseret sikkerhed. Almindelige mønstre er: aws:SourceIp begrænser adgangen til bestemte IP-intervaller (f.eks. VPC-endpoints eller virksomhedsnetværk); aws:SecureTransport: true gennemtvinger HTTPS ved at afvise anmodninger over HTTP (en god praksis for alle buckets, der gemmer følsomme data); s3:x-amz-server-side-encryption sikrer, at objekter skal uploades med kryptering på serversiden; og aws:PrincipalOrgID begrænser adgangen til principals i din AWS-organisation, så dataeksfiltrering til eksterne konti forhindres.

# Deny non-HTTPS access to the bucket
{
  'Effect': 'Deny',
  'Principal': '*',
  'Action': 's3:*',
  'Resource': [
    'arn:aws:s3:::my-secure-bucket',
    'arn:aws:s3:::my-secure-bucket/*'
  ],
  'Condition': {
    'Bool': {'aws:SecureTransport': 'false'}
  }
}

S3 VPC-endpoints til privat adgang

Som standard får EC2-instanser i et privat subnet adgang til S3 via internettet (gennem en NAT-gateway), hvilket medfører NAT-omkostninger og eksponerer trafikken for det offentlige internet. S3 Gateway Endpoints giver privat forbindelse til S3 fra en VPC uden en NAT-gateway og uden ekstra betaling. Du tilføjer Gateway Endpoint til din routingtabel, hvorefter trafik til S3 automatisk dirigeres gennem AWS' private netværk. Du kan også tilføje betingelser i bucketpolitikken ved hjælp af aws:SourceVpce for kun at tillade anmodninger, der kommer gennem endpointet.

# Create an S3 gateway endpoint and associate with route tables
aws ec2 create-vpc-endpoint \
  --vpc-id vpc-12345678 \
  --service-name com.amazonaws.us-east-1.s3 \
  --route-table-ids rtb-12345678

Hurtigt tjek

Test din forståelse af AWS Solutions Architect (SAA-C03)-koncepterne fra denne lektion.

Opsummering af lektionen

I denne lektion har du lært, at bucketpolitikker er ressourcebaserede JSON-dokumenter, der styrer adgang på tværs af konti og tjenesteadgang til S3, at S3 Block Public Access er en sikkerhedstilsidesættelse, der forhindrer utilsigtet offentlig eksponering, og at forudsignerede URL'er, VPC-endpoints og CORS-konfigurationer håndterer bestemte adgangsmønstre på en sikker måde. Dernæst gennemgår vi S3-versionering, MFA Delete og replikering.

Gratis at komme i gang

Lær AWS Solutions Architect med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
30
Lektioner
120

Ofte stillede spørgsmål

Er lektionen “S3-adgangskontrol: Bucket-politikker og ACL'er” gratis?

Ja — alle 3 lektioner i læringssporet AWS Solutions Architect, inklusive “S3-adgangskontrol: Bucket-politikker og ACL'er”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. AWS Solutions Architect-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “S3-adgangskontrol: Bucket-politikker og ACL'er”?

Skriv bucket-politikker, sammenlign dem med ACL'er, og konfigurer indstillinger for blokering af offentlig adgang til sikker hosting. Du øver dig i AWS Solutions Architect med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på AWS Solutions Architect?

Der kræves ingen tidligere erfaring. AWS Solutions Architect på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “S3-adgangskontrol: Bucket-politikker og ACL'er”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne AWS Solutions Architect-lektion?

Ja. Alle AWS Solutions Architect-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Buckets, objekter og Regions
  2. S3-adgangskontrol: Bucket-politikker og ACL'er
  3. Versionering, MFA Delete og replikering
  4. Lagerklasser og livscykluspolitikker
← Tilbage til AWS Solutions Architect