不使用 IAM 使用者的 Lambda 設定
如何使用 IAM 角色而非長期 IAM 使用者憑證來執行 Remotion Lambda 渲染,提升安全性並符合企業規範。
不使用 IAM 使用者的 Lambda 設定
背景說明
依照權限頁面的說明,Remotion Lambda 的預設使用方式是建立一個 Remotion 使用者並指派對應的政策。這些政策授予 Lambda 使用 renderMediaOnLambda() 渲染影片的權限。
然而,這類憑證屬於長期憑證(long-term credentials),存在以下問題:
- 安全性較低,可能遭到洩漏或濫用
- 部分企業的資安政策禁止使用長期憑證
- 在 Lambda、EC2 等 AWS 運算服務上執行時,無法使用長期憑證
AWS IAM 角色的解決方案
AWS 提供 IAM 角色(IAM Roles) 機制來解決上述問題。將角色指派給 AWS 服務後,AWS 會根據附加的政策授予相應的提升權限,讓角色可以執行如將檔案上傳至 S3 儲存桶等操作。
角色會取得臨時 AWS 憑證,包含:
AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN
這種方式的優點在於無需長期憑證存在,也不需要追蹤憑證輪換,大幅提升安全性。
前置條件
設定步驟
第一步:建立角色政策
- 前往 AWS 管理主控台的 IAM 政策 頁面
- 點擊「Create policy」
- 點擊「JSON」
- 貼入以下完整的角色權限 JSON 政策範本:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "HandleQuotas",
"Effect": "Allow",
"Action": [
"servicequotas:GetServiceQuota",
"servicequotas:GetAWSDefaultServiceQuota",
"servicequotas:RequestServiceQuotaIncrease",
"servicequotas:ListRequestedServiceQuotaChangeHistoryByQuota"
],
"Resource": ["*"]
},
{
"Sid": "PermissionValidation",
"Effect": "Allow",
"Action": ["iam:SimulatePrincipalPolicy"],
"Resource": ["*"]
},
{
"Sid": "LambdaInvokation",
"Effect": "Allow",
"Action": ["iam:PassRole"],
"Resource": ["arn:aws:iam::*:role/remotion-lambda-role"]
},
{
"Sid": "Storage",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:DeleteObject",
"s3:PutObjectAcl",
"s3:PutObject",
"s3:CreateBucket",
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:PutBucketAcl",
"s3:DeleteBucket",
"s3:PutBucketOwnershipControls",
"s3:PutBucketPublicAccessBlock",
"s3:PutBucketPolicy",
"s3:PutLifecycleConfiguration"
],
"Resource": ["arn:aws:s3:::remotionlambda-*"]
},
{
"Sid": "BucketListing",
"Effect": "Allow",
"Action": ["s3:ListAllMyBuckets"],
"Resource": ["*"]
},
{
"Sid": "FunctionListing",
"Effect": "Allow",
"Action": ["lambda:ListFunctions", "lambda:GetFunction"],
"Resource": ["*"]
},
{
"Sid": "FunctionManagement",
"Effect": "Allow",
"Action": [
"lambda:InvokeAsync",
"lambda:InvokeFunction",
"lambda:CreateFunction",
"lambda:DeleteFunction",
"lambda:PutFunctionEventInvokeConfig",
"lambda:PutRuntimeManagementConfig",
"lambda:TagResource"
],
"Resource": ["arn:aws:lambda:*:*:function:remotion-render-*"]
},
{
"Sid": "LogsRetention",
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:PutRetentionPolicy"
],
"Resource": ["arn:aws:logs:*:*:log-group:/aws/lambda/remotion-render-*"]
},
{
"Sid": "FetchBinaries",
"Effect": "Allow",
"Action": ["lambda:GetLayerVersion"],
"Resource": [
"arn:aws:lambda:*:678892195805:layer:remotion-binaries-*",
"arn:aws:lambda:*:580247275435:layer:LambdaInsightsExtension*"
]
}
]
}- 點擊「Next」,標籤頁面無需填寫,繼續點擊「Next」
- 將政策命名為
remotion-executionrole-policy,其他欄位保持預設即可
第二步:將政策指派給 Lambda 執行角色
- 前往 AWS 管理主控台,進入 Lambda 服務(請切換至你的函式所在區域)
- 選擇「Functions」
- 選取你的 Lambda 函式
- 點擊「Configuration」標籤
- 點擊「Permissions」標籤
- 點擊「Execution role」下方的角色名稱連結
- 跳轉後點擊「Permissions」標籤
- 點擊「Add permissions」→「Attach policy」
- 搜尋並選取
remotion-executionrole-policy - 點擊「Attach policies」按鈕完成指派
運作原理
完成政策指派後,Lambda 執行角色便獲得了執行 renderMediaOnLambda() API 所需的權限。
當 Lambda 函式被執行時,AWS 會自動注入環境變數:
AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN
這些是臨時憑證,具備渲染影片所需的 AWS 資源存取權限。提升的權限來自於指派至執行角色的政策,因此整個流程無需任何長期憑證。