本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
ApiFunctionAuth
在事件層級設定特定 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
用 for 覆寫您Authorizer
的全域授權者。如需詳細資訊,請參閱OverrideApiAuth
。有效值:
AWS_IAM
NONE
、或 AWS SAM 範本中定義之任何授權者的邏輯 ID。類型:字串
必要:否
AWS CloudFormation 兼容性:此屬性是唯一的, AWS SAM 並且沒有相 AWS CloudFormation 等的屬性。
-
InvokeRole
-
指定用
InvokeRole
於AWS_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 上設定此路徑的資源策略。
必要:否
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
指定 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