O Function Compute usa o Resource Access Management (RAM) para gerencie permissões. Com o RAM, você não precisa compartilhar seus pares de AccessKey com outros usuários. Em vez disso, conceda aos usuários apenas as permissões mínimas necessárias. Um par de AccessKey inclui um AccessKey ID e um AccessKey secret. Este tópico descreve as políticas do Function Compute, incluindo políticas de sistema e personalizadas, e fornece exemplos de políticas personalizadas.
Tipos de política
No RAM, uma política é um conjunto de permissões definidas com base em Policy structure and syntax. Ela define precisamente o conjunto de recursos autorizados, o conjunto de ações e as condições de autorização. As políticas do Function Compute incluem os seguintes tipos:
System policies: A Alibaba Cloud cria e atualiza as políticas de sistema. Você pode usar essas políticas, mas não modifique-as.
Custom policies: Você pode crie, atualize e exclua políticas personalizadas, mas deve manter o controle de versão delas.
Políticas de sistema
Ao fazer logon no console do Function Compute como usuário do RAM pela primeira vez, use sua conta da Alibaba Cloud para anexar as políticas de sistema do Function Compute e de outros serviços da Alibaba Cloud ao usuário do RAM. Você só poderá acessar os serviços da Alibaba Cloud, incluindo o Function Compute, como usuário do RAM depois que as políticas de sistema forem anexadas.
Confira a seguir as políticas de sistema de diferentes tipos:
-
Políticas de sistema para o Function Compute
Nome da política
Descrição
AliyunFCReadOnlyAccess
Permissões de somente leitura em todos os recursos do Function Compute.
AliyunFCInvocationAccess
Permissões para invocar funções.
AliyunFCFullAccess
Permissões para gerencie todos os recursos do Function Compute.
NotaA política AliyunFCFullAccess contém as permissões das políticas AliyunFCInvocationAccess e AliyunFCReadOnlyAccess. Depois de anexar a política AliyunFCFullAccess a um usuário do RAM, não é necessário anexar as políticas AliyunFCInvocationAccess ou AliyunFCReadOnlyAccess a esse usuário.
-
Políticas de sistema para outros serviços da Alibaba Cloud
Serviço da Alibaba Cloud
Política de sistema
Simple Log Service
AliyunLogReadOnlyAccess: permissões de somente leitura nos recursos do Simple Log Service.
AliyunLogFullAccess: permissões para gerencie os recursos do Simple Log Service.
NotaPara acessar o Simple Log Service como usuário do RAM, anexe apenas a política AliyunLogReadOnlyAccess ao usuário, com base no princípio do menor privilégio.
Object Storage Service (OSS)
AliyunOSSReadOnlyAccess: permissões de somente leitura nos recursos do OSS.
AliyunOSSFullAccess: permissões para gerencie os recursos do OSS.
CloudMonitor
AliyunCloudMonitorReadOnlyAccess: permissões de somente leitura nos recursos do CloudMonitor.
Certificate Management Service
AliyunYundunCertReadOnlyAccess: permissões de somente leitura nos recursos do Certificate Management Service.
Virtual Private Cloud (VPC)
AliyunVPCReadOnlyAccess: permissões de somente leitura nos recursos da VPC.
Elastic Compute Service (ECS)
AliyunECSReadOnlyAccess: permissões de somente leitura nos recursos do ECS.
RAM
AliyunRAMReadOnlyAccess: permissões de somente leitura nos recursos do RAM, incluindo permissões para visualize usuários, grupos e informações de autorização.
AliyunRAMFullAccess: permissões para gerencie os recursos do RAM, incluindo permissões para gerencie usuários e conceder permissões.
NotaSe você anexar apenas a política AliyunRAMReadOnlyAccess a um usuário do RAM, ele poderá obter apenas a lista de funções no console. Caso precise executar outras operações como usuário do RAM, anexe a política AliyunRAMFullAccess ao usuário.
Application Real-Time Monitoring Service (ARMS)
AliyunARMSReadOnlyAccess: permissões de somente leitura nos recursos do ARMS.
AliyunARMSFullAccess: permissões para gerencie os recursos do ARMS.
NotaAo acessar o ARMS como usuário do RAM, anexe somente a política AliyunARMSReadOnlyAccess ao usuário, com base no princípio do menor privilégio.
Simple Message Queue (formerly MNS)
AliyunMNSReadOnlyAccess: permissões de somente leitura nos recursos do Simple Message Queue (formerly MNS).
AliyunMNSFullAccess: permissões para gerencie os recursos do Simple Message Queue (formerly MNS).
NotaPara que um usuário do RAM acesse o Simple Message Queue (formerly MNS), anexe apenas a política AliyunMNSReadOnlyAccess ao usuário, com base no princípio do menor privilégio.Simple Message Queue (formerly MNS)
EventBridge
AliyunEventBridgeReadOnlyAccess: permissões de somente leitura nos recursos do EventBridge.
AliyunEventBridgeFullAccess: permissões para gerencie os recursos do EventBridge.
NotaSe um usuário do RAM precisar acessar o EventBridge, anexe apenas a política AliyunEventBridgeReadOnlyAccess ao usuário, com base no princípio do menor privilégio.
ApsaraMQ for RocketMQ
AliyunMQReadOnlyAccess: permissões de somente leitura nos recursos do ApsaraMQ for RocketMQ.
AliyunMQFullAccess: permissões para gerencie os recursos do ApsaraMQ for RocketMQ.
NotaPara conceder acesso ao ApsaraMQ for RocketMQ a um usuário do RAM, anexe apenas a política AliyunMQReadOnlyAccess ao usuário, com base no princípio do menor privilégio.
Container Registry
AliyunContainerRegistryReadOnlyAccess: permissões de somente leitura nos recursos do Container Registry.
AliyunContainerRegistryFullAccess: permissões para gerencie os recursos do Container Registry.
NotaPara permitir que um usuário do RAM acesse o Container Registry, anexe apenas a política AliyunContainerRegistryReadOnlyAccess ao usuário, com base no princípio do menor privilégio.
File Storage NAS (NAS)
AliyunNASReadOnlyAccess: permissões de somente leitura nos recursos do NAS.
AliyunNASFullAccess: permissões para gerencie os recursos do NAS.
NotaPara acessar o NAS como usuário do RAM, anexe somente a política AliyunNASReadOnlyAccess ao usuário, com base no princípio do menor privilégio.
ApsaraDB RDS
AliyunRDSReadOnlyAccess: permissões de somente leitura nos recursos do ApsaraDB RDS.
AliyunRDSFullAccess: permissões para gerencie os recursos do ApsaraDB RDS.
NotaPara que um usuário do RAM acesse o ApsaraDB RDS, anexe apenas a política AliyunRDSReadOnlyAccess ao usuário, com base no princípio do menor privilégio.
Alibaba Cloud DevOps
AliyunRDCReadOnlyAccess: permissões de somente leitura nos recursos do Apsara DevOps RDC.
AliyunRDCFullAccess: permissões para gerencie os recursos do Apsara DevOps RDC.
NotaPara acessar o ApsaraDB RDS como usuário do RAM, anexe somente a política AliyunRDCReadOnlyAccesss ao usuário, com base no princípio do menor privilégio.
Caso não seja possível atualizar gatilhos como usuário do RAM após anexar uma política relacionada a gatilhos, como a AliyunOSSFullAccess, ao usuário por meio de uma conta da Alibaba Cloud, anexe a seguinte política personalizada ao usuário usando a conta da Alibaba Cloud. Depois de anexar a política personalizada, você poderá atualizar os gatilhos de eventos do OSS como usuário do RAM.
{
"Statement": [
{
"Action": [
"ram:PassRole"
],
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "1"
}
Políticas personalizadas
Além das políticas de sistema, o Function Compute suporta políticas personalizadas que permitem conceder permissões granulares aos usuários do RAM. Para obter mais informações sobre políticas, consulte Permission policy elements.
Ação | Recurso | Descrição |
fc:GetAsyncTask | acs:fc:{region}:{uid}:functions/{functionName}/async-tasks/{taskId} | Tarefas assíncronas |
fc:StopAsyncTask | acs:fc:{region}:{uid}:functions/{functionName}/async-tasks/{taskId} | |
fc:ListAsyncTasks | acs:fc:{region}:{uid}:functions/{functionName}/async-tasks/* | |
fc:ListFunctionAsyncInvokeConfigs | acs:fc:{region}:{uid}:async-invoke-configs/* acs:fc:{region}:{uid}:functions/{functionName} | Configurações de invocação assíncrona |
fc:ListConcurrencyConfigs | acs:fc:{region}:{uid}:concurrency-configs/* acs:fc:{region}:{uid}:functions/{functionName} | Configurações de concorrência |
fc:ListCustomDomains | acs:fc:{region}:{uid}:custom-domains/* | Todos os nomes de domínio personalizados |
fc:GetCustomDomain | acs:fc:{region}:{uid}:custom-domains/{domainName} | Nomes de domínio personalizados especificados |
fc:DeleteCustomDomain | ||
fc:UpdateCustomDomain | ||
fc:CreateCustomDomain | ||
fc:ListFunctions | acs:fc:{region}:{uid}:functions/* | Todos os recursos de função |
fc:DeleteConcurrencyConfig | acs:fc:{region}:{uid}:functions/{functionName} | |
fc:PutConcurrencyConfig | acs:fc:{region}:{uid}:functions/{functionName} | |
fc:DeleteFunction | acs:fc:{region}:{uid}:functions/{functionName} | |
fc:UpdateFunction | acs:fc:{region}:{uid}:functions/{functionName} | |
fc:CreateFunction | acs:fc:{region}:{uid}:functions/{functionName} | |
fc:GetConcurrencyConfig | acs:fc:{region}:{uid}:functions/{functionName} | |
fc:GetFunction | acs:fc:{region}:{uid}:functions/{functionName} | |
fc:ListAliases | acs:fc:{region}:{uid}:functions/{functionName}/aliases/* | Todos os aliases |
fc:CreateAlias | acs:fc:{region}:{uid}:functions/{functionName}/aliases/{aliasName} | Aliases especificados |
fc:UpdateAlias | acs:fc:{region}:{uid}:functions/{functionName}/aliases/{aliasName} | |
fc:GetAlias | acs:fc:{region}:{uid}:functions/{functionName}/aliases/{aliasName} | |
fc:DeleteAlias | acs:fc:{region}:{uid}:functions/{functionName}/aliases/{aliasName} | |
fc:ListInstances | acs:fc:{region}:{uid}:functions/{functionName}/instances/* | Informações da instância |
fc:ListTriggers | acs:fc:{region}:{uid}:functions/{functionName}/triggers/* | Todos os recursos de gatilho da função especificada |
fc:CreateTrigger | acs:fc:{region}:{uid}:functions/{functionName}/triggers/{triggerName} | Recursos de gatilho específicos da função especificada |
fc:UpdateTrigger | acs:fc:{region}:{uid}:functions/{functionName}/triggers/{triggerName} | |
fc:GetTrigger | acs:fc:{region}:{uid}:functions/{functionName}/triggers/{triggerName} | |
fc:DeleteTrigger | acs:fc:{region}:{uid}:functions/{functionName}/triggers/{triggerName} | |
fc:PublishFunctionVersion | acs:fc:{region}:{uid}:functions/{functionName}/versions | Todas as versões |
fc:ListFunctionVersions | acs:fc:{region}:{uid}:functions/{functionName}/versions/* | |
fc:DeleteFunctionVersion | acs:fc:{region}:{uid}:functions/{functionName}/versions/{versionId} | Versões especificadas |
fc:ListVpcBindings | acs:fc:{region}:{uid}:functions/{functionName}/vpc-bindings/* | Configurações de VPC |
fc:CreateVpcBinding | acs:fc:{region}:{uid}:functions/{functionName}/vpc-bindings/* | |
fc:DeleteVpcBinding | acs:fc:{region}:{uid}:functions/{functionName}/vpc-bindings/{vpcId} | |
fc:GetFunctionCode | acs:fc:{region}:{uid}:functions/{functionName} acs:fc:{region}:{uid}:functions/{functionName}/{qualifier} | Todo o código da função |
fc:GetFunctionAsyncInvokeConfig | acs:fc:{region}:{uid}:functions/{functionName} acs:fc:{region}:{uid}:functions/{functionName}/{qualifier} | Todos os recursos da função |
fc:DeleteProvisionConfig | acs:fc:{region}:{uid}:functions/{functionName} acs:fc:{region}:{uid}:functions/{functionName}/{qualifier} | |
fc:PutProvisionConfig | acs:fc:{region}:{uid}:functions/{functionName} acs:fc:{region}:{uid}:functions/{functionName}/{qualifier} | |
fc:InvokeFunction | acs:fc:{region}:{uid}:functions/{functionName} acs:fc:{region}:{uid}:functions/{functionName}/{qualifier} | |
fc:PutFunctionAsyncInvokeConfig | acs:fc:{region}:{uid}:functions/{functionName} acs:fc:{region}:{uid}:functions/{functionName}/{qualifier} | |
fc:GetProvisionConfig | acs:fc:{region}:{uid}:functions/{functionName} acs:fc:{region}:{uid}:functions/{functionName}/{qualifier} | |
fc:DeleteFunctionAsyncInvokeConfig | acs:fc:{region}:{uid}:functions/{functionName} acs:fc:{region}:{uid}:functions/{functionName}/{qualifier} | |
fc:GetLayerVersionByArn | acs:fc:{region}:{uid}:layerarn/{arn} | Todas as camadas |
fc:ListLayers | acs:fc:{region}:{uid}:layers/* | |
fc:PutLayerACL | acs:fc:{region}:{uid}:layers/{layerName} | |
fc:ListLayerVersions | acs:fc:{region}:{uid}:layers/{layerName}/versions/* | |
fc:CreateLayerVersion | acs:fc:{region}:{uid}:layers/{layerName}/versions/* | |
fc:DeleteLayerVersion | acs:fc:{region}:{uid}:layers/{layerName}/versions/{version} | |
fc:GetLayerVersion | acs:fc:{region}:{uid}:layers/{layerName}/versions/{version} | |
fc:ListProvisionConfigs | acs:fc:{region}:{uid}:provision-configs/* acs:fc:{region}:{uid}:functions/{functionName} | Configurações de instâncias provisionadas |
Use a política personalizada anterior para configure as permissões de invocação da função demo na região China (Hangzhou). Confira os detalhes no trecho de código a seguir:
{
"Version": "1",
"Statement": [
{
"Action": [
"fc:InvokeFunction"
],
"Resource": "acs:fc:cn-hangzhou:*:functions/demo",
"Effect": "Allow"
}
]
}
Políticas de exemplo
Política personalizada para crie e consultar serviços, além de crie e invocar funções
{
"Version": "1",
"Statement": [{
"Action": [
"fc:CreateFunction",
"fc:GetFunction",
"fc:InvokeFunction"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"ram:PassRole"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
Política personalizada para acessar logs
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"log:ListProject",
"log:ListLogStore"
],
"Resource": "acs:log:*:*:project/*"
}
]
}
Política personalizada para acessar gatilhos de eventos do OSS
{
"Statement": [
{
"Action": [
"oss:ListBucket",
"oss:GetBucketEventNotification",
"oss:PutBucketEventNotification",
"oss:DeleteBucketEventNotification"
],
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "1"
}
Política personalizada para proibir a criação de serviços que possam acessar a Internet
{
"Version": "1",
"Statement": [
{
"Action": "fc:UpdateFunction",
"Effect": "Deny",
"Resource": "*",
"Condition": {
"StringEquals": {
"fc:EnableServiceInternetAccess": "true"
}
}
},
{
"Action": "fc:CreateFunction",
"Effect": "Deny",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"fc:EnableServiceInternetAccess": "false"
}
}
}
]
}
Política personalizada para proibir a criação de serviços que não tenham permissão para acessar o Simple Log Service
{
"Version": "1",
"Statement": [
{
"Action": "fc:UpdateFunction",
"Effect": "Deny",
"Resource": "*",
"Condition": {
"StringEquals": {
"fc:EnableServiceSLSLogging": "false"
}
}
},
{
"Action": "fc:CreateFunction",
"Effect": "Deny",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"fc:EnableServiceSLSLogging": "true"
}
}
}
]
}
Política personalizada para proibir a criação de gatilhos que possam ser acessados pela Internet
{
"Version": "1",
"Statement": [
{
"Action": "fc:UpdateTrigger",
"Effect": "Deny",
"Resource": "*",
"Condition": {
"StringEquals": {
"fc:EnableHTTPTriggerInternet": "true"
}
}
},
{
"Action": "fc:CreateTrigger",
"Effect": "Deny",
"Resource": "*",
"Condition": {
"StringEquals": {
"fc:EnableHTTPTriggerInternet": "true"
}
}
}
]
}
Essa política proíbe os usuários de defina o parâmetro disableURLInternet como false nas operações CreateTrigger e UpdateTrigger. Esse parâmetro só pode ser definido como true, o que indica que não há suporte para nomes de domínio públicos padrão. Essa restrição se aplica apenas a gatilhos HTTP. Para obter mais informações, consulte HTTPTriggerConfig.
Nesse caso, o sistema retornará o erro 403 AccessDenied se você defina disableURLInternet=false. Confira um exemplo no código a seguir:
{
"statusCode":403,
"Code":"AccessDenied",
"Message":"the caller is not authorized to perform 'fc:CreateTrigger' on resource 'acs:fc:xx:xx:functions/xx/triggers/xx' with condition '[fc:EnableHTTPTriggerInternet=true]'"
}
Política personalizada para proibir a criação de gatilhos que possam ser acessados no modo anônimo
{
"Version": "1",
"Statement": [
{
"Action": "fc:UpdateTrigger",
"Effect": "Deny",
"Resource": "*",
"Condition": {
"StringEquals": {
"fc:EnableHTTPTriggerAnonymous": "true"
}
}
},
{
"Action": "fc:CreateTrigger",
"Effect": "Deny",
"Resource": "*",
"Condition": {
"StringEquals": {
"fc:EnableHTTPTriggerAnonymous": "true"
}
}
}
]
}
Essa política proíbe os usuários de defina o parâmetro authType como anonymous nas operações CreateTrigger e UpdateTrigger. Esse parâmetro só pode ser definido como function, o que torna a autenticação obrigatória. Essa restrição se aplica apenas a gatilhos HTTP. Para obter mais informações, consulte HTTPTriggerConfig.
Nesse caso, o sistema retornará o erro 403 AccessDenied se você defina authType=anonymous. Confira um exemplo no código a seguir:
{
"statusCode":403,
"Code":"AccessDenied",
"Message":"the caller is not authorized to perform 'fc:CreateTrigger' on resource 'acs:fc:xx:xx:functions/xx/triggers/xx' with condition '[fc:EnableHTTPTriggerAnonymous=true]'"
}
Política personalizada para proibir a criação de nomes de domínio personalizados que permitam solicitações HTTP
{
"Version": "1",
"Statement": [
{
"Action": "fc:CreateCustomDomain",
"Effect": "Deny",
"Resource": "*",
"Condition": {
"StringEquals": {
"fc:EnableCustomDomainHTTP": "true"
}
}
},
{
"Action": "fc:UpdateCustomDomain",
"Effect": "Deny",
"Resource": "*",
"Condition": {
"StringEquals": {
"fc:EnableCustomDomainHTTP": "true"
}
}
}
]
}
Essa política proíbe os usuários de defina o parâmetro protocol como HTTP ou HTTP,HTTPS nas operações CreateCustomDomain e UpdateCustomDomain. Esse parâmetro aceita apenas o valor HTTPS.
O sistema retornará o erro 403 AccessDenied se você tentar ative HTTP para um nome de domínio personalizado. Confira um exemplo no código a seguir:
{
"statusCode":403,
"Code":"AccessDenied",
"Message":"the caller is not authorized to perform 'fc:CreateCustomDomain' on resource 'acs:fc:xxx:xxx:custom-domains/xxx' with condition '[fc:EnableCustomDomainHTTP=true]'"
}