View a markdown version of this page

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

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

ApiFunctionAuth

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

语法

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

Properties

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,则必须使用 OverrideApiAuth 和 Authorizer 来覆盖您的全局授权方。请参阅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 将使用为、或ResourcePolicy提供的任何值覆盖你的全局授权ApiKeyRequired者Authorizer。因此,使用 OverrideApiAuth 时还必须指定其中至少一个属性。有关示例,请参阅当指定了 for AWS::Serverless:: Api 时 DefinitionBody 覆盖全局授权方。

类型:布尔值

必需:否

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

ResourcePolicy

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

类型:ResourcePolicyStatement

必需:否

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

示例

Function-Auth

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

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 AWS::Serverless:: Api 时 DefinitionBody 覆盖全局授权方

当使用 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