
Ich versuche, eine Bucket-Richtlinie zu erstellen, die Zugriff von einer EC2- oder ECS-Instanz gewährt, um ihnen das Anlegen von Objekten in einem bestimmten Bucket zu ermöglichen.
Ich habe ein paar grundlegende Fragen:
1) Ist eine Bucket-Richtlinie das Richtige, wenn Sie lediglich Zugriff von ec2 auf einen Bucket innerhalb desselben Kontos gewähren möchten? In den Dokumenten wird anscheinend häufig auf kontoübergreifenden Zugriff Bezug genommen.
2) Was sollte das Prinzip sein, um dies zu erreichen? Gibt es beispielsweise ein Prinzip, das ich festlegen kann, das einfach besagt: „Zugriff von jeder Ressource in diesem AWS-Konto gewähren“?
3) Ich habe dies zum Laufen gebracht, indem ich die IAM-Rolle der ec2-Instanz im Prinzip angegeben habe (siehe unten). Aber ist das die bevorzugte Vorgehensweise?
{
"Version": "2012-10-17",
"Id": "Policy1563569774763",
"Statement": [
{
"Sid": "Stmt1563569772515",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::XXXX:role/S3_Read_All"
]
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::some-test-bucket-12345/*"
}
]
}
Vielen Dank im Voraus! Ich kann das nur schwer begreifen.
Antwort1
Ihre Intuition war richtig. Wenn Sie nur Zugriff auf einen Bucket im selben Konto gewähren möchten, ist es wahrscheinlich einfacher, einfachVerwenden einer IAM-RichtlinieSie würden eine solche Richtlinie an eineRolle, das wiederum an die EC2-Instanz angehängt wird.
Unter Berücksichtigung der Richtlinie im ersten Link ist Folgendes zu beachten:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListObjectsInBucket",
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::bucket-name"]
},
{
"Sid": "AllObjectActions",
"Effect": "Allow",
"Action": "s3:*Object",
"Resource": ["arn:aws:s3:::bucket-name/*"]
}
]
}
Die erste Anweisung „ListObjectsInBucket“ hat die Ressource auf den Bucket eingestellt. Die ARN ist arn:aws:s3:::bucket-name
(no *
there). Die zweite Anweisung hat die ARN auf eingestellt arn:aws:s3:::bucket-name/*
. Das /*
there bedeutet „alle Objekte im Bucket Bucket-Name“. Einige IAM-Aktionen gelten für Buckets, andere für Objekte.
Sie können auch ein Präfix verwenden, z. B. arn:aws:s3:::bucket-name/prefix*
, das Zugriff auf alle Objekte gewährt, deren Name mit „Präfix“ beginnt. Beachten Sie, dass der Name eines Objekts in S3 der vollständige Name ist, einschließlich Pfadmarkierungen („/“), also „/Pfad/zum/Objekt“, nicht nur „Objekt“. In S3 gibt es keine Verzeichnisse.
Wenn Sie einer EC2-Instanz eine Rolle zuweisen, erteilen Sie außerdem jedem, der Zugriff auf die Instanz hat, dieselben Berechtigungen wie die Rolle. Stellen Sie also sicher, dass jeder Benutzer, der sich bei der EC2-Instanz anmelden kann, auch Zugriff auf den S3-Bucket hat.
Beachten Sie, dass die Zugriffsebene eines Objekts (Benutzer, EC2-Instanz, Lambda-Funktion usw.) auf den Bucket durch den Richtliniensatz vorgegeben wird, der sich aus der Kombination der IAM-Richtlinien und Bucket-Richtlinien ergibt. Und Deny-Anweisungen haben Vorrang. Sie müssen nur eine davon verwenden, wenn sich sowohl das Objekt als auch der Bucket im selben Konto befinden und IAM-Richtlinien wahrscheinlich die naheliegende Wahl sind. Beim kontenübergreifenden Zugriff werden Bucket-Richtlinien grundsätzlich verwendet, um dem anderen Konto Zugriff auf den Bucket zu gewähren. Im anderen Konto wird auch eine IAM-Richtlinie festgelegt.