システムマネージャを介したリモートアクセスプライベートEC 2インスタンス

2865 ワード

概要


システムマネージャは、SSHとオープンポート22を使用せずにEC 2インスタンス(プライベートおよびパブリックサブネットの両方)へのリモートアクセスを有効にします.また、プライベートEC 2からは、VPCサービスエンドポイントを介してS 3のような他のサービスにアクセスすることが可能です.このポストでは、CDKを使ってこれらを展開する方法を共有したいです.
  • システムマネジャーによる遠隔アクセス
  • プライベートEC 2はVPCエンドポイントを介してS 3にアクセスできる
  • CDKスタックによって
  • GitHub
  • 建築



    CDKスタック


    S 3 VPCエンドポイントでVPCを作成します
        const vpc = new aws_ec2.Vpc(
          this,
          'VpcWithS3Endpoint',
          {
            gatewayEndpoints: {
              S3: {
                service: aws_ec2.GatewayVpcEndpointAwsService.S3
              }
            }
          }
        )
    
    システム・マネージャ
        vpc.addInterfaceEndpoint(
          'VpcIterfaceEndpointSSM',
          {
            service: aws_ec2.InterfaceVpcEndpointAwsService.SSM
          }
        )
    
    EC 2のIAMロールを作成する
        const role = new aws_iam.Role(
          this,
          'RoleForEc2ToAccessS3',
          {
            roleName: 'RoleForEc2ToAccessS3',
            assumedBy: new aws_iam.ServicePrincipal('ec2.amazonaws.com'),
          }
        )
    
    SSMと通信するEC 2の役割
        role.addManagedPolicy(
          aws_iam.ManagedPolicy.fromManagedPolicyArn(
            this,
            'PolicySSMMangerAccessS3',
            'arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore'
          )
        )
    
    EC 2アクセスへのポリシー
        role.attachInlinePolicy(
          new aws_iam.Policy(
            this,
            'PolicyForEc2AccessS3',
            {
              policyName: 'PolicyForEc2AccessS3',
              statements: [
                new aws_iam.PolicyStatement(
                  {
                    actions: ['s3:*'],
                    resources: ['*']
                  }
                ),
              ]
            }
          )
        )
    
    
    プライベートサブネットでEC 2を起動
        const ec2 = new aws_ec2.Instance(
          this,
          'Ec2ConnectVpcEndpointS3',
          {
            role: role,
            keyName: 'hai_ec2_t4g_large',
            vpc: vpc,
            instanceName: 'Ec2ConnectVpcEndpointS3',
            instanceType: aws_ec2.InstanceType.of(aws_ec2.InstanceClass.T2, aws_ec2.InstanceSize.SMALL),
            machineImage: aws_ec2.MachineImage.latestAmazonLinux(),
            securityGroup: sg,
            vpcSubnets: {
              subnetType: aws_ec2.SubnetType.PRIVATE
            }
          }
        )