You need to enable JavaScript to run this app.
文档中心
函数服务

函数服务

复制全文
下载 pdf
授权
IAM 授权最佳实践
复制全文
下载 pdf
IAM 授权最佳实践
本文介绍函数服务 veFaaS 针对 IAM 用户的授权最佳实践。​
前提条件​
已创建 IAM 用户。详细操作,请参见 用户管理。​
场景一:使用全局范围的预设策略并授权​
场景介绍​
veFaaS 提供如下几种系统预设策略,可直接为 IAM 用户授权。​
​
策略​
说明​
VeFaaSFullAccess​
函数服务全部管理权限。​
VeFaaSReadOnlyAccess​
函数服务只读访问权限。​
​
操作步骤​
  1. 使用火山引擎账号或具有相关权限的 IAM 用户登录 IAM 控制台。​
  1. 在左侧导航栏选择 身份管理 > 用户。​
  1. 在用户列表中,找到需要设置权限的用户名,单击对应 操作 列下的 管理。​
  1. 在 用户详情 页面,选择 权限 > 全局权限 页签,单击 添加权限。​
  1. 在 添加权限 面板的搜索框中输入 函数服务,搜索函数服务相关的系统预设策略。​
  1. 根据实际需求选择目标策略,单击 确定,为 IAM 用户添加 veFaaS 相关的权限策略。​
  • ​​​
场景二:创建项目范围使用的自定义权限并授权​
场景介绍​
veFaaS 中部分操作(Action)和资源(Resource)是按照项目(Project)划分的,可满足项目粒度的权限控制需求。若需要将该类操作和资源授权给 IAM 用户,需要以项目权限的形式授予。​
说明​
支持按项目授权的 Action 包括:​
  • CreateFunction​
  • UpdateFunction​
操作步骤​
  1. 使用火山引擎账号或具有相关权限的 IAM 用户登录 IAM 控制台。​
  1. 新建自定义策略。​
  1. 在左侧导航栏选择 策略管理,在策略管理页面,单击 新建自定义策略。​
  1. 在新建自定义策略页面,输入策略名称和策略内容,并单击 提交。​
  • 假设策略名称为vefaas-create-project,JSON 内容示例如下。您可按需自行增删具体的 Action 或 Resource 。​
  • ​
    {​
    "Statement": [​
    {​
    "Effect": "Allow",​
    "Action": [​
    "vefaas:CreateFunction",​
    "vefaas:UpdateFunction"​
    ],​
    "Resource": [​
    "*"​
    ]​
    }​
    ]​
    }​
    ​
  1. 为已创建的 vefaas-create-project 策略添加项目授权。​
  1. 单击 vefaas-create-project 策略名称,进入当前策略详情页面。​
  1. 在 授权 > 项目授权 页签,单击 添加授权。​
  1. 选择要授权的用户和作用的项目。​
  • ​​​
  1. 单击 确定,完成项目授权。​
  • ​​​
  1. 为无法按照项目划分的 Action 和 Resource 新建自定义策略,并以全局权限的形式授权给目标 IAM 用户。​
说明​
veFaaS 中有一部分 Action 和 Resource 是无法按照项目划分,因此为 IAM 用户授予项目权限的同时,还需要将无法按照项目划分的 Action 和 Resource,以全局权限的形式授予给该 IAM 用户。否则该 IAM 用户可能无法正常操作和使用 veFaaS 资源。​
  1. 新建自定义策略。​
  • 假设名称为vefaas-read-global。策略的 JSON 内容示例如下所示,请按需自行增删具体的 Action 或 Resource。​
  • ​
    {​
    "Statement": [​
    {​
    "Effect": "Allow",​
    "Action": [​
    "vefaas:Release",​
    "vefaas:GetCodeUploadAddress",​
    "vefaas:CodeUploadCallback",​
    "vefaas:TestInvoke",​
    "vefaas:DeleteFunction",​
    "vefaas:AbortRelease",​
    "vefaas:UpdateRelease",​
    "vefaas:GetAvailabilityZones",​
    "vefaas:GetFunction",​
    "vefaas:GetFunctionInstanceLogs",​
    "vefaas:GetReleaseStatus",​
    "vefaas:GetRevision",​
    "vefaas:GetStorageVolumeStatus",​
    "vefaas:ListFunctionInstances",​
    "vefaas:ListReleaseRecords",​
    "vefaas:ListRuntimes",​
    "vefaas:ListFunctions",​
    "vefaas:ListRevisions",​
    "vefaas:ListTemplates",​
    "vefaas:DoesFunctionNameExist",​
    "vefaas:GetDependencyInstallTaskStatus"​
    ],​
    "Resource": [​
    "*"​
    ]​
    },​
    {​
    "Effect": "Allow",​
    "Action": [​
    "apig:GetGateway",​
    "apig:ListGateways",​
    "apig:ListGatewayServices",​
    "apig:GetGatewayService",​
    "apig:DeleteGatewayService",​
    "apig:CreateUpstream",​
    "apig:CheckUpstreamSpecExist",​
    "apig:GetUpstream",​
    "apig:DeleteUpstream",​
    "apig:CreateRoute",​
    "apig:UpdateRoute",​
    "apig:ListRoutes",​
    "apig:DeleteRoute"​
    ],​
    "Resource": [​
    "*"​
    ]​
    },​
    {​
    "Effect": "Allow",​
    "Action": [​
    "vpc:DescribeVpcs",​
    "vpc:DescribeVpcAttributes",​
    "vpc:DescribeSubnets",​
    "vpc:DescribeSubnetAttributes",​
    "vpc:DescribeSecurityGroups",​
    "vpc:DescribeSecurityGroupAttributes"​
    ],​
    "Resource": [​
    "*"​
    ]​
    },​
    {​
    "Effect": "Allow",​
    "Action": [​
    "tls:DescribeProject",​
    "tls:DescribeProjects",​
    "tls:DescribeTopic",​
    "tls:DescribeTopics",​
    "tls:DescribeIndex",​
    "tls:DescribeIndexConfig",​
    "tls:DescribeHistogram",​
    "tls:SearchLogs",​
    "tls:Statistics"​
    ],​
    "Resource": [​
    "*"​
    ]​
    },​
    {​
    "Effect": "Allow",​
    "Action": [​
    "cr:ListRegistries",​
    "cr:ListRepositories",​
    "cr:ListNamespaces",​
    "cr:ListTags"​
    ],​
    "Resource": [​
    "*"​
    ]​
    },​
    {​
    "Effect": "Allow",​
    "Action": [​
    "kafka:DescribeKafkaInstances",​
    "kafka:DescribeInstanceDetail",​
    "kafka:DescribeTopics",​
    "kafka:DescribeUsers"​
    ],​
    "Resource": [​
    "*"​
    ]​
    },​
    {​
    "Effect": "Allow",​
    "Action": [​
    "rocketmq:ListInstances",​
    "rocketmq:ListTopics",​
    "rocketmq:ListGroups",​
    "rocketmq:GetInstance"​
    ],​
    "Resource": [​
    "*"​
    ]​
    },​
    {​
    "Effect": "Allow",​
    "Action": [​
    "tos:PutBucketNotification",​
    "tos:ListBuckets",​
    "tos:ListBucket",​
    "tos:HeadBucket",​
    "tos:GetObject"​
    ],​
    "Resource": [​
    "*"​
    ]​
    },​
    {​
    "Effect": "Allow",​
    "Action": [​
    "apmplus_server:GetMetricsData",​
    "apmplus_server:Draw"​
    ],​
    "Resource": [​
    "*"​
    ]​
    },​
    {​
    "Effect": "Allow",​
    "Action": [​
    "bill_volcano_engine:ListResourcePackage"​
    ],​
    "Resource": [​
    "*"​
    ]​
    },​
    {​
    "Effect": "Allow",​
    "Action": [​
    "FileNAS:DescribeFileSystems"​
    ],​
    "Resource": [​
    "*"​
    ]​
    }​
    ]​
    }​
    ​
  1. 为已创建的vefaas-read-global 策略添加全局授权。​
  • 在 vefaas-read-global 策略策略详情页面,选择 授权 > 全局授权 页签,单击 添加授权。 选择要授权的用户,并单击 确定,完成全局授权。​
  • ​​​
结果验证​
IAM 用户在非 default 项目下试图创建函数,会提示没有权限。​
​​​
场景三:创建基于标签的自定义权限并授​
场景介绍​
veFaaS 中部分操作(Action)和资源(Resource)接入了标签(Tag),可满足标签粒度的权限控制需求。​
说明​
支持管理标签的 Action 包括:​
  • CreateFunction​
  • UpdateFunction​
操作步骤​
  1. 使用火山引擎账号或具有相关权限的 IAM 用户登录 IAM 控制台。​
  1. 新建自定义策略。​
  1. 在左侧导航栏选择 策略管理,在策略管理页面,单击 新建自定义策略。​
  1. 在新建自定义策略页面,输入策略名称和策略内容,并单击 提交。​
  • 假设名称为 vefaas-function-operation-by-tag,表明 CreateFunction 和 UpdateFunction 只允许操作 team:ai-prompt 标签,其余标签会被拒绝。​
  • ​
    {​
    "Statement": [​
    {​
    "Effect": "Allow",​
    "Action": [​
    "vefaas:CreateFunction",​
    "vefaas:UpdateFunction"​
    ],​
    "Resource": [​
    "*"​
    ],​
    "Condition": {​
    "StringEquals": {​
    "volc:RequestTag/team": [​
    "ai-prompt"​
    ]​
    }​
    }​
    }​
    ]​
    }​
    ​
  1. 为已创建的 vefaas-function-operation-by-tag 策略添加全局授权。​
  1. 单击 vefaas-function-operation-by-tag 策略名称,进入当前策略详情页面。​
  1. 在 授权 > 全局授权 页签,单击 添加授权。​
  1. 选择要授权的用户。​
  • ​​​
  1. 单击 确定,完成项目授权。​
  • ​​​
  1. 为无法按照标签授权的 Action 和 Resource 新建自定义策略,并以全局权限的形式授权给目标 IAM 用户。​
说明​
veFaaS 中有一部分 Action 和 Resource 是无法按照标签划分,因此为 IAM 用户授予标签权限的同时,还需要将无法按照标签划分的 Action 和 Resource,以全局权限的形式授予给该 IAM 用户。否则该 IAM 用户可能无法正常操作和使用 veFaaS 资源。​
  1. 新建自定义策略。​
  • 假设名称为vefaas-other-generate-operation。策略的 JSON 内容示例如下所示,请按需自行增删具体的 Action 或 Resource 。​
  • ​
    {​
    "Statement": [​
    {​
    "Effect": "Allow",​
    "Action": [​
    "vefaas:Release",​
    "vefaas:TestInvoke",​
    "vefaas:DeleteFunction",​
    "vefaas:AbortRelease",​
    "vefaas:UpdateRelease",​
    "vefaas:GetAvailabilityZones",​
    "vefaas:GetFunctionInstanceLogs",​
    "vefaas:GetReleaseStatus",​
    "vefaas:GetRevision",​
    "vefaas:GetStorageVolumeStatus",​
    "vefaas:ListFunctionInstances",​
    "vefaas:ListReleaseRecords",​
    "vefaas:ListRuntimes",​
    "vefaas:ListRevisions",​
    "vefaas:ListTemplates",​
    "vefaas:DoesFunctionNameExist",​
    "vefaas:GetTemplateDetail",​
    "vefaas:ListFunctions",​
    "vefaas:GetDependencyInstallTaskStatus"​
    ],​
    "Resource": [​
    "*"​
    ]​
    },​
    {​
    "Effect": "Allow",​
    "Action": [​
    "apig:GetGateway",​
    "apig:ListGateways",​
    "apig:ListGatewayServices",​
    "apig:GetGatewayService",​
    "apig:DeleteGatewayService",​
    "apig:CreateUpstream",​
    "apig:CheckUpstreamSpecExist",​
    "apig:GetUpstream",​
    "apig:DeleteUpstream",​
    "apig:CreateRoute",​
    "apig:UpdateRoute",​
    "apig:ListRoutes",​
    "apig:DeleteRoute"​
    ],​
    "Resource": [​
    "*"​
    ]​
    },​
    {​
    "Effect": "Allow",​
    "Action": [​
    "vpc:DescribeVpcs",​
    "vpc:DescribeVpcAttributes",​
    "vpc:DescribeSubnets",​
    "vpc:DescribeSubnetAttributes",​
    "vpc:DescribeSecurityGroups",​
    "vpc:DescribeSecurityGroupAttributes"​
    ],​
    "Resource": [​
    "*"​
    ]​
    },​
    {​
    "Effect": "Allow",​
    "Action": [​
    "tls:DescribeProject",​
    "tls:DescribeProjects",​
    "tls:DescribeTopic",​
    "tls:DescribeTopics",​
    "tls:DescribeIndex",​
    "tls:DescribeIndexConfig",​
    "tls:DescribeHistogram",​
    "tls:SearchLogs",​
    "tls:Statistics"​
    ],​
    "Resource": [​
    "*"​
    ]​
    },​
    {​
    "Effect": "Allow",​
    "Action": [​
    "cr:ListRegistries",​
    "cr:ListRepositories",​
    "cr:ListNamespaces",​
    "cr:ListTags"​
    ],​
    "Resource": [​
    "*"​
    ]​
    },​
    {​
    "Effect": "Allow",​
    "Action": [​
    "kafka:DescribeKafkaInstances",​
    "kafka:DescribeInstanceDetail",​
    "kafka:DescribeTopics",​
    "kafka:DescribeUsers"​
    ],​
    "Resource": [​
    "*"​
    ]​
    },​
    {​
    "Effect": "Allow",​
    "Action": [​
    "rocketmq:ListInstances",​
    "rocketmq:ListTopics",​
    "rocketmq:ListGroups",​
    "rocketmq:GetInstance"​
    ],​
    "Resource": [​
    "*"​
    ]​
    },​
    {​
    "Effect": "Allow",​
    "Action": [​
    "tos:PutBucketNotification",​
    "tos:ListBuckets",​
    "tos:ListBucket",​
    "tos:HeadBucket",​
    "tos:GetObject"​
    ],​
    "Resource": [​
    "*"​
    ]​
    },​
    {​
    "Effect": "Allow",​
    "Action": [​
    "apmplus_server:GetMetricsData",​
    "apmplus_server:Draw"​
    ],​
    "Resource": [​
    "*"​
    ]​
    },​
    {​
    "Effect": "Allow",​
    "Action": [​
    "bill_volcano_engine:ListResourcePackage"​
    ],​
    "Resource": [​
    "*"​
    ]​
    },​
    {​
    "Effect": "Allow",​
    "Action": [​
    "FileNAS:DescribeFileSystems"​
    ],​
    "Resource": [​
    "*"​
    ]​
    }​
    ]​
    }​
    ​
  1. 为已创建的vefaas-other-generate-operation策略添加全局授权。​
  • 在 vefaas-other-generate-operation 策略策略详情页面,选择 授权 > 全局授权 页签,单击 添加授权。 选择要授权的用户,并单击 确定,完成全局授权。​
  • ​​​
结果验证​
  • IAM 用户创建标签为team:ai-prompt或包含该标签的函数,成功创建。​
  • ​​​
  • IAM 用户创建函数不包含标签或者不包括team:ai-prompt的标签,提示没有权限。​
  • ​​​
​
最近更新时间:2026.02.02 17:14:27
这个页面对您有帮助吗?
有用
有用
无用
无用