Utilisez des stratégies RAM pour restreindre l'exécution des commandes Cloud Assistant aux utilisateurs standards, tels que les utilisateurs non-root ou non-système.
Prérequis
Un utilisateur standard doit être créé sur l'instance ECS. Cette rubrique utilise user01 et user02 comme exemples.
Contexte
Par défaut, Cloud Assistant exécute les commandes avec les privilèges les plus élevés sur une instance ECS : en tant que root sous Linux et system sous Windows.
Vous pouvez utiliser une stratégie RAM pour interdire à root ou system d'exécuter des commandes Cloud Assistant et accorder des autorisations uniquement aux utilisateurs standards tels que user01 et user02.
Configurer un utilisateur standard pour les instances Linux
Suivez ces étapes pour empêcher un utilisateur RAM d'exécuter des commandes Cloud Assistant en tant que root sur les instances Linux.
Connectez-vous à la console RAM avec votre compte Alibaba Cloud.
-
Exemple de paramètres pour l'utilisateur RAM :
Paramètre
Exemple
Logon name
commandUser
Display name
commandUser
Access mode
Sélectionnez à la fois Console Access et Programmatic Access (cette rubrique utilise les deux).
RemarqueSélectionnez uniquement le mode d'accès nécessaire afin de respecter le principe du moindre privilège.
Set password
Sélectionnez Automatically generate password.
Password reset
Sélectionnez Required at Next Logon.
MFA
Sélectionnez Not Required.
Enregistrez le nom d'utilisateur, le mot de passe et l'AccessKey après la création.
-
Créez une stratégie personnalisée pour Cloud Assistant.
Cliquez sur l'onglet Script. Dans le document de stratégie, configurez les autorisations API ECS Cloud Assistant avec les actions suivantes :
ecs:DescribeInstancesecs:DescribeTagKeysecs:CreateCommandecs:DescribeCommandsecs:InvokeCommandecs:RunCommandecs:DeleteCommandecs:DescribeInvocationsecs:DescribeInvocationResultsecs:StopInvocationecs:DescribeCloudAssistantStatusecs:InstallCloudAssistant
Définissez Resource sur
acs:ecs:*:*:instance/*.Créez une stratégie nommée
commandUserPolicy. Deux exemples suivent ; modifiez-les selon vos besoins.-
Autorisez
user01etuser02à exécuter des commandes Cloud Assistant :{ "Statement": [ { "Effect": "Allow", "Action": [ "ecs:InvokeCommand", "ecs:RunCommand" ], "Resource": [ "acs:ecs:*:*:instance/*", "acs:ecs:*:*:command/*" ], "Condition": { "StringEquals": { "ecs:CommandRunAs": [ "user01", "user02" ] } } } ], "Version": "1" }RemarqueAjoutez ou modifiez les noms d'utilisateur dans le bloc
Conditionpour accorder des autorisations à d'autres utilisateurs. -
Interdisez à
rootetsystemd'exécuter des commandes Cloud Assistant :{ "Statement": [ { "Effect": "Allow", "Action": [ "ecs:InvokeCommand", "ecs:RunCommand" ], "Resource": [ "acs:ecs:*:*:instance/*", "acs:ecs:*:*:command/*" ], "Condition": { "StringNotEqualsIgnoreCase": { "ecs:CommandRunAs": [ "system", "root" ] } } } ], "Version": "1" }RemarqueAjoutez ou modifiez les noms d'utilisateur dans le bloc
Conditionpour restreindre d'autres utilisateurs.
-
Accordez à l'utilisateur RAM des autorisations ECS en lecture seule et des autorisations Cloud Assistant.
Lecture seule ECS : sélectionnez AliyunECSReadOnlyAccess.
Cloud Assistant : sélectionnez commandUserPolicy (créée à l'étape précédente).
Connectez-vous à la console Alibaba Cloud en tant qu'utilisateur RAM.
-
Vérifiez en exécutant une commande Cloud Assistant. Consultez la rubrique Créer et exécuter des commandes.
-
Dans la console, spécifiez l'utilisateur pour exécuter la commande.
user01exécute la commande avec succès, maisrootrenvoie une erreur. -
Dans la CLI,
user01exécute la commande avec succès, maisrootrenvoie une erreur :shell@Alicloud:~$ aliyun ecs RunCommand --RegionId 'cn-hangzhou' \ > --Name 'ping' \ > --Type 'RunShellScript' \ > --CommandContent 'ping aliyun.com' \ > --Timeout '60' \ > --ContentEncoding 'PlainText' \ > --InstanceId.1 'i-bp10s90xxxxxxxxn' \ > --Username 'user01' { "CommandId": "c-hz01ai1xxxxxxxxc", "InvokeId": "t-hz01ai18xxxxxxxx", "RequestId": "B352A46C-3CFE-4E72-9F03-BFC0C0D3C590" } shell@Alicloud:~$ aliyun ecs RunCommand --RegionId 'cn-hangzhou' \ > --Name 'ping' \ > --Type 'RunShellScript' \ > --CommandContent 'ping aliyun.com' \ > --Timeout '60' \ > --ContentEncoding 'PlainText' \ > --InstanceId.1 'i-bp10s90xxxxxxxxn' \ > --Username 'root' ERROR: SDK.ServerError ErrorCode: Forbidden.RAM Recommend: https://error-center.alibabacloud.com/status/search?Keyword=Forbidden.RAM&source=PopGw RequestId: 9FE8BCB7-AAFD-4401-B28D-8276411703CD Message: User not authorized to operate on the specified resource, or this API doesn't support RAM. shell@Alicloud:~$
-
Configurer un utilisateur standard pour les instances Windows
L'exécution de commandes Cloud Assistant sur une instance Windows nécessite un nom d'utilisateur et un mot de passe. Stockez le mot de passe de connexion Windows en tant que paramètre chiffré dans CloudOps Orchestration Service et chiffrez-le avec Key Management Service (KMS). Consultez les rubriques Présentation de CloudOps Orchestration Service et Présentation de Key Management Service.
Suivez ces étapes pour empêcher un utilisateur RAM d'exécuter des commandes Cloud Assistant en tant que root ou system.
Connectez-vous à la console RAM avec votre compte Alibaba Cloud.
-
Exemple de paramètres pour l'utilisateur RAM :
Paramètre
Exemple
Logon name
commandUser
Display name
commandUser
Access mode
Sélectionnez à la fois Console Access et Programmatic Access (cette rubrique utilise les deux).
RemarqueSélectionnez uniquement le mode d'accès nécessaire afin de respecter le principe du moindre privilège.
Set password
Sélectionnez Automatically generate password.
Password reset
Sélectionnez Required at Next Logon.
MFA
Sélectionnez Not Required.
Enregistrez le nom d'utilisateur, le mot de passe et l'AccessKey après la création.
-
Créez des stratégies personnalisées pour Cloud Assistant et KMS.
-
Autorisations Cloud Assistant :
Créez une stratégie nommée
commandUserPolicy. Deux exemples suivent ; modifiez-les selon vos besoins.-
Autorisez
user01etuser02à exécuter des commandes Cloud Assistant :{ "Statement": [ { "Effect": "Allow", "Action": [ "ecs:InvokeCommand", "ecs:RunCommand" ], "Resource": [ "acs:ecs:*:*:instance/*", "acs:ecs:*:*:command/*" ], "Condition": { "StringEquals": { "ecs:CommandRunAs": [ "user01", "user02" ] } } } ], "Version": "1" }RemarqueAjoutez ou modifiez les noms d'utilisateur dans le bloc
Conditionpour accorder des autorisations à d'autres utilisateurs. -
Interdisez à
rootetsystemd'exécuter des commandes Cloud Assistant :{ "Statement": [ { "Effect": "Allow", "Action": [ "ecs:InvokeCommand", "ecs:RunCommand" ], "Resource": [ "acs:ecs:*:*:instance/*", "acs:ecs:*:*:command/*" ], "Condition": { "StringNotEqualsIgnoreCase": { "ecs:CommandRunAs": [ "system", "root" ] } } } ], "Version": "1" }RemarqueAjoutez ou modifiez les noms d'utilisateur dans le bloc
Conditionpour restreindre d'autres utilisateurs.
-
-
Autorisations KMS :
Créez une stratégie nommée
kmsPolicy. Consultez la rubrique Exemples de stratégies d'autorisation courantes.{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "kms:List*", "kms:Describe*", "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "*" ] } ] }
-
-
Accordez à l'utilisateur RAM des autorisations pour ECS, OOS, Cloud Assistant et KMS.
Lecture seule ECS : sélectionnez AliyunECSReadOnlyAccess.
Lecture seule OOS : sélectionnez AliyunOOSReadOnlyAccess.
Cloud Assistant : sélectionnez commandUserPolicy (créée à l'étape précédente).
KMS : sélectionnez kmsPolicy (créée à l'étape précédente).
-
Configurez un rôle RAM pour l'instance Windows.
-
Créez une stratégie personnalisée pour le rôle RAM.
Exemple de stratégie :
{ "Version": "1", "Statement": [ { "Action": [ "kms:GetSecretValue" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "oos:GetSecretParameter" ], "Effect": "Allow", "Resource": "*" } ] } -
Exemple de configuration :
Paramètre
Exemple
Trusted entity type
Sélectionnez Alibaba Cloud Service.
Trusted service
Sélectionnez ECS.
Role name
AxtSecretRamRole
Associez le rôle RAM à l'instance ECS.
-
-
Créez un paramètre chiffré dans OOS pour stocker le mot de passe de connexion Windows.
RemarqueLe paramètre chiffré OOS doit se trouver dans la même région que l'instance ECS.
Exemple de valeurs pour
user01:Paramètre
Exemple
Parameter name
axtSecretPassword
KMS key ID
Utilisez la valeur par défaut Default Service CMK.
Value
Le mot de passe de connexion
user01. Connectez-vous à la console Alibaba Cloud en tant qu'utilisateur RAM.
-
Vérifiez en exécutant une commande Cloud Assistant. Consultez la rubrique Créer et exécuter des commandes.
Exécutez une commande Cloud Assistant sur l'instance Windows pour vérifier les autorisations.
-
Dans la console, spécifiez l'utilisateur et le paramètre de mot de passe chiffré OOS.
user01exécute la commande avec succès, maissystemrenvoie une erreur. -
Dans la CLI,
user01exécute la commande avec succès, maissystemrenvoie une erreur :shell@AliCloud:~$ aliyun ecs RunCommand --RegionId 'cn-hangzhou' \ > --Name 'ping' \ > --Type 'RunPowerShellScript' \ > --CommandContent 'ping aliyun.com' \ > --Timeout '60' \ > --ContentEncoding 'PlainText' \ > --InstanceId.1 'i-bp1h21856zxxx' \ > --Username 'user01' \ > --WindowsPasswordName 'axtSecretPassword' { "CommandId": "c-hz0xxxxo2yo", "InvokeId": "t-hz01xxxxs00", "RequestId": "2D92EEDE-6FCA-47F9-81B1-2262EEB3376F" } shell@AliCloud:~$ aliyun ecs RunCommand --RegionId 'cn-hangzhou' \ > --Name 'ping' \ > --Type 'RunPowerShellScript' \ > --CommandContent 'ping aliyun.com' \ > --Timeout '60' \ > --ContentEncoding 'PlainText' \ > --InstanceId.1 'i-bp1h2lxxx_xxxl' \ > --Username 'system' \ > --WindowsPasswordName 'axtSecretPassword' ERROR: SDK.ServerError ErrorCode: Forbidden.RAM Recommend: https://error-center.alibabacloud.com/status/search?Keyword=Forbidden.RAM&source=PopGw RequestId: 229A382B-FA81-4115-855A-C8F52EE29FE1 Message: User not authorized to operate on the specified resource, or this API doesn't support RAM. shell@AliCloud:~$
-