Control del acceso a los periodos de mantenimiento mediante la AWS CLI - AWS Systems Manager

Control del acceso a los periodos de mantenimiento mediante la AWS CLI

En los siguientes procedimientos se explica cómo se utiliza la AWS Command Line Interface (AWS CLI) para crear los permisos y los roles necesarios para Maintenance Windows, una función de AWS Systems Manager.

Tarea 1: crear archivos de política de confianza y política administrada por el cliente en formato JSON

Las tareas de periodo de mantenimiento requieren un rol de IAM para proporcionar los permisos necesarios para su ejecución en los recursos de destino. Los permisos se conceden mediante una política de IAM asociada al rol. El contenido de esta política lo determinan los tipos de tareas que se ejecutan y el resto de requisitos operativos. Proporcionamos una política básica que se puede adaptar a sus necesidades. En función de las tareas y los tipos de tareas que ejecuten los periodos de mantenimiento, es posible que no necesite todos los permisos de esta política, o que tenga que incluir permisos adicionales.

En esta tarea, debe especificar los permisos necesarios para el rol del periodo de mantenimiento personalizado en un par de archivos JSON. Más tarde adjuntará esta política al rol que cree en Tarea 2: crear y verificar un rol de servicio personalizado para el periodo de mantenimiento mediante la AWS CLI.

Para crear archivos de política de confianza y política administrada por el cliente
  1. Copie y pegue la siguiente política de confianza en un archivo de texto. Guarde este archivo con el siguiente nombre y extensión de archivo: mw-role-trust-policy.json.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ssm.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. Copie y pegue la siguiente política de JSON en un archivo de texto diferente. En el mismo directorio en el que creó el primer archivo, guárdelo con el siguiente nombre y extensión de archivo: mw-role-custom-policy.json.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:SendCommand", "ssm:CancelCommand", "ssm:ListCommands", "ssm:ListCommandInvocations", "ssm:GetCommandInvocation", "ssm:GetAutomationExecution", "ssm:StartAutomationExecution", "ssm:ListTagsForResource", "ssm:GetParameters" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "states:DescribeExecution", "states:StartExecution" ], "Resource": [ "arn:aws:states:*:*:execution:*:*", "arn:aws:states:*:*:stateMachine:*" ] }, { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:*:*:function:*" ] }, { "Effect": "Allow", "Action": [ "resource-groups:ListGroups", "resource-groups:ListGroupResources" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "tag:GetResources" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": [ "ssm.amazonaws.com" ] } } } ] }
  3. Modifique el contenido de mw-role-custom-policy.json de acuerdo con las necesidades de las tareas de mantenimiento que ejecute en la cuenta. Los cambios que realice son específicos de las operaciones planificadas.

    Por ejemplo:

    • Puede proporcionar nombres de recursos de Amazon (ARN) para funciones y máquinas de estado específicas en lugar de utilizar calificadores comodín (*).

    • Si no tiene previsto ejecutar tareas de AWS Step Functions, puede quitar los permisos y ARN de states.

    • Si no tiene previsto ejecutar tareas de AWS Lambda, puede quitar los permisos y ARN de lambda.

    • Si no tiene previsto ejecutar tareas de automatización, puede quitar los permisos ssm:GetAutomationExecution y ssm:StartAutomationExecution.

    • Agregue permisos adicionales que puedan ser necesarios para que se ejecuten las tareas. Por ejemplo, algunas acciones de Automation trabajan con pilas de AWS CloudFormation. Por lo tanto, los permisos cloudformation:CreateStack, cloudformation:DescribeStacks y cloudformation:DeleteStack son obligatorios.

      Otro ejemplo es el manual de procedimientos de Automation AWS-CopySnapshot, que requiere permisos para crear una instantánea de Amazon Elastic Block Store (Amazon EBS). Por lo tanto, el rol de servicio necesita los permisos ec2:CreateSnapshot.

      Para obtener información acerca de los permisos de rol que necesitan los manuales de procedimientos de automatización, consulte las descripciones de documentos en la Referencia de manuales de procedimientos de AWS Systems Manager automatización.

    Guarde el archivo de nuevo después de realizar los cambios necesarios.

Tarea 2: crear y verificar un rol de servicio personalizado para el periodo de mantenimiento mediante la AWS CLI

La política que se crea en la tarea anterior se asocia al rol de servicio del periodo de mantenimiento que se crea en esta tarea. Cuando los usuarios registran una tarea de periodo de mantenimiento, especifican este rol de IAM como parte de la configuración de la tarea. Los permisos de este rol autorizan a Systems Manager a ejecutar tareas en periodos de mantenimiento en su nombre.

importante

Antes, la consola de Systems Manager ofrecía la posibilidad de elegir el rol vinculado a servicio de IAM AWSServiceRoleForAmazonSSM administrado de AWS que utilizar como rol de mantenimiento para las tareas. Ya no se recomienda utilizar este rol y su política asociada, AmazonSSMServiceRolePolicy, para tareas de periodo de mantenimiento. Si está utilizando actualmente este rol para tareas de periodo de mantenimiento, le recomendamos que deje de hacerlo. En su lugar, cree su propio rol de IAM que permita la comunicación entre Systems Manager y otros Servicios de AWS cuando se ejecuten las tareas de periodo de mantenimiento.

En esta tarea, ejecute comandos de la CLI para crear su rol de servicio del periodo de mantenimiento mediante la adición del contenido de la política de los archivos JSON que creó.

Cree un rol de servicio personalizado para el periodo de mantenimiento mediante la AWS CLI
  1. Abra la AWS CLI y ejecute el siguiente comando en el directorio en el que guardó mw-role-custom-policy.json y mw-role-trust-policy.json. El comando crea un rol de servicio del periodo de mantenimiento llamado my-maintenance-window-role y le asocia la política de confianza.

    Linux & macOS
    aws iam create-role \ --role-name "my-maintenance-window-role" \ --assume-role-policy-document file://mw-role-trust-policy.json
    Windows
    aws iam create-role ^ --role-name "my-maintenance-window-role" ^ --assume-role-policy-document file://mw-role-trust-policy.json

    El sistema devuelve información similar a la siguiente.

    {
        "Role": {
            "AssumeRolePolicyDocument": {
                "Version": "2012-10-17",
                "Statement": [
                    {
                        "Action": "sts:AssumeRole",
                        "Effect": "Allow",
                        "Principal": {
                            "Service": "ssm.amazonaws.com"
                        }
                    }
                ]
            },
            "RoleId": "AROAIIZKPBKS2LEXAMPLE",
            "CreateDate": "2024-08-19T03:40:17.373Z",
            "RoleName": "my-maintenance-window-role",
            "Path": "/",
            "Arn": "arn:aws:iam::123456789012:role/my-maintenance-window-role"
        }
    }
    nota

    Anote los valores de RoleName y Arn. Los incluirá en el siguiente comando.

  2. Ejecute el siguiente comando para asociar la política administrada por el cliente al rol. Reemplace el marcador de posición account-id con su propio ID de la Cuenta de AWS

    Linux & macOS
    aws iam attach-role-policy \ --role-name "my-maintenance-window-role" \ --policy-arn "arn:aws:iam::account-id:policy/mw-role-custom-policy.json"
    Windows
    aws iam attach-role-policy ^ --role-name "my-maintenance-window-role" ^ --policy-arn "arn:aws:iam::account-id:policy/mw-role-custom-policy.json"
  3. Ejecute el siguiente comando para comprobar que el rol se ha creado y que la política de confianza se ha asociado.

    aws iam get-role --role-name my-maintenance-window-role

    El comando devuelve información similar a la siguiente:

    {
        "Role": {
            "Path": "/",
            "RoleName": "my-maintenance-window-role",
            "RoleId": "AROA123456789EXAMPLE",
            "Arn": "arn:aws:iam::123456789012:role/my-maintenance-window-role",
            "CreateDate": "2024-08-19T14:13:32+00:00",
            "AssumeRolePolicyDocument": {
                "Version": "2012-10-17",
                "Statement": [
                    {
                        "Effect": "Allow",
                        "Principal": {
                            "Service": "ssm.amazonaws.com"
                        },
                        "Action": "sts:AssumeRole"
                    }
                ]
            },
            "MaxSessionDuration": 3600,
            "RoleLastUsed": {
                "LastUsedDate": "2024-08-19T14:30:44+00:00",
                "Region": "us-east-2"
            }
        }
    }
  4. Ejecute el siguiente comando para comprobar que la política administrada por el cliente se ha asociado al rol.

    aws iam list-attached-role-policies --role-name my-maintenance-window-role

    El comando devuelve información similar a la siguiente:

    {
        "AttachedPolicies": [
            {
                "PolicyName": "mw-role-custom-policy",
                "PolicyArn": "arn:aws:iam::123456789012:policy/mw-role-custom-policy"
            }
        ]
    }

Tarea 3: conceder permisos a usuarios específicos para que registren tareas del periodo de mantenimiento mediante la AWS CLI

Conceder a los usuarios permisos para acceder al rol de servicio del periodo de mantenimiento personalizado les permite utilizarlo con sus tareas de periodos de mantenimiento. Esto se suma a los permisos que ya se les haya concedido para utilizar los comandos de la API de Systems Manager para la capacidad de Maintenance Windows. Este rol de IAM transmite los permisos necesarios para ejecutar una tarea de periodo de mantenimiento. Como resultado, un usuario no puede registrar tareas con un periodo de mantenimiento mediante el rol de servicio personalizado sin la posibilidad de transferir esos permisos de IAM.

Cuando registra una tarea en un periodo de mantenimiento, debe especificar un rol de servicio para ejecutar las operaciones de la tarea real. Este es el rol que el servicio asume cuando ejecuta las tareas en su nombre. Antes de eso, para registrar la tarea en sí, asigne la política de IAM PassRole a una entidad de IAM (como un usuario o un grupo). Esto permite que la entidad de IAM especifique, como parte del registro de esas tareas con el periodo de mantenimiento, el rol que se debe usar al ejecutar tareas. Para obtener más información, consulte Concesión de permisos a un usuario para transferir un rol a un Servicio de AWS en la Guía del usuario de IAM.

Para configurar los permisos para usuarios con autorización para registrar tareas de periodos de mantenimiento mediante la AWS CLI
  1. Copie y pegue la siguiente política de AWS Identity and Access Management (IAM) en un editor de texto y guárdela con el nombre y la extensión de archivo siguientes: mw-passrole-policy.json.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::account-id:role/my-maintenance-window-role" }, { "Effect": "Allow", "Action": "iam:ListRoles", "Resource": "arn:aws:iam::account-id:role/" }, { "Effect": "Allow", "Action": "iam:ListRoles", "Resource": "arn:aws:iam::account-id:role/aws-service-role/ssm.amazonaws.com/" } ] }

    Reemplace my-maintenance-window-role con el nombre del rol de la ventana de mantenimiento personalizada que ha creado antes.

    Reemplace account-id por el ID de su Cuenta de AWS. Al agregar este permiso para el recurso arn:aws:iam::account-id:role/ se permite a los usuarios del grupo ver y elegir entre los roles de cliente en la consola cuando crean una tarea del periodo de mantenimiento. La adición de este permiso para arn:aws:iam::account-id:role/aws-service-role/ssm.amazonaws.com/ permite a los usuarios del grupo elegir el rol vinculado al servicio de Systems Manager en la consola cuando crean una tarea del periodo de mantenimiento.

  2. Abra la AWS CLI.

  3. En función de si el permiso se está asignando a una entidad de IAM (usuario o grupo), ejecute uno de los siguientes comandos.

    • Para una entidad de IAM:

      Linux & macOS
      aws iam put-user-policy \ --user-name "user-name" \ --policy-name "policy-name" \ --policy-document file://path-to-document
      Windows
      aws iam put-user-policy ^ --user-name "user-name" ^ --policy-name "policy-name" ^ --policy-document file://path-to-document

      En user-name, especifique el usuario que asigna tareas a periodos de mantenimiento. En policy-name, especifique el nombre que desea utilizar para identificar la política, por ejemplo my-iam-passrole-policy. En path-to-document (ruta-del-documento), especifique la ruta del archivo que guardó en el paso 1. Por ejemplo: file://C:\Temp\mw-passrole-policy.json.

      nota

      Para conceder acceso a un usuario para que registre tareas en periodos de mantenimiento mediante la consola de Systems Manager, también debe asignar la política AmazonSSMFullAccess a su usuario (o una política de IAM que proporcione un pequeño conjunto de permisos de acceso para Systems Manager que cubra las tareas de periodos de mantenimiento). Ejecute el siguiente comando para asignar la política AmazonSSMFullAccess a su usuario.

      Linux & macOS
      aws iam attach-user-policy \ --policy-arn "arn:aws:iam::aws:policy/AmazonSSMFullAccess" \ --user-name "user-name"
      Windows
      aws iam attach-user-policy ^ --policy-arn "arn:aws:iam::aws:policy/AmazonSSMFullAccess" ^ --user-name "user-name"
    • Para un grupo de IAM:

      Linux & macOS
      aws iam put-group-policy \ --group-name "group-name" \ --policy-name "policy-name" \ --policy-document file://path-to-document
      Windows
      aws iam put-group-policy ^ --group-name "group-name" ^ --policy-name "policy-name" ^ --policy-document file://path-to-document

      En group-name, especifique el grupo cuyos miembros asignarán tareas de periodos de mantenimiento. En policy-name, especifique el nombre que desea utilizar para identificar la política, por ejemplo my-iam-passrole-policy. En path-to-document (ruta-del-documento), especifique la ruta del archivo que guardó en el paso 1. Por ejemplo: file://C:\Temp\mw-passrole-policy.json.

      nota

      Para conceder acceso a los miembros de un grupo de modo que puedan registrar tareas de periodos de mantenimiento mediante la consola de Systems Manager, también debe asignar la política AmazonSSMFullAccess al grupo. Ejecute el siguiente comando para asignar esta política al grupo.

      Linux & macOS
      aws iam attach-group-policy \ --policy-arn "arn:aws:iam::aws:policy/AmazonSSMFullAccess" \ --group-name "group-name"
      Windows
      aws iam attach-group-policy ^ --policy-arn "arn:aws:iam::aws:policy/AmazonSSMFullAccess" ^ --group-name "group-name"
  4. Ejecute el siguiente comando para verificar que la política se haya asignado al grupo.

    Linux & macOS
    aws iam list-group-policies \ --group-name "group-name"
    Windows
    aws iam list-group-policies ^ --group-name "group-name"

Tarea 4: impida que usuarios específicos registren las tareas de periodos de mantenimiento mediante la AWS CLI

Puede denegar el permiso ssm:RegisterTaskWithMaintenanceWindow a los usuarios de la Cuenta de AWS que no desee que registren tareas en periodos de mantenimiento. Esto proporciona una capa adicional de protección frente a usuarios que no deban registrar tareas de periodo de mantenimiento.

En función de si el permiso ssm:RegisterTaskWithMaintenanceWindow se deniega a un usuario individual o a un grupo, utilice uno de los siguientes procedimientos para evitar que los usuarios registren tareas con un periodo de mantenimiento.

Para configurar permisos para usuarios que no pueden registrar tareas de periodos de mantenimiento mediante la AWS CLI
  1. Copie y pegue la siguiente política de IAM en un editor de texto y guárdela con el nombre y la extensión de archivo deny-mw-tasks-policy.json.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ssm:RegisterTaskWithMaintenanceWindow", "Resource": "*" } ] }
  2. Abra la AWS CLI.

  3. En función de si el permiso se está asignando a una entidad de IAM (usuario o grupo), ejecute uno de los siguientes comandos.

    • Para un usuario:

      Linux & macOS
      aws iam put-user-policy \ --user-name "user-name" \ --policy-name "policy-name" \ --policy-document file://path-to-document
      Windows
      aws iam put-user-policy ^ --user-name "user-name" ^ --policy-name "policy-name" ^ --policy-document file://path-to-document

      En user-name, especifique el usuario para que no pueda asignar tareas de periodos de mantenimiento. En policy-name, especifique el nombre que desea utilizar para identificar la política, por ejemplo my-deny-mw-tasks-policy. En path-to-document (ruta-del-documento), especifique la ruta del archivo que guardó en el paso 1. Por ejemplo: file://C:\Temp\deny-mw-tasks-policy.json.

    • Para un grupo:

      Linux & macOS
      aws iam put-group-policy \ --group-name "group-name" \ --policy-name "policy-name" \ --policy-document file://path-to-document
      Windows
      aws iam put-group-policy ^ --group-name "group-name" ^ --policy-name "policy-name" ^ --policy-document file://path-to-document

      En group-name, especifique el grupo para que sus miembros no puedan asignar tareas de periodos de mantenimiento. En policy-name, especifique el nombre que desea utilizar para identificar la política, por ejemplo my-deny-mw-tasks-policy. En path-to-document (ruta-del-documento), especifique la ruta del archivo que guardó en el paso 1. Por ejemplo: file://C:\Temp\deny-mw-tasks-policy.json.

  4. Ejecute el siguiente comando para verificar que la política se haya asignado al grupo.

    Linux & macOS
    aws iam list-group-policies \ --group-name "group-name"
    Windows
    aws iam list-group-policies ^ --group-name "group-name"