如何將以資源為基礎的政策與 AWS Lambda 結合使用來授予對 AWS 服務的許可?
上次更新日期:2021 年 9 月 27 日
我想要對 AWS Lambda 使用以資源為基礎的政策來授予對 AWS 服務的許可?
簡短描述
您可以搭配使用 AWS Command Line Interface (AWS CLI) 和 Lambda,來使用以資源為基礎的政策授與 AWS 服務的許可。如需詳細資訊,請參閱將資源型政策用於 AWS Lambda。
解決方案
下列範例新增 EventBridge 的權限,並驗證 Lambda 函數是否會叫用資源型政策。
備註:
- 如果您在執行 AWS CLI 命令時收到錯誤,請確保您使用的是最新版 AWS CLI。
- 將您的事件和您的函數取代為您的變數,以及將您的區域取代為 AWS 區域。
確認 Lambda 函數沒有已設定的資源政策
某些 AWS 服務 (例如 EventBridge) 會為 Lambda 函數建立資源型政策。使用類似下列內容的 AWS CLI 命令 get-policy,確認資源型政策沒有 EventBridge 的權限:
aws lambda get-policy --region your-region --function-name your-function
An error occurred (ResourceNotFoundException) when calling the GetPolicy operation: The resource you requested does not exist.
此錯誤會確認 Lambda 函數並未設定資源型政策。
新增 EventBridge 的許可
執行 AWS CLI 命令 add-permission 以叫用類似下列內容的 Lambda 函數:
aws lambda add-permission --region your-region --function-name your-function --statement-id "your-event-permission" --action "lambda:InvokeFunction" --principal "events.amazonaws.com" --source-arn "arn:aws:events:your-region:xxxxxxxxxxxxx:rule/your-event"
{
"Statement": "{\"Sid\":\"your-event-permission\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"events.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:your-region:xxxxxxxxxxxxx:function:your-function\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:events:your-region:xxxxxxxxxxxxx:rule/your-event\"}}}"
}
確認 Lambda 函數以資源為基礎政策的權限
再次執行 AWS CLI 命令 get-policy,如下所示:
aws lambda get-policy --region your-region --function-name your-function
{
"Version": "2012-10-17",
"Id": "default",
"Statement": [
{
"Sid": "your-event-permission",
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:your-region:xxxxxxxxxxxxx:function:your-function",
"Condition": {
"ArnLike": {
"AWS:SourceArn": "arn:aws:events:your-region:xxxxxxxxxxxxx:rule/your-event"
}
}
}
]
}
(選擇性) 移除 Lambda 函數資源型政策的權限
如果您不再需要 AWS 服務來觸發 Lambda 函數,則可以執行類似下列內容的 AWS CLI 命令 remove-permission:
aws lambda remove-permission --region your-region --function-name your-function --statement-id "your-event-permission"
注意: Lambda 函數以資源為基礎的政策配額是 20 KB。如需詳細資訊,請參閱 Lambda 配額。