Remotion LabRemotion Lab
Lambda不使用 IAM 使用者的 Lambda 設定

不使用 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_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_SESSION_TOKEN

這種方式的優點在於無需長期憑證存在,也不需要追蹤憑證輪換,大幅提升安全性。

前置條件

  • 已部署一個在 AWS 上執行的 Lambda 函式(可參考 CDK 範例
  • Lambda 函式已被指派一個執行角色(execution role)
  • 具備必要使用者權限的使用者政策

設定步驟

第一步:建立角色政策

  1. 前往 AWS 管理主控台的 IAM 政策 頁面
  2. 點擊「Create policy」
  3. 點擊「JSON」
  4. 貼入以下完整的角色權限 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*"
      ]
    }
  ]
}
  1. 點擊「Next」,標籤頁面無需填寫,繼續點擊「Next」
  2. 將政策命名為 remotion-executionrole-policy,其他欄位保持預設即可

第二步:將政策指派給 Lambda 執行角色

  1. 前往 AWS 管理主控台,進入 Lambda 服務(請切換至你的函式所在區域)
  2. 選擇「Functions」
  3. 選取你的 Lambda 函式
  4. 點擊「Configuration」標籤
  5. 點擊「Permissions」標籤
  6. 點擊「Execution role」下方的角色名稱連結
  7. 跳轉後點擊「Permissions」標籤
  8. 點擊「Add permissions」→「Attach policy」
  9. 搜尋並選取 remotion-executionrole-policy
  10. 點擊「Attach policies」按鈕完成指派

運作原理

完成政策指派後,Lambda 執行角色便獲得了執行 renderMediaOnLambda() API 所需的權限。

當 Lambda 函式被執行時,AWS 會自動注入環境變數:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_SESSION_TOKEN

這些是臨時憑證,具備渲染影片所需的 AWS 資源存取權限。提升的權限來自於指派至執行角色的政策,因此整個流程無需任何長期憑證。

相關資源