以下是我对分配政策的理解:
可以将AWS策略分配给用户,组,角色,但不能分配 AWS资源。
在AWS策略定义中,Principal
条目具有作为用户,组或角色的值,但没有AWS资源(如EC2,无服务器lambda等)的值
可以通过角色将策略分配给资源
我们正在使用SAM模板创建lambda资源(AWS),如下所示:
Resources:
MyFunction:
Type: 'AWS::Serverless::Function'
Properties:
CodeUri: src/
Handler: index.handler
Runtime: nodejs4.3
Policies:
- SQSPollerPolicy:
QueueName: name
- LambdaInvokePolicy:
FunctionName: name
但是我看到Policies
属性是资源定义的一部分
如何将策略分配给AWS资源(lambda)?
答案 0 :(得分:1)
定义无服务器功能时,SAM自动 创建运行该功能所需的IAM角色。假设您的函数需要访问几个DynamoDB表,您需要为函数赋予显式权限才能访问这些表。您可以通过将SAM托管策略添加到SAM模板中的无服务器功能资源定义中来实现。
参考:
https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
答案 1 :(得分:1)
在AWS策略定义中,主体条目具有作为用户,组或角色的值,但不具有AWS资源(如EC2,无服务器lambda等...)的值
修改:
我不确定我们是否在这里讨论AWS JSON策略语言中的同一实体。策略可以是(a)基于身份的策略,(b)信任策略或(c)基于资源的策略。 [2]
文档指出“您不能在基于IAM身份的策略中使用Principal元素”。 [2]
Lambda通常使用其他两种策略:用于执行角色的信任策略和用于跨账户访问以及从其他AWS服务进行访问的基于资源的策略。 [6]
但是,也可以选择在Lambda中使用基于身份的策略。 [7]
在这种情况下,您无需指定 Principal ,因为“该主体隐含了该策略所附加的用户” [2]。
示例:
在AWS IAM概念中,角色的 Principal 也可以是AWS服务-它们被称为 service-roles [1]。 [2]
要将Lambda设置为主体,请将以下内容设置为 AssumeRolePolicyDocument (信任策略):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
AWS安全博客文章中有一个分步示例,其中显示了如何手动为lambda函数创建执行角色。 [3]
如何将策略分配给AWS资源(lambda)?
该策略已分配给Lambda的执行角色。然后,该函数在运行时担当角色,并根据分配给执行角色的所有策略被授予权限。 [4]
但是我将策略属性视为资源定义的一部分
SAM能够为您创建lambda的执行角色,并自动为其分配策略。 SAM开发人员提供了所谓的 AWS SAM策略模板 [5],您可以在SAM模板中引用它们。通过使用这些策略模板,可以指示SAM为您创建策略并将其自动附加到执行角色。
[1] https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-role
[2] https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html(“ AWS服务”部分)
[3] https://aws.amazon.com/de/blogs/security/how-to-create-an-aws-iam-policy-to-grant-aws-lambda-access-to-an-amazon-dynamodb-table/
[4] https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html
[5] https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-policy-templates.html
[6] https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html
[7] https://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html