ApiFunctionAuth - Amazon Serverless Application Model
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

ApiFunctionAuth

在事件级别为特定 API、路径和方法配置授权。

语法

要在您的 Amazon Serverless Application Model (Amazon SAM) 模板中声明此实体,请使用以下语法。

属性

ApiKeyRequired

此 API、路径和方法需要 API 密钥。

类型:布尔值

必需:否

Amazon CloudFormation 兼容性:此属性为 Amazon SAM 独有,没有 Amazon CloudFormation 等效属性。

AuthorizationScopes

适用于此 API、路径和方法的授权范围。

如果您已指定 DefaultAuthorizer 属性,则您指定的范围将覆盖该属性应用的所有范围。

类型:列表

必需:否

Amazon CloudFormation 兼容性:此属性为 Amazon SAM 独有,没有 Amazon CloudFormation 等效属性。

Authorizer

特定函数的Authorizer

如果您为 AWS::Serverless::Api 资源指定了全局授权方,则可以通过将 Authorizer 设置为 NONE 来覆盖该授权方。有关示例,请参阅覆盖 Amazon API Gateway REST API 的全局授权方

注意

如果您使用 AWS::Serverless::Api 资源的 DefinitionBody 属性来描述您的 API,则必须使用 OverrideApiAuthAuthorizer 来覆盖您的全局授权方。请参阅OverrideApiAuth了解更多信息。

有效值AWS_IAMNONE、或 Amazon SAM 模板中定义的任何授权方的逻辑 ID。

类型:字符串

必需:否

Amazon CloudFormation 兼容性:此属性为 Amazon SAM 独有,没有 Amazon CloudFormation 等效属性。

InvokeRole

指定用于 AWS_IAM 授权的 InvokeRole

类型:字符串

必需:否

默认值CALLER_CREDENTIALS

Amazon CloudFormation 兼容性:此属性为 Amazon SAM 独有,没有 Amazon CloudFormation 等效属性。

附加说明CALLER_CREDENTIALS 映射到 arn:aws:iam::*:user/*,后者使用调用者凭证来调用端点。

OverrideApiAuth

指定为 true 以覆盖 AWS::Serverless::Api 资源的全局授权方配置。只有在您指定全局授权方并使用 AWS::Serverless::Api 资源的 DefinitionBody 属性来描述您的 API 时,才需要此属性。

注意

当您将 OverrideApiAuth 指定为 true 时,Amazon SAM 将使用为 ApiKeyRequiredAuthorizerResourcePolicy 提供的任何值覆盖您的全局授权方。因此,使用 OverrideApiAuth 时还必须指定其中至少一个属性。有关示例,请参阅 指定 for 时 DefinitionBody 覆盖全局授权 AWS::Serverless::Api 方

类型:布尔值

必需:否

Amazon CloudFormation 兼容性:此属性为 Amazon SAM 独有,没有 Amazon CloudFormation 等效属性。

ResourcePolicy

在 API 上为此路径配置资源策略。

类型:ResourcePolicyStatement

必需:否

Amazon CloudFormation 兼容性:此属性为 Amazon SAM 独有,没有 Amazon CloudFormation 等效属性。

示例

函数身份验证

以下示例指定了函数级别的授权。

YAML

Auth: ApiKeyRequired: true Authorizer: NONE

覆盖 Amazon API Gateway REST API 的全局授权方

您可以为 AWS::Serverless::Api 资源指定全局授权方。以下是配置全局默认授权方的示例:

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: MyApiWithLambdaRequestAuth: Type: AWS::Serverless::Api Properties: ... Auth: Authorizers: MyLambdaRequestAuth: FunctionArn: !GetAtt MyAuthFn.Arn DefaultAuthorizer: MyLambdaRequestAuth

要覆盖 Amazon Lambda 函数的默认授权方,可以将 Authorizer 指定为 NONE。以下是 示例:

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: ... MyFn: Type: AWS::Serverless::Function Properties: ... Events: LambdaRequest: Type: Api Properties: RestApiId: !Ref MyApiWithLambdaRequestAuth Method: GET Auth: Authorizer: NONE

指定 for 时 DefinitionBody 覆盖全局授权 AWS::Serverless::Api 方

当使用 DefinitionBody 属性描述 AWS::Serverless::Api 资源时,之前的覆盖方法不起作用。以下是对 AWS::Serverless::Api 资源使用 DefinitionBody 属性的示例:

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: MyApiWithLambdaRequestAuth: Type: AWS::Serverless::Api Properties: ... DefinitionBody: swagger: 2.0 ... paths: /lambda-request: ... Auth: Authorizers: MyLambdaRequestAuth: FunctionArn: !GetAtt MyAuthFn.Arn DefaultAuthorizer: MyLambdaRequestAuth

要覆盖全局授权方,请使用 OverrideApiAuth 属性。以下是使用 OverrideApiAuth 通过为 Authorizer 提供的值覆盖全局授权方的示例:

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: MyApiWithLambdaRequestAuth: Type: AWS::Serverless::Api Properties: ... DefinitionBody: swagger: 2-0 ... paths: /lambda-request: ... Auth: Authorizers: MyLambdaRequestAuth: FunctionArn: !GetAtt MyAuthFn.Arn DefaultAuthorizer: MyLambdaRequestAuth MyAuthFn: Type: AWS::Serverless::Function ... MyFn: Type: AWS::Serverless::Function Properties: ... Events: LambdaRequest: Type: Api Properties: RestApiId: !Ref MyApiWithLambdaRequestAuth Method: GET Auth: Authorizer: NONE OverrideApiAuth: true Path: /lambda-token