本文介绍函数服务 veFaaS 针对 IAM 用户的授权最佳实践。
已创建 IAM 用户。详细操作,请参见 用户管理。
veFaaS 提供如下几种系统预设策略,可直接为 IAM 用户授权。
策略 | 说明 |
---|---|
VeFaaSFullAccess | 函数服务全部管理权限。 |
VeFaaSReadOnlyAccess | 函数服务只读访问权限。 |
使用火山引擎账号或具有相关权限的 IAM 用户登录 IAM 控制台。
在左侧导航栏选择 身份管理 > 用户。
在用户列表中,找到需要设置权限的用户名,单击对应 操作 列下的 管理。
在 用户详情 页面,选择 权限 > 全局权限 页签,单击 添加权限。
在 添加权限 面板的搜索框中输入 函数服务,搜索函数服务相关的系统预设策略。
根据实际需求选择目标策略,单击 确定,为 IAM 用户添加 veFaaS 相关的权限策略。
veFaaS 中部分操作(Action)和资源(Resource)是按照项目(Project)划分的,可满足项目粒度的权限控制需求。若需要将该类操作和资源授权给 IAM 用户,需要以项目权限的形式授予。
说明
支持按项目授权的 Action 包括:
使用火山引擎账号或具有相关权限的 IAM 用户登录 IAM 控制台。
新建自定义策略。
在左侧导航栏选择 策略管理,在策略管理页面,单击 新建自定义策略。
在新建自定义策略页面,输入策略名称和策略内容,并单击 提交。
假设策略名称为vefaas-create-project
,JSON 内容示例如下。您可按需自行增删具体的 Action 或 Resource 。
{ "Statement": [ { "Effect": "Allow", "Action": [ "vefaas:CreateFunction", "vefaas:UpdateFunction" ], "Resource": [ "*" ] } ] }
为已创建的 vefaas-create-project
策略添加项目授权。
单击 vefaas-create-project
策略名称,进入当前策略详情页面。
在 授权 > 项目授权 页签,单击 添加授权。
选择要授权的用户和作用的项目。
单击 确定,完成项目授权。
为无法按照项目划分的 Action 和 Resource 新建自定义策略,并以全局权限的形式授权给目标 IAM 用户。
说明
veFaaS 中有一部分 Action 和 Resource 是无法按照项目划分,因此为 IAM 用户授予项目权限的同时,还需要将无法按照项目划分的 Action 和 Resource,以全局权限的形式授予给该 IAM 用户。否则该 IAM 用户可能无法正常操作和使用 veFaaS 资源。
vefaas-read-global
。策略的 JSON 内容示例如下所示,请按需自行增删具体的 Action 或 Resource。{ "Statement": [ { "Effect": "Allow", "Action": [ "vefaas:Release", "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" ], "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": [ "*" ] } ] }
vefaas-read-global
策略添加全局授权。vefaas-read-global
策略策略详情页面,选择 授权 > 全局授权 页签,单击 添加授权。 选择要授权的用户,并单击 确定,完成全局授权。IAM 用户在非 default 项目下试图创建函数,会提示没有权限。
veFaaS 中部分操作(Action)和资源(Resource)接入了标签(Tag),可满足标签粒度的权限控制需求。
说明
支持管理标签的 Action 包括:
使用火山引擎账号或具有相关权限的 IAM 用户登录 IAM 控制台。
新建自定义策略。
在左侧导航栏选择 策略管理,在策略管理页面,单击 新建自定义策略。
在新建自定义策略页面,输入策略名称和策略内容,并单击 提交。
假设名称为 vefaas-function-operation-by-tag
,表明 CreateFunction 和 UpdateFunction 只允许操作 team:ai-prompt
标签,其余标签会被拒绝。
```bash { "Statement": [ { "Effect": "Allow", "Action": [ "vefaas:CreateFunction", "vefaas:UpdateFunction" ], "Resource": [ "*" ], "Condition": { "StringEquals": { "volc:RequestTag/team": [ "ai-prompt" ] } } } ] } ```
为已创建的 vefaas-function-operation-by-tag
策略添加全局授权。
单击 vefaas-function-operation-by-tag
策略名称,进入当前策略详情页面。
在 授权 > 全局授权 页签,单击 添加授权。
选择要授权的用户。
单击 确定,完成项目授权。
为无法按照标签授权的 Action 和 Resource 新建自定义策略,并以全局权限的形式授权给目标 IAM 用户。
说明
veFaaS 中有一部分 Action 和 Resource 是无法按照标签划分,因此为 IAM 用户授予标签权限的同时,还需要将无法按照标签划分的 Action 和 Resource,以全局权限的形式授予给该 IAM 用户。否则该 IAM 用户可能无法正常操作和使用 veFaaS 资源。
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" ], "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": [ "*" ] } ] }
为已创建的vefaas-other-generate-operation
策略添加全局授权。
在 vefaas-other-generate-operation
策略策略详情页面,选择 授权 > 全局授权 页签,单击 添加授权。 选择要授权的用户,并单击 确定,完成全局授权。
IAM 用户创建标签为team:ai-prompt
或包含该标签的函数,成功创建。
IAM 用户创建函数不包含标签或者不包括team:ai-prompt
的标签,提示没有权限。