Lambda 動作的資源和條件 - AWS Lambda

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

Lambda 動作的資源和條件

您可以在 AWS Identity and Access Management (IAM) 政策中指定資源和條件,來限制使用者許可的範圍。政策中的每個動作都支援資源和條件類型組合,組合內容取決於動作的行為。

每個 IAM 政策陳述式授予在資源上執行動作的許可。當動作不在具名資源上執行動作,或是當您授予對所有資源執行動作的許可,政策中資源的值是萬用字元 (*)。對於許多動作,您可以透過指定資源的 Amazon Resource Name (ARN) 或符合多個資源的 ARN 模式,來限制使用者可以修改的資源。

若要依照資源限制許可,請依照 ARN 指定資源。

Lambda 資源 ARN 格式
  • 函數 - arn:aws:lambda:us-west-2:123456789012:function:my-function

  • 函數版本 - arn:aws:lambda:us-west-2:123456789012:function:my-function:1

  • 函數別名 - arn:aws:lambda:us-west-2:123456789012:function:my-function:TEST

  • 事件來源映射 - arn:aws:lambda:us-west-2:123456789012:event-source-mapping:fa123456-14a1-4fd2-9fec-83de64ad683de6d47

  • 層 - arn:aws:lambda:us-west-2:123456789012:layer:my-layer

  • 層版本 - arn:aws:lambda:us-west-2:123456789012:layer:my-layer:1

例如,下列原則允許中的使用者叫 AWS 帳戶 123456789012用美國西部 (奧勒岡) AWS 區域my-function中名為的函數。

範例 呼叫函數政策
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Invoke", "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-2:123456789012:function:my-function" } ] }

此為特例,其中動作識別符 (lambda:InvokeFunction) 與 API 操作 (Invoke) 不同。對於其他動作,動作識別符就是開頭為 lambda: 的操作名稱。

政策條件

條件是選用的政策元素,會套用額外的邏輯來判斷是否允許動作。除了所有動作皆支援的一般條件之外,Lambda 還會定義您可用來限制某些動作之其他參數值的條件類型。

例如,lambda:Principal 條件讓您可在函數的資源型政策中,限制使用者可授予叫用存取權限的服務或帳號。以下政策會讓使用者可將許可授予 Amazon Simple Notification Service (Amazon SNS) 主題以叫用名為 test 的函數。

範例 管理函數政策許可
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ManageFunctionPolicy", "Effect": "Allow", "Action": [ "lambda:AddPermission", "lambda:RemovePermission" ], "Resource": "arn:aws:lambda:us-west-2:123456789012:function:test:*", "Condition": { "StringEquals": { "lambda:Principal": "sns.amazonaws.com" } } } ] }

條件要求委託人是 Amazon SNS 而不是其他服務或帳戶。資源模式要求函數名稱是 test 並包含版本編號或別名。例如 test:v1

如需 Lambda 和其他 AWS 服務的資源和條件的詳細資訊,請參閱服務授權參考中服 AWS 務的動作、資源和條件金鑰

函數資源名稱

您可以使用 Amazon Resource Name (ARN) 來參考政策陳述式中的 Lambda 函數。函數 ARN 的格式取決於您是參考整個函數 (不合格)、函數版本別名 (合格)。

進行 Lambda API 呼叫時,使用者可以在參數中傳遞版本 ARN 或別名 ARN,或在GetFunctionFunctionName參數中設定值,來指定版本或別名。GetFunctionQualifierLambda 會比較 IAM 政策中的資源元素與 API 呼叫中傳遞的 FunctionNameQualifier,從而作出授權決策。如果不符,Lambda 會拒絕該請求。

無論是允許還是拒絕對函數執行操作,都必須在政策陳述式中使用正確的函數 ARN 類型,才能達到預期的結果。例如,如果您的政策引用了不合格的 ARN,Lambda 會接受參考不合格 ARN 的請求,但拒絕參考合格 ARN 的請求。

注意

不能使用萬用字元 (*) 以讓帳戶 ID 相符。如需有關已接受語法的詳細資訊,請參閱《IAM 使用者指南》中的 IAM JSON 政策參考

範例 允許叫用不合格的 ARN
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-west-2:123456789012:function:myFunction" } ] }

如果您的政策引用了特定合格的 ARN,Lambda 會接受參考該 ARN 的請求,但拒絕參考不合格 ARN 或不同的合格 ARN 的請求,例如 myFunction:2

範例 允許叫用特定的合格 ARN
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-west-2:123456789012:function:myFunction:1" } ] }

如果您的政策使用 :* 參考任何合格的 ARN,Lambda 會接受任何合格的 ARN,但拒絕參考不合格 ARN 的請求。

範例 允許叫用任何合格的 ARN
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-west-2:123456789012:function:myFunction:*" } ] }

如果您的政策使用 * 參考任何 ARN,Lambda 會接受任何合格或不合格的 ARN。

範例 允許叫用任何合格或不合格的 ARN
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-west-2:123456789012:function:myFunction*" } ] }

函數動作

您可依據函數、版本或別名 ARN,將在函數上操作的動作限於特定函數,如下表所述。會將不支援資源限制的動作授予給所有資源 (*)。

函數動作
動作 資源 條件

AddPermission

RemovePermission

函數

函式版本

函式別名

lambda:Principal

aws:ResourceTag/${TagKey}

lambda:FunctionUrlAuthType

Invoke

許可:lambda:InvokeFunction

函數

函式版本

函式別名

aws:ResourceTag/${TagKey}

lambda:EventSourceToken

CreateFunction

函數

lambda:CodeSigningConfigArn

lambda:Layer

lambda:VpcIds

lambda:SubnetIds

lambda:SecurityGroupIds

aws:ResourceTag/${TagKey}

aws:RequestTag/${TagKey}

aws:TagKeys

UpdateFunctionConfiguration

函數

lambda:CodeSigningConfigArn

lambda:Layer

lambda:VpcIds

lambda:SubnetIds

lambda:SecurityGroupIds

aws:ResourceTag/${TagKey}

CreateAlias

DeleteAlias

DeleteFunction

DeleteFunctionCodeSigningConfig

DeleteFunctionConcurrency

GetAlias

GetFunction

GetFunctionCodeSigningConfig

GetFunctionConcurrency

GetFunctionConfiguration

GetPolicy

ListProvisionedConcurrencyConfigs

ListAliases

ListTags

ListVersionsByFunction

PublishVersion

PutFunctionCodeSigningConfig

PutFunctionConcurrency

UpdateAlias

UpdateFunctionCode

函數

aws:ResourceTag/${TagKey}

CreateFunctionUrlConfig

DeleteFunctionUrlConfig

GetFunctionUrlConfig

UpdateFunctionUrlConfig

函數

函式別名

lambda:FunctionUrlAuthType

lambda:FunctionArn

aws:ResourceTag/${TagKey}

ListFunctionUrlConfigs

函數

lambda:FunctionUrlAuthType

DeleteFunctionEventInvokeConfig

GetFunctionEventInvokeConfig

ListFunctionEventInvokeConfigs

PutFunctionEventInvokeConfig

UpdateFunctionEventInvokeConfig

函數

aws:ResourceTag/${TagKey}

DeleteProvisionedConcurrencyConfig

GetProvisionedConcurrencyConfig

PutProvisionedConcurrencyConfig

函式別名

函式版本

aws:ResourceTag/${TagKey}

GetAccountSettings

ListFunctions

*

TagResource

函數

aws:ResourceTag/${TagKey}

aws:RequestTag/${TagKey}

aws:TagKeys

UntagResource

函數

aws:ResourceTag/${TagKey}

aws:TagKeys

事件來源映射動作

對於事件來源映射,您可將 Delete 和 Update 許可限制至特定事件來源。lambda:FunctionArn 條件可讓您限制使用者可以設定事件來源叫用哪些函數。

對於這些動作,資源是事件來源映射,所以 Lambda 提供一個條件,可讓您根據事件來源映射叫用的函數來限制許可。

事件來源映射動作
動作 資源 條件

DeleteEventSourceMapping

UpdateEventSourceMapping

事件來源映射

lambda:FunctionArn

CreateEventSourceMapping

GetEventSourceMapping

*

lambda:FunctionArn

ListEventSourceMappings

*

圖層動作

圖層動作可讓您限制使用者可以管理或搭配函數使用的圖層。與圖層使用和許可相關的動作在圖層版本上執行作業,而 PublishLayerVersion 在圖層名稱上執行作業。您可以搭配使用萬用字元,來限制使用者可依照名稱使用的 layer。

注意

GetLayerVersion動作也涵蓋GetLayerVersionByArn。Lambda 不支援 GetLayerVersionByArn 作為 IAM 動作。