Function Compute s'appuie sur Resource Access Management (RAM) pour la gestion des permissions. Avec RAM, vous n'avez pas besoin de partager vos paires AccessKey avec d'autres utilisateurs. Vous pouvez plutôt accorder aux utilisateurs uniquement les permissions minimales requises. Une paire AccessKey comprend un AccessKey ID et un AccessKey secret. Cette rubrique décrit les politiques pour Function Compute, notamment les politiques système et les politiques personnalisées. Elle fournit également des exemples de politiques personnalisées.
Types de politiques
Dans RAM, une politique est un ensemble de permissions définies selon la Structure et syntaxe des politiques. Une politique définit avec précision l'ensemble des ressources autorisées, l'ensemble des actions et les conditions d'autorisation. Les politiques pour Function Compute incluent les types suivants :
Politiques système : Alibaba Cloud crée et met à jour les politiques système. Vous pouvez utiliser ces politiques, mais vous ne pouvez pas les modifier.
Politiques personnalisées : Vous pouvez créer, mettre à jour et supprimer des politiques personnalisées. Vous devez gérer les versions de ces politiques.
Politiques système
Lors de votre première connexion à la console Function Compute en tant qu'utilisateur RAM, vous devez utiliser votre compte Alibaba Cloud pour attacher les politiques système de Function Compute et d'autres services Alibaba Cloud à cet utilisateur. L'accès aux services Alibaba Cloud, y compris Function Compute, n'est possible pour l'utilisateur RAM qu'après l'attachement de ces politiques système.
Les éléments suivants répertorient les politiques système par type :
-
Politiques système pour Function Compute
Nom de la politique
Description
AliyunFCReadOnlyAccess
Autorisations en lecture seule sur toutes les ressources Function Compute.
AliyunFCInvocationAccess
Autorisations permettant d'invoquer des fonctions.
AliyunFCFullAccess
Autorisations permettant de gérer toutes les ressources Function Compute.
RemarqueLa politique AliyunFCFullAccess inclut les autorisations des politiques AliyunFCInvocationAccess et AliyunFCReadOnlyAccess. Une fois la politique AliyunFCFullAccess attachée à un utilisateur RAM, il n'est pas nécessaire de lui attacher également les politiques AliyunFCInvocationAccess ou AliyunFCReadOnlyAccess.
-
Politiques système pour d'autres services Alibaba Cloud
Service Alibaba Cloud
Politique système
Simple Log Service
AliyunLogReadOnlyAccess : autorisations en lecture seule sur les ressources Simple Log Service.
AliyunLogFullAccess : autorisations permettant de gérer les ressources Simple Log Service.
RemarquePour accéder à Simple Log Service en tant qu'utilisateur RAM, il suffit d'attacher la politique AliyunLogReadOnlyAccess à l'utilisateur RAM, conformément au principe du moindre privilège.
Object Storage Service (OSS)
AliyunOSSReadOnlyAccess : autorisations en lecture seule sur les ressources OSS.
AliyunOSSFullAccess : autorisations permettant de gérer les ressources OSS.
CloudMonitor
AliyunCloudMonitorReadOnlyAccess : autorisations en lecture seule sur les ressources CloudMonitor.
Certificate Management Service
AliyunYundunCertReadOnlyAccess : autorisations en lecture seule sur les ressources Certificate Management Service.
Virtual Private Cloud (VPC)
AliyunVPCReadOnlyAccess : autorisations en lecture seule sur les ressources VPC.
Elastic Compute Service (ECS)
AliyunECSReadOnlyAccess : autorisations en lecture seule sur les ressources ECS.
RAM
AliyunRAMReadOnlyAccess : autorisations en lecture seule sur les ressources RAM, y compris la consultation des utilisateurs, des groupes et des informations d'autorisation.
AliyunRAMFullAccess : autorisations permettant de gérer les ressources RAM, y compris la gestion des utilisateurs et l'octroi d'autorisations.
RemarqueSi vous n'attachez que la politique AliyunRAMReadOnlyAccess à un utilisateur RAM, celui-ci ne pourra obtenir que la liste des rôles dans la console. Pour effectuer d'autres opérations en tant qu'utilisateur RAM, vous devez lui attacher la politique AliyunRAMFullAccess.
Application Real-Time Monitoring Service (ARMS)
AliyunARMSReadOnlyAccess : autorisations en lecture seule sur les ressources ARMS.
AliyunARMSFullAccess : autorisations permettant de gérer les ressources ARMS.
RemarquePour accéder à ARMS en tant qu'utilisateur RAM, il suffit d'attacher la politique AliyunARMSReadOnlyAccess à l'utilisateur RAM, conformément au principe du moindre privilège.
Simple Message Queue (formerly MNS)
AliyunMNSReadOnlyAccess : autorisations en lecture seule sur les ressources Simple Message Queue (formerly MNS).
AliyunMNSFullAccess : autorisations permettant de gérer les ressources Simple Message Queue (formerly MNS).
RemarquePour accéder à Simple Message Queue (formerly MNS) en tant qu'utilisateur RAM, il suffit d'attacher la politique AliyunMNSReadOnlyAccess à l'utilisateur RAM, conformément au principe du moindre privilège.Simple Message Queue (formerly MNS)
EventBridge
AliyunEventBridgeReadOnlyAccess : autorisations en lecture seule sur les ressources EventBridge.
AliyunEventBridgeFullAccess : autorisations permettant de gérer les ressources EventBridge.
RemarquePour accéder à EventBridge en tant qu'utilisateur RAM, il suffit d'attacher la politique AliyunEventBridgeReadOnlyAccess à l'utilisateur RAM, conformément au principe du moindre privilège.
ApsaraMQ for RocketMQ
AliyunMQReadOnlyAccess : autorisations en lecture seule sur les ressources ApsaraMQ for RocketMQ.
AliyunMQFullAccess : autorisations permettant de gérer les ressources ApsaraMQ for RocketMQ.
RemarquePour accéder à ApsaraMQ for RocketMQ en tant qu'utilisateur RAM, il suffit d'attacher la politique AliyunMQReadOnlyAccess à l'utilisateur RAM, conformément au principe du moindre privilège.
Container Registry
AliyunContainerRegistryReadOnlyAccess : autorisations en lecture seule sur les ressources Container Registry.
AliyunContainerRegistryFullAccess : autorisations permettant de gérer les ressources Container Registry.
RemarquePour accéder à Container Registry en tant qu'utilisateur RAM, il suffit d'attacher la politique AliyunContainerRegistryReadOnlyAccess à l'utilisateur RAM, conformément au principe du moindre privilège.
File Storage NAS (NAS)
AliyunNASReadOnlyAccess : autorisations en lecture seule sur les ressources NAS.
AliyunNASFullAccess : autorisations permettant de gérer les ressources NAS.
RemarquePour accéder à NAS en tant qu'utilisateur RAM, il suffit d'attacher la politique AliyunNASReadOnlyAccess à l'utilisateur RAM, conformément au principe du moindre privilège.
ApsaraDB RDS
AliyunRDSReadOnlyAccess : autorisations en lecture seule sur les ressources ApsaraDB RDS.
AliyunRDSFullAccess : autorisations permettant de gérer les ressources ApsaraDB RDS.
RemarquePour accéder à ApsaraDB RDS en tant qu'utilisateur RAM, il suffit d'attacher la politique AliyunRDSReadOnlyAccess à l'utilisateur RAM, conformément au principe du moindre privilège.
Alibaba Cloud DevOps
AliyunRDCReadOnlyAccess : autorisations en lecture seule sur les ressources Apsara DevOps RDC.
AliyunRDCFullAccess : autorisations permettant de gérer les ressources Apsara DevOps RDC.
RemarquePour accéder à ApsaraDB RDS en tant qu'utilisateur RAM, il suffit d'attacher la politique AliyunRDCReadOnlyAccesss à l'utilisateur RAM, conformément au principe du moindre privilège.
Si vous ne parvenez pas à mettre à jour les déclencheurs en tant qu'utilisateur RAM après avoir attaché une politique liée aux déclencheurs, telle que AliyunOSSFullAccess, à l'aide d'un compte Alibaba Cloud, vous devez attacher la politique personnalisée suivante à l'utilisateur RAM via le compte Alibaba Cloud. Une fois cette politique personnalisée attachée, vous pourrez mettre à jour les déclencheurs d'événements OSS en tant qu'utilisateur RAM.
{
"Statement": [
{
"Action": [
"ram:PassRole"
],
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "1"
}
Stratégies personnalisées
Outre les stratégies système, Function Compute prend en charge des stratégies personnalisées qui vous permettent d'accorder des autorisations granulaires aux utilisateurs RAM. Pour plus d'informations sur les stratégies, consultez la rubrique Éléments de stratégie d'autorisation.
Action | Resource | Description |
fc:GetAsyncTask | acs:fc:{region}:{uid}:functions/{functionName}/async-tasks/{taskId} | Tâches asynchrones |
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} | Configurations d'appel asynchrone |
fc:ListConcurrencyConfigs | acs:fc:{region}:{uid}:concurrency-configs/* acs:fc:{region}:{uid}:functions/{functionName} | Configurations de concurrence |
fc:ListCustomDomains | acs:fc:{region}:{uid}:custom-domains/* | Tous les noms de domaine personnalisés |
fc:GetCustomDomain | acs:fc:{region}:{uid}:custom-domains/{domainName} | Noms de domaine personnalisés spécifiés |
fc:DeleteCustomDomain | ||
fc:UpdateCustomDomain | ||
fc:CreateCustomDomain | ||
fc:ListFunctions | acs:fc:{region}:{uid}:functions/* | Toutes les ressources de fonction |
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/* | Tous les alias |
fc:CreateAlias | acs:fc:{region}:{uid}:functions/{functionName}/aliases/{aliasName} | Alias spécifiés |
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/* | Informations sur l'instance |
fc:ListTriggers | acs:fc:{region}:{uid}:functions/{functionName}/triggers/* | Toutes les ressources de déclencheur sous la fonction spécifiée |
fc:CreateTrigger | acs:fc:{region}:{uid}:functions/{functionName}/triggers/{triggerName} | Ressources de déclencheur spécifiques sous la fonction spécifiée |
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 | Toutes les versions |
fc:ListFunctionVersions | acs:fc:{region}:{uid}:functions/{functionName}/versions/* | |
fc:DeleteFunctionVersion | acs:fc:{region}:{uid}:functions/{functionName}/versions/{versionId} | Versions spécifiées |
fc:ListVpcBindings | acs:fc:{region}:{uid}:functions/{functionName}/vpc-bindings/* | Configurations 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} | Tout le code de fonction |
fc:GetFunctionAsyncInvokeConfig | acs:fc:{region}:{uid}:functions/{functionName} acs:fc:{region}:{uid}:functions/{functionName}/{qualifier} | Toutes les ressources de fonction |
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} | Tous les layers |
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} | Configurations d'instance provisionnée |
Vous pouvez utiliser la stratégie personnalisée précédente pour configurer les autorisations permettant d'appeler la fonction demo dans la région Chine (Hangzhou). L'extrait de code suivant présente les détails :
{
"Version": "1",
"Statement": [
{
"Action": [
"fc:InvokeFunction"
],
"Resource": "acs:fc:cn-hangzhou:*:functions/demo",
"Effect": "Allow"
}
]
}
Exemples de politiques
Politique personnalisée pour créer et interroger des services, ainsi que pour créer et appeler des fonctions
{
"Version": "1",
"Statement": [{
"Action": [
"fc:CreateFunction",
"fc:GetFunction",
"fc:InvokeFunction"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"ram:PassRole"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
Politique personnalisée pour accéder aux journaux
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"log:ListProject",
"log:ListLogStore"
],
"Resource": "acs:log:*:*:project/*"
}
]
}
Politique personnalisée pour accéder aux déclencheurs d'événements OSS
{
"Statement": [
{
"Action": [
"oss:ListBucket",
"oss:GetBucketEventNotification",
"oss:PutBucketEventNotification",
"oss:DeleteBucketEventNotification"
],
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "1"
}
Politique personnalisée pour interdire la création de services pouvant accéder à 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"
}
}
}
]
}
Politique personnalisée pour interdire la création de services non autorisés à accéder à 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"
}
}
}
]
}
Politique personnalisée pour interdire la création de déclencheurs accessibles via 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"
}
}
}
]
}
Cette politique empêche les utilisateurs de définir le paramètre disableURLInternet sur false lors des opérations CreateTrigger et UpdateTrigger. La valeur de ce paramètre ne peut être définie que sur true, ce qui indique que les noms de domaine publics par défaut ne sont pas pris en charge. Cette restriction s'applique uniquement aux déclencheurs HTTP. Pour plus d'informations, consultez la rubrique HTTPTriggerConfig.
Dans ce cas, l'erreur 403 AccessDenied est renvoyée si vous définissez disableURLInternet=false. L'exemple de code suivant illustre ce scénario :
{
"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]'"
}
Politique personnalisée pour interdire la création de déclencheurs accessibles en mode anonyme
{
"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"
}
}
}
]
}
Cette politique interdit aux utilisateurs de définir le paramètre authType sur anonymous lors des opérations CreateTrigger et UpdateTrigger. La valeur de ce paramètre ne peut être définie que sur function, ce qui spécifie qu'une authentification est requise. Cette restriction s'applique uniquement aux déclencheurs HTTP. Pour plus d'informations, consultez la rubrique HTTPTriggerConfig.
Dans ce cas, l'erreur 403 AccessDenied est renvoyée si vous définissez authType=anonymous. L'exemple de code suivant illustre ce scénario :
{
"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]'"
}
Politique personnalisée pour interdire la création de noms de domaine personnalisés autorisant les requêtes 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"
}
}
}
]
}
Cette politique empêche les utilisateurs de définir le paramètre protocol sur HTTP ou HTTP,HTTPS lors des opérations CreateCustomDomain et UpdateCustomDomain. Vous ne pouvez définir ce paramètre que sur HTTPS.
L'erreur 403 AccessDenied est renvoyée si vous tentez d'activer HTTP pour un nom de domaine personnalisé. L'exemple de code suivant illustre ce scénario :
{
"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]'"
}