View a markdown version of this page

微調政策的資源和條件區段 - AWS Lambda

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

微調政策的資源和條件區段

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

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

根據資源類型,關於如何限制動作範圍的一般設計如下:

  • 函數 - 在函數上執行的動作可依據函數、版本或別名 ARN 限定於特定函數。

  • 事件來源映射 - 動作可依據 ARN 限定於特定事件來源映射資源。事件來源映射一律與函數相關聯。也可以使用 lambda:FunctionArn 條件,依據相關的函數限定動作。

  • 層 - 與 Layer 使用和許可相關的動作作用於層的某個版本。

  • 程式碼簽署組態 - 動作可依據 ARN 限定於特定程式碼簽署組態資源。

  • 標籤 - 使用標準標籤條件。如需詳細資訊,請參閱使用 Lambda 中的屬性型存取控制

若要依照資源限制許可,請依照 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:function:my-function:1/durable-execution/execution-name/execution-id

  • 事件來源映射 - 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

  • 程式碼簽署組態 – arn:aws:lambda:us-west-2:123456789012:code-signing-config:my-csc

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

範例呼叫函數政策
JSON
{ "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 的函數。

範例管理函數政策許可
JSON
{ "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 呼叫時,使用者可以指定版本或別名,方法是在 GetFunction FunctionName 參數中傳遞版本 ARN 或別名 ARN,或者在 GetFunction Qualifier 參數中設定值。Lambda 會比較 IAM 政策中的資源元素與 API 呼叫中傳遞的 FunctionNameQualifier,從而作出授權決策。如果不符,Lambda 會拒絕該請求。

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

注意

不能使用萬用字元 (*) 以讓帳戶 ID 相符。如需有關已接受語法的詳細資訊,請參閱 IAM User Guide 中的 IAM JSON policy reference

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

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

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

在政策的資源區段中參考持久性執行

持久性執行是函數版本的子資源。如需耐用的執行 ARN 結構和政策指導,請參閱 耐用函數的 IAM 許可

您只能使用合格的函數名稱或 ARN 叫用耐久函數,因此允許叫用持久函數的政策必須符合合格的 ARNs。如需詳細資訊,請參閱合格 ARNs需求

如果您的政策參考不合格的函數 ARN,Lambda 會拒絕對持久執行動作的請求。不合格的 ARN 永遠不會符合持久的執行 ARN。

範例不授予持久執行存取權的政策
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:GetDurableExecution", "Resource": "arn:aws:lambda:us-west-2:123456789012:function:myDurableFunction" } ] }

如果您的政策使用 參考函數 ARN:*,Lambda 會接受每個版本的持久執行請求。

範例允許存取任何版本的耐久執行
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:GetDurableExecution", "Resource": "arn:aws:lambda:us-west-2:123456789012:function:myDurableFunction:*" } ] }

如果您的政策參考具有 的函數 ARN:1/durable-execution/*,Lambda 僅接受對版本 1 持久執行的請求。

範例允許存取特定版本的耐久執行
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:GetDurableExecution", "Resource": "arn:aws:lambda:us-west-2:123456789012:function:myDurableFunction:1/durable-execution/*" } ] }
別名模式永遠不會符合持久ARNs

別名名稱永遠不會出現在持久ARNs 中。這類資源模式my-function:prod/durable-execution/*永遠不會符合任何持久性執行,因為 Lambda 會在函數執行時將別名解析為版本編號。

Lambda 會針對請求中的函數 ARN 授權lambda:ListDurableExecutionsByFunction動作,而不是持久的執行 ARN。下列規則適用於 ARN 比對:

  • 授予不合格函數 ARN 的政策只會比對使用不合格函數名稱的請求。

  • 授予合格 ARN 的政策只會比對使用合格函數名稱的請求。

範例允許使用任一名稱形式列出持久性執行
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:ListDurableExecutionsByFunction", "Resource": [ "arn:aws:lambda:us-west-2:123456789012:function:myDurableFunction", "arn:aws:lambda:us-west-2:123456789012:function:myDurableFunction:*" ] } ] }

支援的 IAM 動作和函數行為

動作定義了可透過 IAM 政策許可的項目。若要查看 Lambda 中支援的動作清單,請參閱《服務授權參考》中的 Actions, resources, and condition keys for AWS Lambda。在大多數情況下,當 IAM 動作許可某個 Lambda API 動作時,該 IAM 動作的名稱會與 Lambda API 動作的名稱相同,但以下情況除外:

API 動作 IAM 動作
Invoke lambda:InvokeFunction

GetLayerVersion

GetLayerVersionByArn

lambda:GetLayerVersion

除了 Service Authorization Reference 中定義的資源和條件之外,Lambda 還針對特定動作支援下列資源和條件。其中許多與政策資源區段中的參考函數有關。您可依據函數、版本或別名 ARN,將在函數上操作的動作限於特定函數,如下表所述。

Action 資源 條件

AddPermission

RemovePermission

調用:(許可:lambda:InvokeFunction)

函式版本

函式別名

N/A

ListDurableExecutionsByFunction

函式版本

N/A

UpdateFunctionConfiguration

N/A

lambda:CodeSigningConfigArn

CreateFunctionUrlConfig

DeleteFunctionUrlConfig

GetFunctionUrlConfig

UpdateFunctionUrlConfig

函式別名

N/A