

# 授予用户对 Lambda 函数的访问权限
<a name="permissions-user-function"></a>

使用[基于身份的策略](access-control-identity-based.md)允许用户、用户组或角色对 Lambda 函数执行操作。

**注意**  
对于定义为容器映像的函数，必须在 Amazon Elastic container Registry（Amazon ECR）中配置访问映像的用户权限。有关示例，请参阅 [Amazon ECR 存储库策略](images-create.md#configuration-images-permissions)。

以下显示具有有限范围的权限策略示例。该策略允许用户创建和管理名称前带指定前缀 (`intern-`) 并用指定执行角色配置的 Lambda 函数。

**Example 函数开发策略**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ReadOnlyPermissions",
            "Effect": "Allow",
            "Action": [
                "lambda:GetAccountSettings",
                "lambda:GetEventSourceMapping",
                "lambda:GetFunction",
                "lambda:GetFunctionConfiguration",
                "lambda:GetFunctionCodeSigningConfig",
                "lambda:GetFunctionConcurrency",
                "lambda:ListEventSourceMappings",
                "lambda:ListFunctions",
                "lambda:ListTags",
                "iam:ListRoles"
            ],
            "Resource": "*"
        },
        {
            "Sid": "DevelopFunctions",
            "Effect": "Allow",
            "NotAction": [
                "lambda:AddPermission",
                "lambda:PutFunctionConcurrency"
            ],
            "Resource": "arn:aws:lambda:*:*:function:intern-*"
        },
        {
            "Sid": "DevelopEventSourceMappings",
            "Effect": "Allow",
            "Action": [
                "lambda:DeleteEventSourceMapping",
                "lambda:UpdateEventSourceMapping",
                "lambda:CreateEventSourceMapping"
            ],
            "Resource": "*",
            "Condition": {
                "ArnLike": {
                    "lambda:FunctionArn": "arn:aws:lambda:*:*:function:intern-*"
                }
            }
        },
        {
            "Sid": "PassExecutionRole",
            "Effect": "Allow",
            "Action": [
                "iam:ListRolePolicies",
                "iam:ListAttachedRolePolicies",
                "iam:GetRole",
                "iam:GetRolePolicy",
                "iam:PassRole",
                "iam:SimulatePrincipalPolicy"
            ],
            "Resource": "arn:aws:iam::*:role/intern-lambda-execution-role"
        },
        {
            "Sid": "ViewLogs",
            "Effect": "Allow",
            "Action": [
                "logs:*"
            ],
            "Resource": "arn:aws:logs:*:*:log-group:/aws/lambda/intern-*"
        }
    ]
}
```

策略中的权限基于它们所支持的[资源和条件](lambda-api-permissions-ref.md)组织成语句。
+ `ReadOnlyPermissions` – 当您浏览和查看函数时，Lambda 控制台使用这些权限。它们不支持资源模式或条件。

  ```
              "Action": [
                  "lambda:GetAccountSettings",
                  "lambda:GetEventSourceMapping",
                  "lambda:GetFunction",
                  "lambda:GetFunctionConfiguration",           
                  "lambda:GetFunctionCodeSigningConfig",
                  "lambda:GetFunctionConcurrency",                
                  "lambda:ListEventSourceMappings",
                  "lambda:ListFunctions",      
                  "lambda:ListTags",
                  "iam:ListRoles"
              ],
              "Resource": "*"
  ```
+ `DevelopFunctions`：使用任何对前缀为 `intern-` 的函数执行的 Lambda 操作，但 `AddPermission` 和 `PutFunctionConcurrency` 除外。`AddPermission` 修改函数上[基于资源的策略](access-control-resource-based.md)并可能影响安全性。`PutFunctionConcurrency` 保留函数的扩展容量，并可以从其他函数取得容量。

  ```
              "NotAction": [
                  "lambda:AddPermission",
                  "lambda:PutFunctionConcurrency"
              ],
              "Resource": "arn:aws:lambda:*:*:function:intern-*"
  ```
+ `DevelopEventSourceMappings` – 管理前缀为 `intern-` 的函数的事件源映射。虽然这些操作在事件源映射上运行，但您可以通过附带*条件*的函数限制它们。

  ```
              "Action": [
                  "lambda:DeleteEventSourceMapping",
                  "lambda:UpdateEventSourceMapping",
                  "lambda:CreateEventSourceMapping"
              ],
              "Resource": "*",
              "Condition": {
                  "StringLike": {
                      "lambda:FunctionArn": "arn:aws:lambda:*:*:function:intern-*"
                  }
              }
  ```
+ `PassExecutionRole` – 查看并仅传递名为 `intern-lambda-execution-role` 的角色，该角色必须由具有 IAM 权限的用户创建和管理。当您为函数分配执行角色时，使用 `PassRole`。

  ```
              "Action": [
                  "iam:ListRolePolicies",
                  "iam:ListAttachedRolePolicies",
                  "iam:GetRole",
                  "iam:GetRolePolicy",
                  "iam:PassRole",
                  "iam:SimulatePrincipalPolicy"
              ],
              "Resource": "arn:aws:iam::*:role/intern-lambda-execution-role"
  ```
+ `ViewLogs` – 使用 CloudWatch Logs 查看前缀为 `intern-` 的函数的日志。

  ```
              "Action": [
                  "logs:*"
              ],
              "Resource": "arn:aws:logs:*:*:log-group:/aws/lambda/intern-*"
  ```

该策略允许用户开始使用 Lambda，而不会将其他用户的资源置于风险之下。它不允许用户配置能被触发或调用其他 AWS 服务的函数，这需要更广的 IAM 权限。它也不包含对于不支持有限范围策略的服务（如 CloudWatch 和 X-Ray）的权限。将只读策略用于这些服务以便让用户能够访问指标和跟踪数据。

当您为您的函数配置触发器时，需要有权使用调用您的函数的 AWS 服务。例如，要配置 Amazon S3 触发器，您需要权限来使用管理存储桶通知的 Amazon S3 操作。其中很多权限包含在 [AWSLambda\$1FullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSLambda_FullAccess.html) 托管策略中。