如何在CentOS 8| CentOS 7上安装AWS SSM代理

时间:2020-02-23 14:31:08  来源:igfitidea点击:

本文为用户提供有关如何在CentOS 8和CentOS 7 EC2 Linux实例上安装AWS SSM代理的指南。

SSM代表系统管理器。它是用于管理AWS上服务器的管理服务。系统管理器的特定用例是:

假设用户要使用相同的配置来配置多个服务器/ec2实例。用户可以使用系统管理器一次在所有服务器上同时运行命令,而不必一次在每个实例上都这样做。

它也是使我们要在ec2实例上执行的任务自动化的出色工具。例如,更新操作系统版本或者确保ec2实例符合某些管理策略。

Systems Manager还允许用户连接到实例,而无需使用ssh或者具有KeyPair。这对安全性有好处,因为现在我们不必打开端口22进行ssh访问。

CentOS 8| CentOS 7上的SSM代理安装准备工作

设置要求为:一个AWS账户。一个有权在AWS上创建资源的用户;一个IDE来编写和编辑CloudFormation模板。

创建EC2实例,配置文件和角色

我没有使用手动创建单个资源的方法,而是使用了一个CloudFormation模板。模板将创建;一个SSM Role.EC2实例配置文件,它将使用上面创建的角色.EC2实例安全组,最后是安装了SSM代理的EC2实例。

这是我的CloudFormation模板:

AWSTemplateFormatVersion: "2010-09-09"
Description: "Template to create Centos ec2 instance and install SSM on it"
Parameters:
    VPC:
        Type: String
        Description: The vpc to launch the service
        Default: vpc-ID

    PublicSubnet1:
        Type: String
        Description: The subnet where to launch the ec2
        Default: subnet-ID

Resources:
    IAMInstanceRole:
        Type: 'AWS::IAM::Role'
        Properties:
          Description: The SSM Instance Profile
          RoleName: AWSEC2SSMtest
          AssumeRolePolicyDocument:
            Version: 2012-10-17
            Statement:
              - Effect: Allow
                Principal:
                  Service:
                  - ec2.amazonaws.com
                Action:
                  - 'sts:AssumeRole'
          ManagedPolicyArns:
            - arn:aws:iam::aws:policy/service-role/AmazonEC2RoleforSSM
            - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
          Tags: 
            - 
              Key: "Project"
              Value: "test-blog"
            - 
              Key: "Environment"
              Value: "test"
            - 
              Key: "createdBy"
              Value: "Maureen Barasa"
            - 
              Key: "Name"
              Value: "AWSEC2SSMtest"

    IAMInstanceProfile:
        Type: AWS::IAM::InstanceProfile
        Properties: 
            InstanceProfileName: AWSEC2SSMtest
            Roles: 
             - !Ref IAMInstanceRole
                
    CentosServer:
        Type: "AWS::EC2::Instance"
        Properties:
            ImageId: "ami-ID"
            InstanceType: "t2.micro"
            KeyName: "test-key"
            AvailabilityZone: !Sub "${AWS::Region}a"
            Tenancy: "default"
            DisableApiTermination: true
            SubnetId: !Ref PublicSubnet1
            EbsOptimized: false
            SecurityGroupIds: 
              - !Ref CentosSecurityGroup
            SourceDestCheck: true
            BlockDeviceMappings: 
              - 
                DeviceName: "/dev/xvda"
                Ebs: 
                    Encrypted: false
                    VolumeSize: 20
                    VolumeType: "gp2"
                    DeleteOnTermination: true
            UserData: 
                "Fn::Base64":
                    !Sub |
                       #!/bin/bash
                       cd /tmp
                       sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
                       sudo systemctl enable amazon-ssm-agent
                       sudo systemctl start amazon-ssm-agent
            IamInstanceProfile: !Ref IAMInstanceProfile
            Tags: 
              - 
                Key: "Project"
                Value: "test-blog"
              - 
                Key: "Environment"
                Value: "test"
              - 
                Key: "createdBy"
                Value: "Maureen Barasa"
              - 
                Key: "Name"
                Value: "Test-Centos"
                
    CentosSecurityGroup:
        Type: "AWS::EC2::SecurityGroup"
        Properties:
            GroupDescription: "Security Group to control access to the test Centos server"
            GroupName: "Test-Centos-SG"
            VpcId: !Ref VPC
            SecurityGroupIngress: 
              - 
                CidrIp: 0.0.0.0/0
                FromPort: 22
                IpProtocol: "tcp"
                ToPort: 22
              - 
                CidrIp: 0.0.0.0/0
                FromPort: 443
                IpProtocol: "tcp"
                ToPort: 443                    
Outputs:
  Server1:
    Description: The created studio server
    Value: !Ref CentosServer
    
  SecurityGroup:
    Description: The server sg
    Value: !Ref CentosSecurityGroup

参数部分允许用户输入自己的值。对于我们的情况,用户应使用其AWS账户中的ID替换VPC和子网ID。

在资源部分中,模板首先创建一个实例角色。实例角色具有一个信任策略,该信任策略允许ec2实例承担该角色。此外,该角色还将添加两个策略。 AmazonEC2RoleforSSM和AmazonSSMManagedInstanceCore。用户可以根据自己的选择自定义角色名称和标签。

接下来,模板将创建一个实例配置文件,并将上面创建的角色添加到它。同样,用户可以在此处自定义角色的名称。 N/B:实例配置文件和角色名称应该相同。否则,ec2实例将看不到角色。

最后,模板将创建ec2实例安全组和ec2实例。使用资源的user-data属性安装SSM代理。用户可以自定义名称和标签以为其选择合适的选项。另外,请确保使用与AWS账户关联的Centos AMI替换AMI-ID。

执行CloudFormation模板

可以使用CodePipeline部署模板,也可以在CloudFormation控制台上手动部署模板。在本教程中,我们将使用CloudFormation控制台。

在CloudFormation控制台上,单击创建堆栈。

然后,选择使用新模板和资源创建堆栈。使用新资源创建堆栈

接下来选择模板。为此,我们将上传我们创建的模板。

在打开的选项卡上,将要求我们提供堆栈的名称并输入模板参数。输入自定义值的详细信息,然后单击下一步。输入模板参数和堆栈名称

下一个选项卡允许用户为其堆栈添加标签。它还为用户提供了为其堆栈配置策略和通知的选项。完成后,单击下一步。它将为我们提供一个"查看"选项卡,用户可以其中查看他们所做的所有配置的整体视图。如果用户对显示的内容满意,则可以单击创建堆栈。然后,CloudFormation将开始为我们创建资源。

手动安装SSM代理

如果在创建带CloudFormation的角色并添加到EC2实例后,希望手动安装SSM代理,请在VM控制台中运行以下命令。

sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
sudo systemctl enable amazon-ssm-agent
sudo systemctl start amazon-ssm-agent