

# 向其他账户授予 Lambda 函数访问权限
<a name="permissions-function-cross-account"></a>

要与其他 AWS 账户 共享函数，请在该函数的[基于资源的策略](access-control-resource-based.md)中添加跨账户权限语句。执行 [add-permission](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/add-permission.html) 命令，并将账户 ID 指定为 `principal`。以下示例向账户 `111122223333` 授权以 `my-function` 别名调用 `prod`。

```
aws lambda add-permission \
  --function-name my-function:prod \
  --statement-id xaccount \
  --action lambda:InvokeFunction \
  --principal 111122223333 \
  --output text
```

您应看到以下输出：

```
{"Sid":"xaccount","Effect":"Allow","Principal":{"AWS":"arn:aws:iam::111122223333:root"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:us-east-1:123456789012:function:my-function"}
```

基于资源的策略向另一个账户授予访问此函数的权限，但不允许该账户中的用户超出其权限。另一个账户中的用户必须具有相应的[用户权限](access-control-identity-based.md)才能使用 Lambda API。

要限制对另一个账户中用户或角色的访问，请将身份的完整 ARN 指定为主体。例如：`arn:aws:iam::123456789012:user/developer`。

[别名](configuration-aliases.md)限制了其他账户可以调用哪个版本。它要求另一个账户在函数 ARN 中包括该别名。

```
aws lambda invoke \
  --function-name arn:aws:lambda:us-east-2:123456789012:function:my-function:prod out
```

您应看到以下输出：

```
{
    "StatusCode": 200,
    "ExecutedVersion": "1"
}
```

然后，函数所有者可以更新别名以指向新版本，而无需调用者更改他们调用函数的方式。这可以确保另一个账户不需要更改其代码即可使用新版本，并且它只具有调用与别名关联的函数版本的权限。

您可以授予对作用于现有函数的大多数 API 操作的跨账户访问权。例如，您可以授予 `lambda:ListAliases` 权限，以允许一个账户获得别名列表，或授予 `lambda:GetFunction` 权限，以让它们下载您的函数代码。分别添加每个权限，或使用 `lambda:*` 授予有关指定函数的所有操作的权限。

要授予其他账户对多个函数的权限，或不对某个函数执行的操作的权限，请使用 [IAM 角色](access-control-identity-based.md)。