AdministrationDatenverwaltungBucket

Bucket-Richtlinie

Erstellen, anwenden, lesen und prüfen Sie Bucket-Richtlinien von RustFS über die S3-API.

Bucket-Richtlinien von RustFS sind S3-kompatible Ressourcenrichtlinien, die direkt an einen Bucket gebunden sind. Damit gewähren oder verweigern Sie den Zugriff auf den Bucket und seine Objekte, einschließlich eines kontrollierten anonymen Zugriffs für öffentliche Downloads.

Überblick

Eine Bucket-Richtlinie enthält eine oder mehrere Anweisungen, die einen Principal, eine Aktion, eine Ressource und optionale Bedingungen abgleichen. RustFS wertet die Richtlinie für Anfragen an den Bucket aus, bevor es die Speicheroperation zulässt.

Bucket-Richtlinien und IAM-Richtlinien erfüllen unterschiedliche Zwecke:

RichtlinientypGebunden anTypische Verwendung
Bucket-RichtlinieEinen BucketÖffentlichen Zugriff gewähren, Einschränkungen auf Ressourcenebene hinzufügen oder den Zugriff auf einen Bucket autorisieren.
IAM-RichtlinieEinen Benutzer oder eine GruppeFestlegen, was eine authentifizierte Identität über eine oder mehrere Ressourcen tun darf.

Ein ausdrückliches Deny hat Vorrang vor einem Allow. Bucket-Eigentümer können die Bucket-Richtlinie weiterhin abrufen, ersetzen oder löschen, damit eine Deny-Anweisung die Richtlinienverwaltung nicht dauerhaft sperrt.

RustFS implementiert die Standard-S3-Operationen PutBucketPolicy, GetBucketPolicy, GetBucketPolicyStatus und DeleteBucketPolicy.

Öffentliche Richtlinien

Eine Anweisung mit "Principal": "*" kann Zugriff ohne Authentifizierung gewähren. Halten Sie den Umfang von Aktion und Ressource so eng wie möglich und prüfen Sie das Ergebnis anonym, bevor Sie die Richtlinie in der Produktion verwenden.

Konfiguration

Voraussetzungen

  • Erstellen Sie den Ziel-Bucket, bevor Sie eine Richtlinie anwenden.
  • Konfigurieren Sie die AWS CLI mit RustFS-Zugangsdaten und der Region us-east-1.
  • Verwenden Sie Zugangsdaten, die die erforderliche Aktion zur Richtlinienverwaltung ausführen dürfen.

Setzen Sie wiederverwendbare Variablen:

export RUSTFS_ENDPOINT=http://localhost:9000
export BUCKET_NAME=my-bucket

Die Richtlinienverwaltung erfordert diese Aktionen:

OperationErforderliche Aktion
Richtlinie anwenden oder ersetzens3:PutBucketPolicy
Richtlinie lesens3:GetBucketPolicy
Öffentlichen Status lesens3:GetBucketPolicyStatus
Richtlinie entfernens3:DeleteBucketPolicy

Aufbau des Richtliniendokuments

Eine Bucket-Richtlinie verwendet die Version 2012-10-17 und ein Statement-Array:

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "PublicReadObjects",
			"Effect": "Allow",
			"Principal": "*",
			"Action": ["s3:GetObject"],
			"Resource": ["arn:aws:s3:::my-bucket/public/*"]
		}
	]
}

Die Bucket-ARN und die Objekt-ARN unterscheiden sich:

RessourceARN-FormatBeispielaktionen
Bucketarn:aws:s3:::my-buckets3:ListBucket, s3:GetBucketLocation
Objektearn:aws:s3:::my-bucket/*s3:GetObject, s3:PutObject, s3:DeleteObject

Verwenden Sie ein Präfix in der Objekt-ARN, etwa arn:aws:s3:::my-bucket/public/*, um den Zugriff auf einen Teil des Buckets zu beschränken. Das vollständige Anweisungsformat und die unterstützten Bedingungsoperatoren stehen unter Benutzer, Gruppen und Richtlinien.

Public Access Block

Wenn BlockPublicPolicy in der Konfiguration Public Access Block (Sperre für öffentlichen Zugriff) des Buckets aktiviert ist, lehnt RustFS eine neue Richtlinie ab, die eine Allow-Anweisung mit einem Wildcard-Principal enthält. Lassen Sie diesen Schutz aktiviert, solange anonymer Zugriff nicht beabsichtigt ist.

Public Access Block ersetzt keine sorgfältige Prüfung der Richtlinie. Ein vorhandenes ausdrückliches Deny setzt Allows weiterhin außer Kraft, und authentifizierte Anfragen werden weiterhin gegen IAM- und Bucket-Richtlinien geprüft.

Verwendung

Richtlinie für öffentliches Lesen erstellen

Erstellen Sie eine Richtlinie, die anonyme Downloads nur aus dem Präfix public/ erlaubt:

cat > /tmp/my-bucket-policy.json <<'EOF'
{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "PublicReadObjects",
			"Effect": "Allow",
			"Principal": "*",
			"Action": ["s3:GetObject"],
			"Resource": ["arn:aws:s3:::my-bucket/public/*"]
		}
	]
}
EOF

Diese Richtlinie erlaubt kein anonymes Auflisten des Buckets, keine Uploads, keine Überschreibungen und keine Löschungen.

Richtlinie anwenden

aws s3api put-bucket-policy \
	--bucket "$BUCKET_NAME" \
	--policy file:///tmp/my-bucket-policy.json \
	--endpoint-url "$RUSTFS_ENDPOINT"

Eine weitere Richtlinie ersetzt die bestehende Richtlinie vollständig. Rufen Sie das aktuelle Dokument ab und prüfen Sie es, bevor Sie es aktualisieren. Anweisungen werden nicht automatisch zusammengeführt.

Richtlinie lesen

aws s3api get-bucket-policy \
	--bucket "$BUCKET_NAME" \
	--endpoint-url "$RUSTFS_ENDPOINT" \
	--query Policy \
	--output text

RustFS behält das übermittelte Richtlinien-JSON bei. Wenn keine Richtlinie vorhanden ist, gibt die API NoSuchBucketPolicy zurück.

Öffentlichen Status prüfen

aws s3api get-bucket-policy-status \
	--bucket "$BUCKET_NAME" \
	--endpoint-url "$RUSTFS_ENDPOINT"

Die Antwort enthält einen groben Status zum öffentlichen Zugriff:

{
	"PolicyStatus": {
		"IsPublic": false
	}
}

Die aktuelle Statusprüfung erkennt anonymes Auflisten des Buckets (s3:ListBucket) und Uploads (s3:PutObject). Eine Richtlinie, die nur Objekt-Downloads freigibt, wie das Beispiel public/ oben, kann weiterhin false melden. Prüfen Sie immer die genaue anonyme Aktion, das Objektpräfix und die Bedingungen, anstatt diesen Status als vollständige Zugriffsanalyse zu behandeln.

Richtlinie entfernen

aws s3api delete-bucket-policy \
	--bucket "$BUCKET_NAME" \
	--endpoint-url "$RUSTFS_ENDPOINT"

Das Löschen einer Bucket-Richtlinie entfernt nur diese Ressourcenrichtlinie. IAM-Richtlinien, die an Benutzer und Gruppen gebunden sind, bleiben unverändert.

Überprüfung

Laden Sie ein Testobjekt mit authentifizierten Zugangsdaten hoch:

printf 'hello from RustFS\n' > /tmp/hello.txt

aws s3api put-object \
	--bucket "$BUCKET_NAME" \
	--key public/hello.txt \
	--body /tmp/hello.txt \
	--endpoint-url "$RUSTFS_ENDPOINT"

Prüfen Sie, dass das zugelassene Objekt ohne Zugangsdaten heruntergeladen werden kann:

curl --fail-with-body \
	"${RUSTFS_ENDPOINT}/${BUCKET_NAME}/public/hello.txt"

Prüfen Sie anschließend, dass ein Objekt außerhalb des zugelassenen Präfixes nicht öffentlich ist:

aws s3api put-object \
	--bucket "$BUCKET_NAME" \
	--key private/hello.txt \
	--body /tmp/hello.txt \
	--endpoint-url "$RUSTFS_ENDPOINT"

curl --fail-with-body \
	"${RUSTFS_ENDPOINT}/${BUCKET_NAME}/private/hello.txt"

Die zweite curl-Anfrage sollte mit AccessDenied fehlschlagen. Prüfen Sie außerdem jede authentifizierte Benutzerrolle, die sich auf die Richtlinie stützt, besonders wenn das Dokument Bedingungen oder ausdrückliche Deny-Anweisungen enthält.

Nächste Schritte

On this page