View a markdown version of this page

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

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

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

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

注意

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

建議使用 put-resource-policy 來定義完整的 JSON 政策。透過 put-resource-policy,您可以新增拒絕陳述式、使用完整範圍的 IAM 條件金鑰,以及管理單一文件中的所有許可。您也可以使用 add-permission 新增簡單使用案例的個別陳述式。

重要

使用 會put-resource-policy取代資源上任何現有的資源型政策。如果資源已具有以 定義的許可add-permission, 會put-resource-policy覆寫它們。get-resource-policy 使用 在進行變更之前擷取現有的政策。

使用完整的 JSON 政策 (建議)

下列範例政策授予 Amazon Simple Notification Service 叫用名為 的函數的許可my-function,但僅適用於特定主題。它也會拒絕來自特定主題的呼叫。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-sns-my-topic", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:sns:us-east-2:123456789012:my-topic" } } }, { "Sid": "deny-sns-other-topic", "Effect": "Deny", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": [ "arn:aws:lambda:us-east-2:123456789012:function:my-function", "arn:aws:lambda:us-east-2:123456789012:function:my-function:*" ], "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:sns:us-east-2:123456789012:restricted-topic" } } } ] }

將政策儲存至名為 的檔案,policy.json並使用 套用put-resource-policy

aws lambda put-resource-policy \ --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function \ --policy file://policy.json

對於 Amazon S3,來源是 ARN 不包含帳戶 ID 的儲存貯體。您可以刪除儲存貯體,而另一個帳戶可以建立同名的儲存貯體。使用 aws:SourceAccount條件索引鍵來確保只有您帳戶中的資源才能叫用 函數:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-s3", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" }, "ArnLike": { "aws:SourceArn": "arn:aws:s3:::my-bucket" } } } ] }

使用 add-permission

對於簡單的使用案例,您可以使用 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"}
注意

如果您在 add-permission之後呼叫 put-resource-policy,新陳述式會附加到現有的 JSON 政策。

若要限制對特定資源的呼叫,請使用 source-arn選項:

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

對於 Amazon S3,請使用 source-account選項搭配您的帳戶 ID:

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