在权限策略中将 AWS Lambda 设置为委托人

Kyl*_*-St 4 amazon-web-services amazon-iam aws-lambda

我有一个非常具体的 AWS Lambda 函数,我想将其设为 AWS Secret Manager 的 Principal 权限策略,以便它可以检索秘密。

我只想专门将此权限授予我的 Lambda。我创建了一个角色并将该角色分配给策略。

但是,我希望能够明确地写出 Principal (为了学习和第一眼知道它的作用)。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Lambda Get Secret File",
            "Effect": "Allow",
            "Action": "secretsmanager:GetSecretValue",
            "Principal": {
                "AWS": "arn:aws:iam::XXXXXXXXXX:role/My-Lambda"    
            },
            "Resource": "arn:aws:secretsmanager:us-west-2:XXXXXX:secret:My-Secret"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

这是不允许的。写这个的方法是什么?

我看到的一切都是为了让 Lambda 旋转,我不想旋转。

jar*_*mod 6

在使用 AWS 身份/权限时,了解有两种类型的策略很重要:

  1. 基于身份的策略(您将这些附加到身份)
  2. 基于资源的策略(您将这些附加到资源)

前者基于身份的策略附加到 IAM 用户、组或角色。这些策略允许您指定该身份(用户、组或角色)可以做什么。这些政策都不会Principal,因为主要的政策适用于隐含呈现证书的用户或进程元素。

后者是基于资源的策略,附加到资源上。这些策略指定谁可以访问给定资源以及他们可以做什么。最常见的是,您会在 S3 存储桶中看到这些,但它们也可以与其他资源类型相关联。这些政策必须有一个Principal元素。

在您的情况下,您应该为 Secrets Manager 密钥配置基于资源的策略,控制谁可以访问该密钥。

我能够将以下策略添加到 Secrets Manager 密钥中(我将此策略保存在名为 的文件中mysecret.json

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "secureme",
      "Effect": "Allow",
      "Action": "secretsmanager:GetSecretValue",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/mylambdarole"
      },
      "Resource": "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret-xyz"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

据我所知,您不能使用 AWS 控制台将此策略应用于密钥,但您可以使用 awscli 或开发工具包。我使用了awscli,如下:

aws secretsmanager put-resource-policy \
    --secret-id mysecret \
    --resource-policy file://mysecret.json
Run Code Online (Sandbox Code Playgroud)


mat*_*sev 3

在 AWS IAM 用户指南中,有一章介绍AWS JSON 策略元素: 主体。如果你向下滚动页面,有一段关于AWS服务的内容:

服务主体是用于向服务授予权限的标识符。该标识符包括服务名称的长版本,通常采用以下格式:

long_service-name.amazonaws.com

因此,由于您正在处理的是 Lambda 函数,因此主要元素应为:

"Principal": {
  "Service": "lambda.amazonaws.com"
},
Run Code Online (Sandbox Code Playgroud)

  • 但这不是特定的 Lambda 服务,而是所有 Lambda 服务,不是吗? (2认同)
  • 服务链接角色[通常不适用于 AWS Lambda](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。 (2认同)