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 旋转,我不想旋转。
在使用 AWS 身份/权限时,了解有两种类型的策略很重要:
前者基于身份的策略附加到 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)
在 AWS IAM 用户指南中,有一章介绍AWS JSON 策略元素: 主体。如果你向下滚动页面,有一段关于AWS服务的内容:
服务主体是用于向服务授予权限的标识符。该标识符包括服务名称的长版本,通常采用以下格式:
long_service-name.amazonaws.com
因此,由于您正在处理的是 Lambda 函数,因此主要元素应为:
"Principal": {
"Service": "lambda.amazonaws.com"
},
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2383 次 |
| 最近记录: |