Sar*_*s P 6 c# amazon-s3 amazon-ec2 amazon-web-services amazon-iam
我有一个运行服务器的Amazon EC2实例,需要为其客户端(Windows 7/8,iPad等)提供对S3资源的联合访问.到目前为止,我创建了以下内容:
通常,客户端将请求访问以获取或将对象放入S3,从不删除.因此,在放置文件的情况下,不是让客户端将文件上传到服务器然后从服务器将其转发到S3,我想为客户端提供临时访问凭证,以便将文件直接放入适当的S3存储桶中.
以下是EC2实例IAM角色的样子:
{
"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": "*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
STS Token Issuer IAM用户策略是:
{
"Statement": [
{
"Action": [
"sts:GetFederationToken"
],
"Effect": "Allow",
"Resource": [
"arn:aws:sts:::federated-user/*"
]
},
{
"Action": [
"s3:*"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::devtestbucket"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
在我的服务器端代码中,我创建了STS客户端,联合令牌请求并按如下方式进行GetFederationToken调用:
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);
Run Code Online (Sandbox Code Playgroud)
我不能分享Generate*函数的实现,但我知道那些工作.
这是奇怪的事情.如果我使用绑定到用户的IAM用户凭据,其访问策略与上面显示的EC2实例角色完全相同,则一切都按预期工作,客户端可以执行所有预期的S3操作.
因此,在所有这些背景下,我的问题是:EC2实例上已被赋予特定角色的应用程序是否仍可提供对其客户端的联合访问?如果是,上述策略是否正确授予应用程序对这些AWS操作的访问权限,即请求和提供可以访问S3资源的sts联合令牌?如果没有,应该如何修改它们以允许这种访问?
为了让这个场景发挥作用,我必须将策略的 STS GetFederationToken 部分分离到它自己的策略中。因此,必须有 2 项策略,一项用于 STS,一项用于其他 AWS 服务:
STS政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"sts:GetFederationToken"
],
"Sid": "Stmt1382573256000",
"Resource": [
"*"
],
"Effect": "Allow"
}
]
}
Run Code Online (Sandbox Code Playgroud)
S3访问策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:List*"
],
"Sid": "Stmt1382573312476",
"Resource": [
"arn:aws:s3:::devtestbucket"
],
"Effect": "Allow"
},
{
"Action": [
"s3:*"
],
"Sid": "Stmt1382573312000",
"Resource": [
"arn:aws:s3:::devtestbucket/*"
],
"Effect": "Allow"
}
]
}
Run Code Online (Sandbox Code Playgroud)
不确定为什么会出现这种情况。如果有人能解释为什么需要两项政策而不是一项政策背后的原因,那就太好了。
希望这对某人有帮助。
| 归档时间: |
|
| 查看次数: |
1438 次 |
| 最近记录: |