授予 Lambda 函數對 AWS 服務 的存取權 - AWS Lambda

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

授予 Lambda 函數對 AWS 服務 的存取權

當您使用 AWS 服務來叫用函式時,您會在以資源為基礎之政策的陳述式中授予許可。您可以將陳述式套用至整個函數,或將陳述式限制在單一版本或別名。

注意

當您透過Lambda 主控台將觸發新增至函數時,主控台會更新函數的以資源為基礎的政策來允許服務進行叫用。若要將許可授予無法在 Lambda 主控台中使用的其他帳戶或服務,您可使用 AWS CLI。

使用 add-permission 命令新增陳述式。最簡單的以資源為基礎的政策陳述式可讓服務叫用函式。下列命令可授予 Amazon Simple Notification Service 調用名為 my-function 之函數的許可。

aws lambda add-permission \ --function-name my-function \ --action lambda:InvokeFunction \ --statement-id sns \ --principal sns.amazonaws.com \ --output text

您應該會看到下列輸出:

{"Sid":"sns","Effect":"Allow","Principal":{"Service":"sns.amazonaws.com"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:us-east-2:123456789012:function:my-function"}

這可讓 Amazon SNS 呼叫函數的 Invoke API 動作,但不會限制會觸發調用的 Amazon SNS 主題。若要確保您的函式只會被特定的資源叫用,請使用 source-arn 選項來指定資源的 Amazon Resource Name (ARN)。下列命令僅允許 Amazon SNS 為名為 my-topic 的主題訂閱叫用函數。

aws lambda add-permission \ --function-name my-function \ --action lambda:InvokeFunction \ --statement-id sns-my-topic \ --principal sns.amazonaws.com \ --source-arn arn:aws:sns:us-east-2:123456789012:my-topic

有些服務可在不同的帳戶中叫用函式。如果您指定的來源 ARN 中有帳戶 ID,您可以放心。然而,對於 Amazon S3,來源是一種儲存貯體,其 ARN 沒有帳戶 ID。您可以刪除該儲存貯體,且其他帳戶可使用相同的名稱建立儲存貯體。透過您的帳戶 ID 使用 source-account 選項來確保只有帳戶中的資源可叫用該函式。

aws lambda add-permission \ --function-name my-function \ --action lambda:InvokeFunction \ --statement-id s3-account \ --principal s3.amazonaws.com \ --source-arn arn:aws:s3:::amzn-s3-demo-bucket \ --source-account 123456789012