微調政策的「資源」和「條件」部分 - AWS Lambda

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

微調政策的「資源」和「條件」部分

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

每個IAM原則陳述式都會授與對資源執行動作的權限。當動作不在具名資源上執行動作,或是當您授予對所有資源執行動作的許可,政策中資源的值是萬用字元 (*)。對於許多動作,您可以透過指定資源的 Amazon 資源名稱 (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操作(調用)不同。對於其他動作,動作識別符就是開頭為 lambda: 的操作名稱。

瞭解原則中的「條件」區段

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

例如,lambda:Principal 條件讓您可在函數的資源型政策中,限制使用者可授予叫用存取權限的服務或帳號。下列政策可讓使用者授與 Amazon 簡單通知服務 (AmazonSNS) 主題的權限,以叫用名為的函數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 資源名稱 (ARN) 在政策聲明中引用 Lambda 函數。函數的格式ARN取決於您是引用整個函數(非限定)還是函數版本別名(限定)。

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

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

注意

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

範例 允許調用不合格 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

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動作。