本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在事件级别为特定 API、路径和方法配置授权。
语法
要在您的 AWS Serverless Application Model (AWS SAM) 模板中声明此实体,请使用以下语法。
YAML
ApiKeyRequired: Boolean
AuthorizationScopes: List
Authorizer: String
InvokeRole: String
OverrideApiAuth: Boolean
ResourcePolicy: ResourcePolicyStatement
属性
-
ApiKeyRequired
-
此 API、路径和方法需要 API 密钥。
类型:布尔值
必需:否
AWS CloudFormation 兼容性:此属性为 AWS SAM 独有,没有 AWS CloudFormation 等效属性。
-
适用于此 API、路径和方法的授权范围。
如果您已指定
DefaultAuthorizer
属性,则您指定的范围将覆盖该属性应用的所有范围。类型:列表
必需:否
AWS CloudFormation 兼容性:此属性为 AWS SAM 独有,没有 AWS CloudFormation 等效属性。
-
特定函数的
Authorizer
。如果您为
AWS::Serverless::Api
资源指定了全局授权方,则可以通过将Authorizer
设置为NONE
来覆盖该授权方。有关示例,请参阅覆盖 Amazon API Gateway REST API 的全局授权方。注意
如果您使用
AWS::Serverless::Api
资源的DefinitionBody
属性来描述您的 API,则必须使用OverrideApiAuth
和Authorizer
来覆盖您的全局授权方。请参阅OverrideApiAuth
了解更多信息。有效值:
AWS_IAM
、NONE
、或 AWS SAM 模板中定义的任何授权方的逻辑 ID。类型:字符串
必需:否
AWS CloudFormation 兼容性:此属性为 AWS SAM 独有,没有 AWS CloudFormation 等效属性。
-
InvokeRole
-
指定用于
AWS_IAM
授权的InvokeRole
。类型:字符串
必需:否
默认值:
CALLER_CREDENTIALS
AWS CloudFormation 兼容性:此属性为 AWS SAM 独有,没有 AWS CloudFormation 等效属性。
附加说明:
CALLER_CREDENTIALS
映射到arn:aws:iam::*:user/*
,后者使用调用者凭证来调用端点。 OverrideApiAuth
-
指定为
true
以覆盖AWS::Serverless::Api
资源的全局授权方配置。只有在您指定全局授权方并使用AWS::Serverless::Api
资源的DefinitionBody
属性来描述您的 API 时,才需要此属性。注意
当您将
OverrideApiAuth
指定为true
时,AWS SAM 将使用为ApiKeyRequired
、Authorizer
或ResourcePolicy
提供的任何值覆盖您的全局授权方。因此,使用OverrideApiAuth
时还必须指定其中至少一个属性。有关示例,请参阅 当为 AWS::Serverless::Api 指定 DefinitionBody 时覆盖全局授权方。类型:布尔值
必需:否
AWS CloudFormation 兼容性:此属性为 AWS SAM 独有,没有 AWS CloudFormation 等效属性。
-
ResourcePolicy
-
在 API 上为此路径配置资源策略。
必需:否
AWS CloudFormation 兼容性:此属性为 AWS SAM 独有,没有 AWS 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
要覆盖 AWS 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
当为 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