21/09/2008
At støde på en fejlmeddelelse, når man forsøger at arbejde i et komplekst miljø som Amazon Web Services (AWS), kan være en frustrerende oplevelse. En af de mest almindelige, men ofte forvirrende, fejl er "An error occurred (UnauthorizedOperation) when calling the RunInstances operation". Denne fejl dukker typisk op, når du forsøger at starte en Amazon Elastic Compute Cloud (EC2) instans. Ofte ledsages den af en lang, kodet meddelelse, der ved første øjekast virker uforståelig. Men fortvivl ikke. Denne kodede meddelelse er faktisk nøglen til at løse problemet hurtigt og effektivt. I denne artikel vil vi guide dig igennem processen med at afkode denne fejl, forstå dens rodårsag og implementere den korrekte løsning, så du kan komme tilbage til dit arbejde.

Kernen i denne fejl er et spørgsmål om tilladelser. AWS opererer med en meget streng sikkerhedsmodel kaldet Identity and Access Management (IAM). Hver eneste handling, fra at starte en server til at læse en fil i en S3-bucket, er underlagt en tilladelseskontrol. Når du modtager en 'UnauthorizedOperation'-fejl, fortæller AWS dig simpelthen, at den bruger eller rolle, du er logget ind som, ikke har den specifikke tilladelse, der kræves for at udføre den anmodede handling.
Dette kan skyldes flere ting:
- For restriktiv politik: Den IAM-politik, der er knyttet til din bruger eller rolle, er for stram og mangler den nødvendige tilladelse.
- Manglende tilladelse: Din bruger har simpelthen aldrig fået tildelt retten til at starte EC2-instanser.
- Betingede begrænsninger: Politikken kan indeholde betingelser (conditions), der forhindrer handlingen, f.eks. at den kun er tilladt fra en bestemt IP-adresse eller i en bestemt region.
Det vigtigste at forstå er, at dette er en sikkerhedsfunktion, der virker efter hensigten. Udfordringen ligger i at identificere præcis, hvilken tilladelse der mangler.
Den Kryptiske Nøgle: Sådan Afkoder du Fejlmeddelelsen
Den lange, kodede streng i fejlmeddelelsen er din bedste ven i denne situation. Den indeholder alle detaljer om, hvorfor din anmodning blev afvist. For at afkode den skal du bruge AWS Command Line Interface (AWS CLI) eller AWS CloudShell.
Sørg for, at du har AWS CLI installeret og konfigureret. Kør derefter følgende kommando, hvor du erstatter `DIN_KODEDE_FEJLMEDDELELSE` med den faktiske streng fra din fejlmeddelelse:
aws sts decode-authorization-message --encoded-message DIN_KODEDE_FEJLMEDDELELSEVigtigt: For at kunne køre denne kommando, skal den IAM-bruger, du bruger i din CLI, have tilladelsen `sts:DecodeAuthorizationMessage`. Hvis du ikke har denne tilladelse, vil du modtage en ny 'AccessDenied'-fejl, og du bliver nødt til at bede en administrator om enten at afkode meddelelsen for dig eller give dig den nødvendige tilladelse. Dette er en sikkerhedsforanstaltning for at forhindre, at brugere kan fiske efter information om virksomhedens sikkerhedspolitikker.
Tolkning af Resultaterne: Forstå den Afkodede Meddelelse
Når kommandoen er kørt succesfuldt, får du et JSON-svar tilbage. Dette svar kan se komplekst ud, men det er meget logisk opbygget. Lad os bryde de vigtigste elementer ned.
Et typisk svar vil indeholde et `DecodedMessage`-objekt, som kan se nogenlunde sådan ud:
{ "DecodedMessage": "{\"allowed\":false,\"explicitDeny\":false,\"matchedStatements\":{\"items\":[]},\"failures\":{\"items\":[]},\"context\":{\"principal\":{\"id\":\"ABCDEFGHIJKLMNO\",\"name\":\"AWS-Bruger\",\"arn\":\"arn:aws:iam::123456789012:user/test-bruger\"},\"action\":\"iam:PassRole\",\"resource\":\"arn:aws:iam::123456789012:role/EC2_Profil_Rolle\",\"conditions\":{...}}}" }De mest afgørende felter at kigge på er `principal`, `action` og `resource`:
- principal: Identificerer, hvem der forsøgte at udføre handlingen (f.eks. `arn:aws:iam::123456789012:user/test-bruger`).
- action: Den specifikke tilladelse, der manglede (f.eks. `iam:PassRole`). Dette er ofte den afgørende information.
- resource: Den ressource, som handlingen blev forsøgt udført på (f.eks. `arn:aws:iam::123456789012:role/EC2_Profil_Rolle`).
I eksemplet ovenfor er problemet, at brugeren `test-bruger` forsøger at starte en EC2-instans med en IAM-rolle (`EC2_Profil_Rolle`), men brugeren har ikke tilladelse til at 'give' (`PassRole`) denne rolle videre til EC2-tjenesten. Dette er en meget almindelig årsag til fejlen.
Tabel over Vigtige Felter i Afkodet Svar
| Felt | Beskrivelse | Eksempel |
|---|---|---|
principal | Den bruger eller rolle, der udførte handlingen. | arn:aws:iam::ACCOUNT_ID:user/dit-brugernavn |
action | Den specifikke handling, der blev nægtet. Dette er den manglende tilladelse. | ec2:RunInstances eller iam:PassRole |
resource | Den ressource, handlingen var rettet mod. | arn:aws:ec2:REGION:ACCOUNT_ID:instance/* |
Den Endelige Løsning: Opdatering af din IAM-Politik
Bevæbnet med informationen fra den afkodede meddelelse er løsningen nu ligetil. Du skal redigere den IAM-politik, der er tilknyttet den bruger eller rolle, som fik fejlen, og tilføje den manglende tilladelse.

- Naviger til IAM-tjenesten i din AWS-konsol.
- Find den relevante bruger (under 'Users') eller rolle (under 'Roles').
- Gå til fanen 'Permissions'.
- Find den relevante politik og klik for at redigere den (eller tilføj en ny 'inline policy').
- Tilføj et nyt 'Statement' i politikken, der eksplicit tillader den manglende `action` på den specificerede `resource`.
For eksemplet med `iam:PassRole` ville et statement se således ud:
{ "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::123456789012:role/EC2_Profil_Rolle" }Efter at have gemt den opdaterede politik, prøv at starte din EC2-instans igen. Fejlen skulle nu være løst.
Ofte Stillede Spørgsmål (FAQ)
Hvad hvis jeg ikke har adgang til AWS CLI?
Du kan bruge AWS CloudShell, som er en browser-baseret terminal, der er tilgængelig direkte i AWS-konsollen. Den kommer med AWS CLI præinstalleret og konfigureret med de samme tilladelser som din konsol-bruger.
Nej, tværtimod. Fejlen er et tegn på, at AWS' sikkerhedssystemer fungerer korrekt. Den forhindrer uautoriserede handlinger og sikrer, at princippet om 'mindste privilegium' (least privilege) overholdes.
Jeg har tilføjet tilladelsen, men fejlen fortsætter. Hvad nu?
Hvis problemet fortsætter, kan der være andre politikker i spil. Undersøg følgende:
- Permission Boundaries: En avanceret funktion, der sætter en øvre grænse for, hvilke tilladelser en bruger kan have.
- Service Control Policies (SCPs): Hvis din konto er en del af en AWS Organization, kan der være SCP'er på et højere niveau, der blokerer handlingen.
- Eksplicit 'Deny': Tjek alle politikker for et 'Deny'-statement, der dækker den handling, du forsøger at udføre. Et 'Deny' overtrumfer altid et 'Allow'.
Hvorfor er fejlmeddelelsen kodet i første omgang?
Den er kodet af sikkerhedsmæssige årsager. Den afkodede meddelelse kan indeholde følsomme oplysninger om din kontos ressourcer og politikker. Ved at kode den sikrer AWS, at kun brugere med den rette tilladelse (`sts:DecodeAuthorizationMessage`) kan se disse detaljer.
At navigere i AWS IAM kan virke skræmmende, men værktøjer som den kodede fejlmeddelelse er designet til at hjælpe dig. Ved at følge denne guide kan du omdanne en frustrerende fejl til en lærerig oplevelse og få en dybere forståelse for, hvordan sikkerhed og tilladelser fungerer i skyen.
Hvis du vil læse andre artikler, der ligner Løs AWS Fejl: Uautoriseret Operation, kan du besøge kategorien Teknologi.
