Einführung
Deine EC2-Anwendung muss einen Bericht aus S3 lesen. Du weist ihr über ein Instance-Profil eine IAM-Rolle zu, prüfst den tatsächlichen Berichtszugriff und beobachtest, was beim Entziehen der Berechtigung geschieht.
Du solltest den Start von EC2, User Data und grundlegende IAM-Richtlinien kennen. Diese neue Umgebung stellt ein Anwendungsimage, Netzwerk, Schlüsselpaar und einen S3-Bucket mit synthetischen Daten bereit. Du erstellst die Anwendungsinstance und ihre Autorisierungsressourcen.
Bezug zur Zertifizierung
Dieses Lab übt minimale Berechtigungen und Rollen für Anwendungen. Es unterstützt Aufgabe 2.3 der Sicherheitsziele für AWS Certified Cloud Practitioner und Aufgabe 3.3 der Compute-Ziele.
Starte eine Anwendung ohne Rolle
In diesem Schritt startest du den Berichtsserver und beobachtest, dass seine Anwendung noch nicht auf S3 zugreifen kann.
Beginne in deinem Arbeitsverzeichnis und lade die bereitgestellten IDs für Image, Netzwerk und Berichts-Bucket:
cd /home/labex/project
source launch.env
Prüfe das bereitgestellte Startskript. Es konfiguriert den S3-Bucket und Objektschlüssel der Anwendung, stellt aber keine Zugangsdaten bereit:
cat role-user-data.sh
Starte mit dieser Konfiguration einen Server namens role-server:
aws ec2 \
run-instances \
--image-id "$AMI_ID" \
--instance-type t3.micro \
--subnet-id "$SUBNET_ID" \
--security-group-ids "$SECURITY_GROUP_ID" \
--key-name report-key \
--count 1 \
--user-data file://role-user-data.sh \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=role-server}]'
Speichere seine ID:
INSTANCE_ID=$(aws ec2 \
describe-instances \
--filters Name=tag:Name,Values=role-server \
--query 'Reservations[0].Instances[0].InstanceId' \
--output text)
aws ec2 \
wait instance-running \
--instance-ids "$INSTANCE_ID"
Öffne AWS View, klicke auf Refresh resources, wähle role-server und klicke auf Check application. Bestätige HTTP 200 und Role report server. Klicke dann auf Read S3 report. Erwarte HTTP 503 und Application storage unavailable: Die laufende Anwendung hat noch keine Rollenzugangsdaten.
Eine Anwendung auf EC2 kann über Instance-Metadaten temporäre Zugangsdaten für eine zugewiesene Rolle erhalten. Ihr AWS-SDK signiert damit API-Anfragen. Der offizielle Leitfaden zu EC2-Rollen erklärt diesen Ablauf. Du konfigurierst die Rolle, statt deine Terminal-Zugangsdaten in die Anwendung zu kopieren.
Gewähre Zugriff über ein Instance-Profil
In diesem Schritt erstellst du die Vertrauens- und Berechtigungsrichtlinien der Rolle, fügst sie einem Instance-Profil hinzu und verknüpfst dieses mit deinem Server.
Eine Vertrauensrichtlinie legt fest, wer eine Rolle übernehmen darf. Erstelle eine JSON-Richtlinie, die dem EC2-Dienst vertraut. Das Here-Dokument mit einem zitierten Begrenzungswort bewahrt den JSON-Inhalt wörtlich:
cat > ec2-trust.json <<'JSON'
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {"Service": "ec2.amazonaws.com"},
"Action": "sts:AssumeRole"
}]
}
JSON
Erstelle mit dieser Vertrauensrichtlinie die Rolle report-reader:
aws iam \
create-role \
--role-name report-reader \
--assume-role-policy-document file://ec2-trust.json
Eine Berechtigungsrichtlinie definiert, was die übernommene Rolle tun darf. Diese Anwendung benötigt nur s3:GetObject für report.csv. Ein Objekt-ARN enthält sowohl Bucket als auch Schlüssel. Anders als das vorherige zitierte Here-Dokument expandiert die unzitierte Markierung JSON unten $REPORT_BUCKET zum bereitgestellten Bucket-Namen:
cat > read-report.json <<JSON
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::$REPORT_BUCKET/report.csv"
}]
}
JSON
Prüfe den aufgelösten Ressourcen-ARN:
cat read-report.json
Füge deiner Rolle diese Inline-Richtlinie hinzu:
aws iam \
put-role-policy \
--role-name report-reader \
--policy-name ReadReport \
--policy-document file://read-report.json
Ein Instance-Profil stellt EC2 eine IAM-Rolle bereit. Bei Verwendung der CLI erstellst du Rolle und Profil getrennt. Erstelle zur besseren Übersicht ein Profil mit demselben Namen:
aws iam \
create-instance-profile \
--instance-profile-name report-reader
Füge die Rolle dem Profil hinzu:
aws iam \
add-role-to-instance-profile \
--instance-profile-name report-reader \
--role-name report-reader
Verknüpfe das Profil mit der bestehenden Instance und speichere die Verknüpfungs-ID für die Bereinigung:
ASSOCIATION_ID=$(aws ec2 \
associate-iam-instance-profile \
--instance-id "$INSTANCE_ID" \
--iam-instance-profile Name=report-reader \
--query 'IamInstanceProfileAssociation.AssociationId' \
--output text)
Prüfe die Verknüpfung:
aws ec2 \
describe-iam-instance-profile-associations \
--association-ids "$ASSOCIATION_ID" \
--query 'IamInstanceProfileAssociations[].{Instance:InstanceId,State:State,Profile:IamInstanceProfile.Arn}'
Bestätige associated und das Profil report-reader. Aktualisiere AWS View und klicke auf Read S3 report. Erwarte HTTP 200 mit period,total und Q1,320. Die Anwendung verwendet die Rollenzugangsdaten ihres SDKs, um das tatsächliche S3-Objekt abzurufen. Wenn die Verknüpfung noch nicht vollständig wirksam ist, warte kurz und wiederhole die Anfrage.
Die Rolle erlaubt das Lesen eines einzelnen Objekts, statt Zugriff auf den gesamten Bucket oder Administratorrechte zu gewähren. Der Leitfaden zu Instance-Profilen erklärt, wie Profile Rollen bereitstellen und weshalb Änderungen der Verknüpfung Zeit benötigen können.
Beobachte den Entzug der Berechtigung
In diesem Schritt entfernst du die Berichtsberechtigung der Rolle und unterscheidest einen Autorisierungsfehler von einem Anwendungsfehler.
Entferne nur die Inline-Richtlinie, die du erstellt hast:
aws iam \
delete-role-policy \
--role-name report-reader \
--policy-name ReadReport
Liste die verbleibenden Inline-Richtlinien der Rolle auf:
aws iam \
list-role-policies \
--role-name report-reader
Erwarte eine leere Liste PolicyNames. Das Instance-Profil bleibt verknüpft, aber seine Rolle erlaubt das Lesen des Berichts nicht mehr.
Klicke in AWS View auf Check application und bestätige HTTP 200: Der Server läuft weiterhin. Klicke dann auf Read S3 report. Erwarte HTTP 403 und Access denied. Wenn die Berechtigungsänderung noch nicht wirksam ist, warte kurz und wiederhole die Anfrage. Eine erfolgreiche Zustandsprüfung zusammen mit einer S3-Ablehnung deutet auf die Autorisierung hin, nicht auf eine gestoppte Instance oder eine fehlende Anwendung.
Ein SDK kann temporäre Zugangsdaten zwischenspeichern. Das Entfernen einer Rollenberechtigung verändert, was diese Zugangsdaten tun dürfen. Das Entfernen eines Instance-Profils widerruft bereits ausgestellte Zugangsdaten nicht sofort.
Bereinige Instance und Rolle
In diesem Schritt entfernst du deine Verknüpfung, den Server, das Profil und die Rolle.
Löse die Profilverknüpfung mit der gespeicherten Verknüpfungs-ID:
aws ec2 \
disassociate-iam-instance-profile \
--association-id "$ASSOCIATION_ID"
Beende die Anwendungsinstance:
aws ec2 \
terminate-instances \
--instance-ids "$INSTANCE_ID"
aws ec2 \
wait instance-terminated \
--instance-ids "$INSTANCE_ID"
Entferne die Rolle aus ihrem nun ungenutzten Instance-Profil:
aws iam \
remove-role-from-instance-profile \
--instance-profile-name report-reader \
--role-name report-reader
Lösche das leere Profil:
aws iam \
delete-instance-profile \
--instance-profile-name report-reader
Die Inline-Richtlinie wurde beim Berechtigungsentzug bereits entfernt. Lösche deine Rolle:
aws iam \
delete-role \
--role-name report-reader
Bestätige, dass die Instance beendet ist:
aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name}'
Prüfe, dass die benannte Rolle und das Profil nicht mehr vorhanden sind:
aws iam \
list-roles \
--query "Roles[?RoleName=='report-reader'].RoleName"
aws iam \
list-instance-profiles \
--query "InstanceProfiles[?InstanceProfileName=='report-reader'].InstanceProfileName"
Beide Listen sollten [] sein. Aktualisiere AWS View und bestätige, dass der Server kein laufendes Ziel mehr ist. Behalte die vorbereiteten S3-Daten, das Netzwerk und das Schlüsselpaar bei.
Zusammenfassung
Du hast für eine IAM-Rolle EC2-Vertrauen und Leseberechtigung für ein einzelnes S3-Objekt erstellt, die Rolle über ein Instance-Profil bereitgestellt und den tatsächlichen Berichtszugriff der Anwendung geprüft. Danach hast du die Berechtigung entzogen und eine S3-Ablehnung von einer funktionierenden Anwendung unterschieden. Zum Schluss hast du Instance, Profil und Rolle entfernt.



