【问题标题】:Get ARN of Lambda role in bucket policy在存储桶策略中获取 Lambda 角色的 ARN
【发布时间】: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


【解决方案1】:

你是在倒退。

除非您将存储桶公开,否则任何人都无法访问其中的内容。

为 Lambda 创建一个角色,授予其访问存储桶的权限。将角色分配给 Lambda。

现在只有 Lambda 可以访问存储桶。如果其他服务或用户需要访问存储桶,请创建授予该用户或服务访问权限的 IAM 策略或角色。

【讨论】:

  • 用这种方法的动机更新了我的问题。
猜你喜欢
  • 2018-06-08
  • 2016-12-23
  • 2020-10-17
  • 1970-01-01
  • 2019-09-29
  • 2021-08-13
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
相关资源
最近更新 更多