如何将策略分配给 AWS 资源?
How can a policy be assigned to AWS resource?
以下是我对分配策略的理解:
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)?
当您定义无服务器函数时,SAM 自动 创建 运行 该函数所需的 IAM 角色。假设您的函数需要访问几个 DynamoDB 表,您需要为您的函数提供访问这些表的明确权限。您可以通过将 AWS 托管策略添加到 SAM 模板中的无服务器函数资源定义来实现这一点。
参考:
https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
In aws policy definition, Principal entry has value as user, group or role but not AWS resource(like EC2, serverless lambda etc...)
编辑:
我不确定我们在这里谈论 AWS JSON 政策语言中的实体是否相同。策略可以是 (a) identity-based 策略、(b) 信任策略或 (c) resource-based 策略。 [2]
文档指出 "you cannot use the Principal element in an IAM identity-based policy"。 [2]
Lambda 通常使用其他两种类型的策略:针对执行角色的信任策略和针对 cross-account 访问和来自其他 AWS 服务的访问的 resource-based 策略。 [6]
但是,也可以选择将 identity-based 策略与 Lambda 一起使用。 [7]
在这种情况下,您没有指定 Principal,因为 "the principal is implicitly the user that the policy is attached to" [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 安全博客 post 中有一个 step-by-step 示例,它展示了如何手动为 lambda 函数创建执行角色。 [3]
How can a policy be assigned to a AWS resource(lambda)?
该策略已分配给 Lambda 的执行角色。然后该函数在运行时承担角色,并根据分配给执行角色的所有策略被授予权限。 [4]
but I see Policies property as part of the resource definition
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 service")
[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
以下是我对分配策略的理解:
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)?
当您定义无服务器函数时,SAM 自动 创建 运行 该函数所需的 IAM 角色。假设您的函数需要访问几个 DynamoDB 表,您需要为您的函数提供访问这些表的明确权限。您可以通过将 AWS 托管策略添加到 SAM 模板中的无服务器函数资源定义来实现这一点。
参考:
https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst
In aws policy definition, Principal entry has value as user, group or role but not AWS resource(like EC2, serverless lambda etc...)
编辑:
我不确定我们在这里谈论 AWS JSON 政策语言中的实体是否相同。策略可以是 (a) identity-based 策略、(b) 信任策略或 (c) resource-based 策略。 [2]
文档指出 "you cannot use the Principal element in an IAM identity-based policy"。 [2]
Lambda 通常使用其他两种类型的策略:针对执行角色的信任策略和针对 cross-account 访问和来自其他 AWS 服务的访问的 resource-based 策略。 [6]
但是,也可以选择将 identity-based 策略与 Lambda 一起使用。 [7]
在这种情况下,您没有指定 Principal,因为 "the principal is implicitly the user that the policy is attached to" [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 安全博客 post 中有一个 step-by-step 示例,它展示了如何手动为 lambda 函数创建执行角色。 [3]
How can a policy be assigned to a AWS resource(lambda)?
该策略已分配给 Lambda 的执行角色。然后该函数在运行时承担角色,并根据分配给执行角色的所有策略被授予权限。 [4]
but I see Policies property as part of the resource definition
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 service")
[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