我有一个非常特定的AWS Lambda函数,我想制定“ AWS Secret Manager委托人”权限策略,以便它可以检索机密。
我想只将此权限授予我的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"
}
]
}
这是不允许的。 用什么方式写这个?
我看到的一切都是Lambda旋转的,我不想旋转。
答案 0 :(得分:1)
在使用AWS身份/权限时,了解两种策略非常重要:
以前的基于身份的策略附加到IAM用户,组或角色。这些策略使您可以指定身份(用户,组或角色)可以做什么。这些策略 not 没有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"
}
]
}
据我所知,您不能使用AWS控制台将此策略应用于机密,但可以使用awscli或SDK。我使用了awscli,如下所示:
aws secretsmanager put-resource-policy \
--secret-id mysecret \
--resource-policy file://mysecret.json
答案 1 :(得分:0)
在《 AWS IAM用户指南》中,有一章涉及AWS JSON Policy Elements: Principal。如果您向下滚动页面,则会看到有关 AWS服务的段落:
服务主体是用于向服务授予权限的标识符。标识符包括服务名称的长版本,通常采用以下格式:
long_service-name.amazonaws.com
因此,由于它是您正在处理的Lambda函数,主体元素应显示为:
"Principal": {
"Service": "lambda.amazonaws.com"
},