【发布时间】:2018-02-07 17:33:02
【问题描述】:
我正在尝试编写一个存储桶策略,拒绝对我的存储桶的所有访问,但我的特定 Lambda 除外。我正在尝试通过将 Lambda 的角色和假定的角色 ARN 列入白名单来实现这一点,如下面的策略所示。
这样做的原因是因为我在企业 AWS 账户下工作,在该账户中联合用户承担“超级用户”或“只读”角色。 “超级用户”角色对 s3 具有完全访问权限。我不管理这些角色的权限,并且我需要阻止承担“超级用户”角色的其他企业用户访问我的存储桶。
我正在尝试使用 AWS:SourceArn 全局条件上下文键获取角色 ARN,但 AWS:SourceArn 似乎没有按我的预期工作:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "WhitelistRegistryAPILambdaRole",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:PutObject",
"s3:DeleteObject",
"s3:DeleteObjectVersion",
"s3:GetObjectVersion",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::{BucketName}",
"arn:aws:s3:::{BucketName}/*"
],
"Condition": {
"ArnLike": {
"aws:SourceArn": "arn:aws:iam::{AccountId}:role/{LambdaRoleName}"
}
}
},
{
"Sid": "WhitelistRegistryAPILambdaAssumedRole",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:PutObject",
"s3:DeleteObject",
"s3:DeleteObjectVersion",
"s3:GetObjectVersion",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::{BucketName}",
"arn:aws:s3:::{BucketName}/*"
],
"Condition": {
"ArnLike": {
"AWS:SourceARN": "arn:aws:sts::{AccountId}:assumed-role/{LambdaRoleName}/{LambdaFunctionName}"
}
}
}
]}
docs 表示 aws:SourceArn 全局条件上下文键不适用于所有服务。我正确地接近这个吗?
【问题讨论】:
-
我不相信
aws:SourceArn在这里适用。这通常在 AWS 资源自行执行操作时使用,例如调用 Lambda 函数的存储桶。在同样的意义上,lambda 函数不是 AWS 资源(Lambda 是,您的函数不是)。此外,这似乎是your previous question 的延续。 -
我明白了。那么如何获取发出请求的 Lambda 角色的 ARN?是的,这与那个问题有关,但我意识到我之前的问题具体是询问 lambda 假定角色的角色会话名称是什么,所以我打开了这个新问题,更广泛地询问了我想要完成的工作。
标签: amazon-web-services amazon-s3 amazon-iam