

# AddPermission
<a name="API_AddPermission"></a>

授予 AWS 服务、AWS 账户 或 AWS 组织使用函数的权限。您可以在函数级别应用策略，也可以指定限定符以限制对单个版本或别名的访问。如果您使用限定符，则调用程序必须使用该版本或别名的完整 Amazon Resource Name (ARN) 来调用该函数。注意：Lambda 不支持将策略添加到版本 \$1LATEST。

要向另一个账户授予权限，请将账户 ID 指定为 `Principal`。要向在 AWS Organizations 中定义的组织授予权限，请将组织 ID 指定为 `PrincipalOrgID`。对于 AWS 服务，主体是服务定义的域样式标识符，例如 `s3.amazonaws.com` 或 `sns.amazonaws.com`。对于 AWS 服务，您还可以将关联资源的 ARN 指定为 `SourceArn`。如果在未指定源的情况下向服务主体授予权限，则其他账户可能会在其账户中配置资源以调用 Lambda 函数。

此操作将一条语句添加到该函数的基于资源的权限策略。有关函数策略的更多信息，请参阅[将基于资源的策略用于 Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html)。

## 请求语法
<a name="API_AddPermission_RequestSyntax"></a>

```
POST /2015-03-31/functions/FunctionName/policy?Qualifier=Qualifier HTTP/1.1
Content-type: application/json

{
   "Action": "string",
   "EventSourceToken": "string",
   "FunctionUrlAuthType": "string",
   "Principal": "string",
   "PrincipalOrgID": "string",
   "RevisionId": "string",
   "SourceAccount": "string",
   "SourceArn": "string",
   "StatementId": "string"
}
```

## URI 请求参数
<a name="API_AddPermission_RequestParameters"></a>

请求使用以下 URI 参数。

 ** [FunctionName](#API_AddPermission_RequestSyntax) **   <a name="lambda-AddPermission-request-FunctionName"></a>
Lambda 函数的名称、版本或别名。  

**名称格式**
+  **函数名称** – `my-function`（仅限名称）、`my-function:v1`（具有别名）。
+  **函数 ARN** – `arn:aws:lambda:us-west-2:123456789012:function:my-function`。
+  **部分 ARN** – `123456789012:function:my-function`。
您可以将一个版本号或别名附加到任何格式。长度约束仅适用于完整 ARN。如果您仅指定函数名称，它的长度限制为 64 个字符。  
长度限制：最小长度为 1。长度上限为 140。  
模式：`(arn:(aws[a-zA-Z-]*)?:lambda:)?([a-z]{2}(-gov)?-[a-z]+-\d{1}:)?(\d{12}:)?(function:)?([a-zA-Z0-9-_]+)(:(\$LATEST|[a-zA-Z0-9-_]+))?`  
必需：是

 ** [Qualifier](#API_AddPermission_RequestSyntax) **   <a name="lambda-AddPermission-request-Qualifier"></a>
指定版本或别名以向函数的发布版本添加权限。  
长度限制：最小长度为 1。长度上限为 128。  
模式：`(|[a-zA-Z0-9$_-]+)`

## 请求正文
<a name="API_AddPermission_RequestBody"></a>

请求接受采用 JSON 格式的以下数据。

 ** [Action](#API_AddPermission_RequestSyntax) **   <a name="lambda-AddPermission-request-Action"></a>
主体可以对函数执行的操作。例如，`lambda:InvokeFunction` 或 `lambda:GetFunction`。  
类型：字符串  
模式：`(lambda:[*]|lambda:[a-zA-Z]+|[*])`  
必需：是

 ** [EventSourceToken](#API_AddPermission_RequestSyntax) **   <a name="lambda-AddPermission-request-EventSourceToken"></a>
对于 Alexa Smart Home 函数，为必须由调用程序提供的令牌。  
类型：字符串  
长度约束：最小长度为 0。最大长度为 256。  
模式：`[a-zA-Z0-9._\-]+`  
必需：否

 ** [FunctionUrlAuthType](#API_AddPermission_RequestSyntax) **   <a name="lambda-AddPermission-request-FunctionUrlAuthType"></a>
函数 URL 使用的身份验证类型。如果想将访问权限限制为仅经过身份验证的用户，请设置为 `AWS_IAM`。如果想绕过 IAM 身份验证以创建公有端点，请设置为 `NONE`。有关更多信息，请参阅 [Lambda 函数 URL 的安全性和身份验证模型](https://docs.aws.amazon.com/lambda/latest/dg/urls-auth.html)。  
类型：字符串  
有效值：`NONE | AWS_IAM`  
必需：否

 ** [Principal](#API_AddPermission_RequestSyntax) **   <a name="lambda-AddPermission-request-Principal"></a>
调用函数的 AWS 服务 或 AWS 账户。如果您指定一个服务，请使用 `SourceArn` 或 `SourceAccount` 来限制哪些人可以通过该服务调用该函数。  
类型：字符串  
模式：`[^\s]+`  
必需：是

 ** [PrincipalOrgID](#API_AddPermission_RequestSyntax) **   <a name="lambda-AddPermission-request-PrincipalOrgID"></a>
AWS Organizations 中的组织标识符。使用此函数向此组织下的所有 AWS 账户 授予权限。  
类型：字符串  
长度限制：最小长度为 12。最大长度为 34。  
模式：`^o-[a-z0-9]{10,32}$`  
必需：否

 ** [RevisionId](#API_AddPermission_RequestSyntax) **   <a name="lambda-AddPermission-request-RevisionId"></a>
仅当修订版 ID 与指定的 ID 匹配时才更新策略。使用此选项以避免修改自上次读取后已发生更改的策略。  
类型：字符串  
必需：否

 ** [SourceAccount](#API_AddPermission_RequestSyntax) **   <a name="lambda-AddPermission-request-SourceAccount"></a>
对于 AWS 服务，为拥有此资源的 AWS 账户 ID。将其与 `SourceArn` 一起使用以确保资源归指定的账户所有。Amazon S3 存储桶的拥有者可以将其删除，并由其他账户重新创建。  
类型：字符串  
长度约束：最大长度为 12。  
模式：`\d{12}`  
必需：否

 ** [SourceArn](#API_AddPermission_RequestSyntax) **   <a name="lambda-AddPermission-request-SourceArn"></a>
对于 AWS 服务，为调用该函数的 AWS 资源的 ARN。例如，Amazon S3 存储桶或 Amazon SNS 主题。  
请注意，Lambda 使用 `StringLike` 运算符配置该比较。  
类型：字符串  
模式：`arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\-])+:([a-z]{2}(-gov)?-[a-z]+-\d{1})?:(\d{12})?:(.*)`  
必需：否

 ** [StatementId](#API_AddPermission_RequestSyntax) **   <a name="lambda-AddPermission-request-StatementId"></a>
将语句与同一策略中的其他语句区分开来的语句标识符。  
类型：字符串  
长度约束：最小长度为 1。最大长度为 100。  
模式：`([a-zA-Z0-9-_]+)`  
必需：是

## 响应语法
<a name="API_AddPermission_ResponseSyntax"></a>

```
HTTP/1.1 201
Content-type: application/json

{
   "Statement": "string"
}
```

## 响应元素
<a name="API_AddPermission_ResponseElements"></a>

如果此操作成功，则该服务将会发送回 HTTP 201 响应。

服务以 JSON 格式返回的以下数据。

 ** [Statement](#API_AddPermission_ResponseSyntax) **   <a name="lambda-AddPermission-response-Statement"></a>
添加到函数策略的权限语句。  
类型：字符串

## 错误
<a name="API_AddPermission_Errors"></a>

有关所有操作返回的常见错误的信息，请参阅 [常见错误](CommonErrors.md)。

 ** InvalidParameterValueException **   
请求中的参数之一无效。  
HTTP 状态代码：400

 ** PolicyLengthExceededException **   
资源的权限策略太大。有关更多信息，请参阅 [Lambda 限额](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html)。  
HTTP 状态代码：400

 ** PreconditionFailedException **   
提供的 RevisionId 与 Lambda 函数或别名的最新 RevisionId 不匹配。调用 `GetFunction` 或 `GetAlias` API 操作来检索您的资源的最新 RevisionId。  
HTTP 状态代码：412

 ** ResourceConflictException **   
资源已存在，或者其他操作正在进行中。  
HTTP 状态代码：409

 ** ResourceNotFoundException **   
请求中指定的资源不存在。  
HTTP 状态代码：404

 ** ServiceException **   
AWS Lambda 服务遇到了内部错误。  
HTTP 状态代码：500

 ** TooManyRequestsException **   
超出了请求吞吐量限制。有关更多信息，请参阅 [Lambda 限额](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html#api-requests)。  
HTTP 状态代码：429

## 另请参阅
<a name="API_AddPermission_SeeAlso"></a>

有关在特定语言的 AWS SDK 中使用此 API 的更多信息，请参阅以下内容：
+  [AWS 命令行界面](https://docs.aws.amazon.com/goto/aws-cli/lambda-2015-03-31/AddPermission) 
+  [适用于 .NET 的 AWS SDK](https://docs.aws.amazon.com/goto/DotNetSDKV3/lambda-2015-03-31/AddPermission) 
+  [适用于 C\$1\$1 的 AWS SDK](https://docs.aws.amazon.com/goto/SdkForCpp/lambda-2015-03-31/AddPermission) 
+  [适用于 Go 的 AWS SDK](https://docs.aws.amazon.com/goto/SdkForGoV1/lambda-2015-03-31/AddPermission) 
+  [适用于 Java V2 的 AWS SDK](https://docs.aws.amazon.com/goto/SdkForJavaV2/lambda-2015-03-31/AddPermission) 
+  [AWS 适用于 JavaScript 的开发工具包 V3](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/lambda-2015-03-31/AddPermission) 
+  [适用于 PHP V3 的 AWS SDK](https://docs.aws.amazon.com/goto/SdkForPHPV3/lambda-2015-03-31/AddPermission) 
+  [适用于 Python 的 AWS SDK](https://docs.aws.amazon.com/goto/boto3/lambda-2015-03-31/AddPermission) 
+  [适用于 Ruby V3 的 AWS SDK](https://docs.aws.amazon.com/goto/SdkForRubyV3/lambda-2015-03-31/AddPermission) 