Zur Erinnerung: Sie benötigen eine Bucket-Richtlinie, die den Zugriff auf Ihren S3-Bucket und Inhalt einschränkt, aber den Zugriff auf Ihre Cloudfront Origin-Zugriffsidentität sowie Ihre IAM-Rolle (n) ermöglicht. Ich habe ein paar Möglichkeiten, wie Sie dies tun können, eines mit dem NotPrincipal-Element und das andere mit dem Principal-Element. Dies hängt davon ab, wie viele Personen Ihre IAM-Rolle verwenden oder ob Sie den Umfang des Zugriffs auf die Rolle skalieren möchten. Sie können verhindern, dass IAM-Entitäten (Amazon Identify and Access Management) auf Ihre Amazon S3-Buckets zugreifen, indem Sie Berechtigungen in einer Bucket-Richtlinie mithilfe des NotPrincipal-Elements und des expliziten Deny festlegen. NotPrincipal unterstützt jedoch keine Platzhalter.
In dieser Politik Beispiel müssen Sie die Rolle Sitzungsnamen jedes Benutzer auflisten und jede Instanz-ID, das die Rolle angenommen wird:
"Effect": "Deny",
"NotPrincipal": {
"AWS": [
"arn:aws:sts::444455556666:assumed-role/cross-account-read-only-role/cross-account-audit-app",
"arn:aws:sts::444455556666:assumed-role/cross-account-read-only-role/instanceID",
"arn:aws:iam::444455556666:role/cross-account-read-only-role",
"arn:aws:iam::444455556666:root"
]
}
all diese Benutzer und Instanzen zu decken, müssen Sie eine Platzhalter in der Erklärung der angenommenen Rolle zu vertreten:
"arn:aws:sts::444455556666:assumed-role/cross-account-read-only-role/*"
jedoch Platzhalter sind nicht mit dem NotPrincipal Element unterstützt. Dies funktioniert, wenn Sie nur die Rolle oder eine Instanz zum Beispiel selbst verwenden, aber wenn Sie skalieren, müssen Sie den ARN für Benutzer/Instanz hinzufügen, der die Rolle übernimmt.
Verwenden Sie in diesem Beispiel anstelle von NotPrincipal
"Principal": "*"
als Zieleinheit in jedem Anweisungsblock, der die Bedingung für jeden Zulassen-Block enthält. Platzhalterzeichen werden in "aws:userid": ["ROLE-ID:*"]
verwendet, um alle Namen aufzunehmen, die vom aufrufenden Prozess (z. B. Anwendung, Dienst oder Instanz-ID) übergeben werden, wenn ein Aufruf zum Abrufen temporärer Anmeldeinformationen ausgeführt wird. Weitere Informationen finden Sie unter In allen Anforderungen verfügbare Informationen. Das root-Konto enthalten ist Aussperrung zu verhindern:
"Condition": {
"StringLike": {
"aws:userid": [
"AROAID2GEXAMPLEROLEID:*",
"444455556666"
]
}
}
StringNotLike im Verweigern Block:
"Condition": {
"StringNotLike": {
"aws:userid": [
"AROAID2GEXAMPLEROLEID:*",
"444455556666"
]
}
}
Dies ist die komplette Politik:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::myExampleBucket",
"Condition": {
"StringLike": {
"aws:userid": [
"AROAID2GEXAMPLEROLEID:*",
"444455556666"
]
}
}
},
{
"Sid": "",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:DeleteObject",
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::myExampleBucket/*",
"Condition": {
"StringLike": {
"aws:userid": [
"AROAID2GEXAMPLEROLEID:*",
"444455556666"
]
}
}
},
{
"Sid": "",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::myExampleBucket/*",
"arn:aws:s3:::myExampleBucket"
],
"Condition": {
"StringNotLike": {
"aws:userid": [
"AROAID2GEXAMPLEROLEID:*",
"444455556666"
]
}
}
}
]
}
Hinweis:
- Stellen Sie sicher, dass Sie die Beispielnamen durch Ihre eigenen Rollen-IDs und Bucket-Namen ersetzen.
- Im obigen Beispiel verwende ich die eindeutige ID für die IAM-Entität.
aws iam get-role --role-name Test-Role
Ausgabe::
{
"Role": {
"AssumeRolePolicyDocument": "<URL-encoded-JSON>",
"RoleId": "AIDIODR4TAW7CSEXAMPLE",
"CreateDate": "2013-04-18T05:01:58Z",
"RoleName": "Test-Role",
"Path": "/",
"Arn": "arn:aws:iam::123456789012:role/Test-Role"
}
}
http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids
Um Informationen über eine IAM-Rolle Der folgende get-role-Befehl erhält Informationen über die Rolle Namen Test-Rolle zu bekommen
I mportant Hinweis
Grundsätzlich, wenn Sie die Origin -Zugriffsidentität mit der CloundFront API, erstellen erhalten Sie die Benutzer-ID und S3 kanonische ID und Sie werden es diese verwenden, in dem Zustand Zeichenfolge haben zu notieren.
http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html#private-content-creating-oai-api
Wenn Sie derzeit wie vorgeschlagen die ID nicht für die Herkunft -Zugriffsidentität Ihre Cloudfront haben, können Sie einen neuen erstellen und Sie können das ID-Element und S3 Canonical-ID speichern.
so sind Sie wollen Ihre Cloudfront Herkunft -Zugriffsidentität auf den S3 Eimer ermöglichen, sondern auch ermöglichen, Ihre IAM-Rolle (n) Zugriff? –
@MuhammadHannan Ja, erlaube * nur * spezifische IAM-Rolle und Cloudfront Origin Access Identity, und leugne alle anderen. – ktrace
Ich habe zwei Möglichkeiten, wie Sie dies tun können. Es hängt nur davon ab, wie viele Personen auf Ihre IAM-Rolle zugreifen, die Sie auf die Whitelist setzen. Ich werde es durch den Fall für Sie hinzufügen, damit Sie überprüfen können. Es bricht beides zusammen, ich werde in Kürze antworten. –