函数计算权限管理是通过阿里云的访问控制RAM实现的。使用访问控制RAM可以让您避免与其他用户共享云账号密钥,即AccessKey(包含AccessKey ID和AccessKey Secret),按需为RAM用户分配最小权限。本文介绍函数计算的权限策略,包括系统策略、自定义策略及自定义策略示例。

策略类型

在访问控制中,权限策略是用 语法和结构描述的一组权限的集合,可以精确地描述被授权的Resource(资源集)、Action(操作集)以及授权条件。函数计算包含以下权限策略:
  • 系统策略:统一由阿里云创建,您只能使用不能修改,策略的版本更新由阿里云维护。
  • 自定义策略:您可以自主创建、更新和删除,策略的版本更新由您自己维护。

系统策略

函数计算提供以下系统策略:

  • AliyunFCReadOnlyAccess系统策略:表示允许对函数计算所有的资源进行读操作。
    {
        "Version": "1",
        "Statement": [
            {
                "Action": [
                    "fc:Get*",
                    "fc:List*"
                ],
                "Resource": "*",
                "Effect": "Allow"
            }
        ]
    }
  • AliyunFCInvocationAccess系统策略:表示允许对所有函数的资源进行执行操作。
    {
        "Version": "1",
        "Statement": [
            {
                "Action": [
                    "fc:InvokeFunction"
                ],
                "Resource": "*",
                "Effect": "Allow"
            }
        ]
    }
  • AliyunFCFullAccess系统策略:表示允许对所有函数计算资源进行所有执行操作。
    {
        "Version": "1",
        "Statement": [
            {
                "Action": "fc:*",
                "Resource": "*",
                "Effect": "Allow"
            }
        ]
    }

自定义策略

除了函数计算默认提供的系统策略外,您也可以通过自定义策略进行更细粒度的权限管理。关于权限策略的基本信息,请参见权限策略基本元素

Resource Action 描述
acs:fc:<region>:<account-id>:services/<serviceName> fc:GetService 特定服务资源。
fc:UpdateService
fc:DeleteService
acs:fc:<region>:<account-id>:services/* fc:CreateService 所有服务资源。
fc:ListServices
acs:fc:<region>:<account-id>:services/<serviceName>.<qualifier> fc:GetService 特定版本的服务资源。
acs:fc:<region>:<account-id>:services/<serviceName>/functions/<functionName> fc:GetFunction 特定服务下的特定函数资源。
fc:UpdateFunction
fc:DeleteFunction
fc:InvokeFunction
acs:fc:<region>:<account-id>:services/<serviceName>/functions/* fc:CreateFunction 特定服务下的所有函数资源。
fc:ListFunctions
acs:fc:<region>:<account-id>:services/<serviceName>.*/functions/<functionName> fc:GetFunction 特定服务的所有版本下的所有函数资源。
fc:UpdateFunction
fc:DeleteFunction
fc:InvokeFunction
fc:PutProvisionConfig
fc:GetProvisionConfig
fc:PutFunctionOnDemandConfig
fc:DeleteFunctionOnDemandConfig
fc:PutFunctionAsyncInvokeConfig
fc:DeleteFunctionAsyncInvokeConfig
fc:GetFunctionAsyncInvokeConfig
fc:GetFunctionOnDemandConfig
acs:fc:<region>:<account-id>:services/<serviceName>/functions/<functionName>/triggers/<triggerName> fc:GetTrigger 特定服务下的特定函数下的特定触发器资源。
fc:UpdateTrigger
fc:DeleteTrigger
acs:fc:<region>:<account-id>:services/<serviceName>/functions/<functionName>/triggers/* fc:CreateTrigger 特定服务下的特定函数下的所有触发器资源。
fc:ListTriggers
acs:fc:<region>:<account-id>:services/<serviceName>/versions fc:PublishServiceVersion 所有版本。
fc:ListServiceVersions
acs:fc:<region>:<account-id>:services/<serviceName>/versions/<versionID> fc:DeleteServiceVersion 指定版本。
acs:fc:<region>:<account-id>:services/<serviceName>/aliases/* fc:CreateAlias 所有别名。
fc:ListAliases
acs:fc:<region>:<account-id>:services/<serviceName>/aliases/<aliasName> fc:GetAlias 指定别名。
fc:UpdateAlias
fc:DeleteAlias
acs:fc:<region>:<account-id>:custom-domains/* fc:CreateCustomDomain 所有自定义域名。
fc:ListCustomDomains
acs:fc:<region>:<account-id>:custom-domains/<domainName> fc:GetCustomDomain 指定自定义域名。
fc:UpdateCustomDomain
fc:DeleteCustomDomain
acs:fc:<region>:<account-id>:tag fc:TagResource 单个标签。
fc:GetResourceTags
fc:UnTagResource
acs:fc:<region>:<account-id>:tags/* fc:ListTaggedResources 所有标签。
acs:fc:<region>:<account-id>:account-settings/* fc:GetAccountSettings 用户设置。
acs:fc:<region>:<account-id>:layerarn/:arn GetLayerVersionByArn 所有层。
acs:fc:<region>:<account-id>:layers/* ListLayers
cs:fc:<region>:<account-id>:layers/:layerName/versions/:version PublishLayerAsPublic
acs:fc:<region>:<account-id>:layers/:layerName/versions/* ListLayerVersions 所有层版本。
CreateLayerVersion
acs:fc:<region>:<account-id>:layers/:layerName/versions/:version GetLayerVersion
DeleteLayerVersion
acs:fc:<region>:<account-id>:on-demand-configs/* ListOnDemandConfigs 按量实例配置。
acs:fc:<region>:<account-id>:provision-configs/* ListProvisionConfigs 预留实例配置。
acs:fc:<region>:<account-id>:services/:serviceName/binding DeleteVpcBinding VPC绑定。
acs:fc:<region>:<account-id>:services/:serviceName/binding/* CreateVpcBinding
ListVpcBindings
acs:fc:<region>:<account-id>:services/:serviceName/functions/:functionName/async-invoke-configs/* ListFunctionAsyncInvokeConfigs 异步调用配置。
acs:fc:<region>:<account-id>:services/:serviceName/functions/:functionName/code GetFunctionCode 所有函数代码。
acs:fc:<region>:<account-id>:services/:serviceName/functions/:functionName/stateful-async-invocations/* ListStatefulAsyncInvocations 有状态异步调用。
acs:fc:<region>:<account-id>:services/:serviceName/functions/:functionName/stateful-async-invocations/:invocationId GetStatefulAsyncInvocation
StopStatefulAsyncInvocation
您可以通过以上自定义的权限策略设置具有调用杭州地域下 test服务下 demo函数的权限,具体策略如下所示:
{
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "fc:InvokeFunction"
            ],
            "Resource": "acs:fc:cn-hangzhou:*:services/test/functions/demo",
            "Effect": "Allow"
        }
    ]
}

权限策略示例

自定义创建获取服务及创建执行函数权限策略

{
"Version": "1",
"Statement": [
 {
   "Action": [
     "fc:CreateService",
     "fc:GetService",
     "fc:CreateFunction",
     "fc:GetFunction",
     "fc:InvokeFunction"
   ],
   "Resource": "*",
   "Effect": "Allow"
 }
]
}

自定义访问日志权限策略

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "log:ListProject",
                "log:ListLogStore"
            ],
            "Resource": "acs:log:*:*:project/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ram:ListRoles"
            ],
            "Resource": [
                "acs:ram:*:*:role/*"
            ]
        }
    ]
}

自定义访问OSS触发器权限策略

{
  "Statement": [
    {
      "Action": [
        "oss:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ],
  "Version": "1"
}
当您成功创建OSS触发器后却无法查看成功创建的OSS触发器,您还需要添加如下策略,模板示例如下:
{
  "Statement": [
    {
      "Action": [
        "oss:GetBucketEventNotification",
        "oss:PutBucketEventNotification",
        "oss:DeleteBucketEventNotification"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ],
  "Version": "1"
}