ApiFunctionAuth - AWS Serverless Application Model

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

ApiFunctionAuth

在事件層級設定特定 API、路徑和方法的授權。

語法

若要在 AWS Serverless Application Model (AWS SAM) 範本中宣告此實體,請使用下列語法。

屬性

ApiKeyRequired

需要此 API、路徑和方法的 API 金鑰。

類型:布林值

必要:否

AWS CloudFormation 兼容性:此屬性是唯一的, AWS SAM 並且沒有相 AWS CloudFormation 等的屬性。

AuthorizationScopes

要套用至此 API、路徑和方法的授權範圍。

如果您已指定屬性套用的任何範圍,您指定的範圍將覆寫該DefaultAuthorizer屬性套用的任何範圍。

類型:列表

必要:否

AWS CloudFormation 兼容性:此屬性是唯一的, AWS SAM 並且沒有相 AWS CloudFormation 等的屬性。

Authorizer

Authorizer於特定功能。

如果您為AWS::Serverless::Api資源指定了全域授權者,則可以將設Authorizer定為覆寫授權者。NONE如需範例,請參閱覆寫 Amazon API Gateway REST API 的全球授權者

注意

如果您使用AWS::Serverless::Api資源的DefinitionBody屬性來描述您的 API,則必須使OverrideApiAuth用 for 覆寫您Authorizer的全域授權者。如需詳細資訊,請參閱OverrideApiAuth

有效值AWS_IAMNONE、或 AWS SAM 範本中定義之任何授權者的邏輯 ID。

類型:字串

必要:否

AWS CloudFormation 兼容性:此屬性是唯一的, AWS SAM 並且沒有相 AWS CloudFormation 等的屬性。

InvokeRole

指定用InvokeRoleAWS_IAM授權的。

類型:字串

必要:否

預設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 會以、或ResourcePolicy提供的任何值覆寫您的ApiKeyRequired全域授權者。Authorizer因此,使用時也必須至少指定其中一個屬性OverrideApiAuth。如需範例,請參閱 指定 DefinitionBody 為 AWS::Serverless::Api 時覆寫全域授權者

類型:布林值

必要:否

AWS CloudFormation 兼容性:此屬性是唯一的, AWS SAM 並且沒有相 AWS CloudFormation 等的屬性。

ResourcePolicy

在 API 上設定此路徑的資源策略。

類型:ResourcePolicyStatement

必要:否

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 函數的預設授權者,您可以指定AuthorizerNONE。以下是範例:

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

指定 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