子账号控制台登录前条件
使用RAM子账号登录函数计算控制台,子账号应该具备以下条件:必须开启控制台登录功能,并为该子账号设置登录用户名和密码。更详细的指导请参考子控制台登录。
子控制台所需完整权限
最后提供一个自定义policy,您只需要基于这个policy进行适合的增删或者修改,就可以满足您的需求。该自定义policy模版让被绑定的子账号拥有所有的权限。
{
"Version": "1",
"Statement": [
{
"Action": "fc:*",
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"ram:PassRole"
],
"Effect": "Allow",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"log:ListProject",
"log:ListLogStore"
],
"Resource": "acs:log:*:*:project/*"
},
{
"Effect": "Allow",
"Action": [
"ram:ListRoles"
],
"Resource": [
"acs:ram:*:*:role/*"
]
},
{
"Action": [
"oss:ListBucket"
],
"Effect": "Allow",
"Resource": "*"
},
{
"Action": [
"oss:GetBucketEventNotification",
"oss:PutBucketEventNotification",
"oss:DeleteBucketEventNotification"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
控制台显示的监控数据来自云监控服务,如果子帐号没有被授予云监控读权限,那么会显示 :
这时候需要您给子帐号增加一个权限:AliyunCloudMonitorReadOnlyAccess
如果您仅仅想让子账号拥有读取服务信息,读取函数信息和执行函数的权限,您进需要绑定如下的policy到子账号:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "fc:ListService",
"Resource": "acs:fc:cn-shanghai:*:services/*"
},
{
"Effect": "Allow",
"Action": [
"fc:GetFunction"
],
"Resource": [
"acs:fc:*:*:services/your-helloworld-fc/functions/*",
"acs:fc:*:*:services/your-helloworld-oss/functions/*"
]
},
{
"Effect": "Allow",
"Action": [
"fc:InvokeFunction"
],
"Resource": [
"acs:fc:*:*:services/your-helloworld-fc/functions/your-hello-world-fc"
]
},
{
"Action": [
"ram:PassRole"
],
"Effect": "Allow",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"log:ListProject",
"log:ListLogStore"
],
"Resource": "acs:log:*:*:project/*"
},
{
"Effect": "Allow",
"Action": [
"ram:ListRoles"
],
"Resource": [
"acs:ram:*:*:role/*"
]
},
{
"Action": [
"oss:ListBucket"
],
"Effect": "Allow",
"Resource": "*"
},
{
"Action": [
"oss:GetBucketEventNotification",
"oss:PutBucketEventNotification",
"oss:DeleteBucketEventNotification"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
授权子账号最基本的功能
这里所指的最基本的功能是指创建服务,删除服务,获取服务信息,创建函数,删除函数,更新函数信息,获取函数信息和执行函数的权限,不包括日志和触发器相关的操作。这些基本的权限是使用日志和触发器功能权限的基础。接下来一步步跟着我操作吧。
给子账号设置AliyunFCFullAccess权限。
选择 访问控制 > 用户管理 > 授权(找到被授权的子账号)。
子账号登录执行基本操作。
完成第1步,该子账号已经可以创建服务,删除服务,获取服务信息,创建函数,删除函数,修改函数,获取函数信息和执行函数了。
选择 访问控制 > 概览 > RAM用户登录链接(单击链接,输入用户名密码) > 完成登录。
仅完成基本权限设置,高级配置可以忽略。
此处是配置您的日志,如果不打算让子账号拥有日志的相关功能可以跳过此处。选择 创建函数,输入所要创建函数的基本的信息,完成函数的创建,代码执行。
因为子账号没还有访问日志的权限。因此,此处不会显示日志。
如果您觉的子账号的权限太多,想缩小权限怎么办?比如我只想让子账号拥有创建服务,获取服务,创建函数,执行函数的权限。
开始之前建议您了解一些RAM的一些最基本的概念,要指导什么是云资源,policy等相关的概念。
自定义一个仅仅拥有创建服务,获取服务,创建函数,执行函数的权限对应的policy。然后把自定义的policy关联到角色上面。详细的操作步骤可以参考上面的截图。 操作中只用的policy如下所示,您可以基于这个模版修改,或者直接复用。
{
"Version": "1",
"Statement": [
{
"Action": [
"fc:CreateService",
"fc:GetService",
"fc:CreateFunction",
"fc:GetFunction",
"fc:InvokeFunction"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
如果您需要更加详细Action和Resource可以参考文档请参考函数计算权限管理。
注意:一个角色只能关联5个自定义policy,建议您把多个自定义policy组织成一个,避免超出限制。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "fc:CreateService",
"Resource": "acs:fc:cn-shanghai:*:services/*"
},
{
"Effect": "Allow",
"Action": [
"fc:CreateFunction"
],
"Resource": [
"acs:fc:*:*:services/your-helloworld-fc/functions/*",
"acs:fc:*:*:services/your-helloworld-oss/functions/*"
]
},
{
"Effect": "Allow",
"Action": [
"fc:UpdateFunction"
],
"Resource": [
"acs:fc:*:*:services/your-helloworld-fc/functions/your-hello-world-fc"
]
}
]
}
所有的Policy对应的控制粒度对照表请参见权限定义。
添加日志等高级功能
控制台的高级配置部分主要是管理用户的日志功能和给service级别的role添加访问其它服务的权限。除了应该具有UpdateService的权限,您还应该有PassRole。如果您还想在高级配置创建新的角色, 那么您还应该具有create role的权限。下给给出一个PassRole的policy,可以进行参考。
{
"Statement": [
{
"Action": [
"ram:PassRole"
],
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "1"
}
您可以看到此处project, logstore和现有角色,都是文本框输入,这种交互体验不是很好,如果您担心自己输入错误,不使用文本框,那么我建议您在service role加上list project,list logstore和list role的权限,因为这样可以减少很多的错误。配置以上的权限,可以参考日志服务权限管理 对于ram相关的权限,可以参考RAM权限管理。
给您提供一个模版,您只需要创建这个模版,然后关联到子账号上面。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"log:ListProject",
"log:ListLogStore"
],
"Resource": "acs:log:*:*:project/*"
},
{
"Effect": "Allow",
"Action": [
"ram:ListRoles"
],
"Resource": [
"acs:ram:*:*:role/*"
]
}
]
}
子账号使用触发器权限设置
如果您已经绑定了PassRole和create trigger的权限, 那么恭喜您,您现在可以创建触发器了。同样如果您没有list bucket和list role的权限,这里只会提供文本输入框。如果想使用下拉列表,这里提供一个模版给您,按照这个模版创建policy,然后关联到子账号。
{
"Statement": [
{
"Action": [
"oss:ListBucket"
],
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "1"
}
基于每个角色只可以关联5个自定义模版,建议您把这个policy合并到之前的模版里面,减少模版的数量。
注意:有时候你会产生疑问,为何我这边创建成功了触发器,但是看不到创建成功的触发器, 因为您还缺少三个权限。这里直接提供一个模版给您,您只需要创建这个policy,然后关联到子账号上面。
{
"Statement": [
{
"Action": [
"oss:GetBucketEventNotification",
"oss:PutBucketEventNotification",
"oss:DeleteBucketEventNotification"
],
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "1"
}
完成以上工作,您就具有控制台所有相关操作了。根据您的需求,选择合适的权限。