Ich habe eine Amazon EC2-Instanz läuft ein Server zugewiesen wird worden, der für seine Kunden föderierte Zugriff auf S3-Ressourcen bereitstellen muss (Fenster 7/8, iPad, unter anderem). Bisher habe ich Folgendes erstellt:Erstellen von STS-Tokens für föderierte Benutzer aus einer C# .NET-Anwendung auf einer Amazon EC2-Instanz ausgeführt wird, der eine IAM-Rolle
In der Regel werden die Clients Zugriff anfordern, um Objekte in S3 zu erhalten oder zu setzen, nie löschen. Wenn also der Client die Datei auf den Server hochlädt und sie dann vom Server an S3 weiterleitet, möchte ich die temporären Zugangsdaten für den Client bereitstellen, um die Datei direkt in den entsprechenden S3-Bucket zu stellen . Hier
ist, was die EC2-Instanz IAM Rolle wie folgt aussieht:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": "arn:aws:s3:::devtestbucket/*"
},
{
"Effect": "Allow",
"Action": [ "sqs:*" ],
"Resource": "arn:aws:sqs:us-west-2::dev-*"
},
{
"Effect": "Allow",
"Action": [ "dynamodb:*" ],
"Resource": "arn:aws:dynamodb:us-west-2::dev-*"
},
{
"Effect": "Allow",
"Action": [ "sts:*" ],
"Resource": "*"
}
]
}
Und die STS Token Emittent IAM Nutzungsbedingungen ist:
{
"Statement": [
{
"Action": [
"sts:GetFederationToken"
],
"Effect": "Allow",
"Resource": [
"arn:aws:sts:::federated-user/*"
]
},
{
"Action": [
"s3:*"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::devtestbucket"
]
}
]
}
In meinem Server-Side-Code, erstelle ich den STS-Client vereinigungsTokenAnforderung und die GetFederationToken Anruf wie folgt:
var stsClient = new AmazonSecurityTokenServiceClient(stsTokenIssuerAwsAccessKeyId, stsTokenIssuerAwsSecretAccessKey);
var request = new GetFederationTokenRequest
{
Name = GenerateIamFederatedUserName(), // I know this is correct
DurationSeconds = (int)TimeSpan.FromHours(6).TotalSeconds,
Policy = GenerateSTSPolicy(objectPrefix, permittedActions) // This works as expected too
};
var fedTokenResponse = stsClient.GetFederationToken(request);
ich nicht shar kann Die Implementierungen der Generate * -Funktionen, aber ich weiß, dass diese funktionieren.
Hier ist das seltsame Ding. Wenn ich IAM-Benutzeranmeldeinformationen verwenden, die an einen Benutzer mit einer Zugriffsrichtlinie gebunden sind, die genau wie die oben gezeigte EC2-Instanzrolle aussieht, funktioniert alles wie erwartet und Clients können alle erwarteten S3-Aktionen ausführen.
Vor diesem Hintergrund sind meine Fragen: Kann eine Anwendung auf einer EC2-Instanz, die eine bestimmte Rolle erhalten hat, weiterhin einen föderierten Zugriff auf ihre Clients bereitstellen? Wenn dies der Fall ist, sind die oben genannten Richtlinien korrekt, um der Anwendung Zugriff auf diese AWS-Aktionen zu gewähren, nämlich föderierte Token von sts anzufordern und zu liefern, die auf S3-Ressourcen zugreifen können? Wenn nicht, wie sollten sie geändert werden, um einen solchen Zugang zu ermöglichen?