AWS 매개 변수 저장소에서 SSH 키 관리

개시하다


EC2 인스턴스에서 github 등 창고의 SSH 기밀 키를 관리할 때 매개변수 저장소를 사용하여 관리하는 방법에 대한 요약이다.

AWS parameter store


매개변수 저장소(공식적인 AWS Systems Manager 매개변수 저장소)는 AWS의 서비스로 데이터와 기밀 정보를 설정하는 서비스를 관리할 수 있습니다.
매개변수 저장소에 저장된 데이터는 AWS CLI와 같은 참조 값을 통해 참조할 수 있습니다.
또한 AWS Key Management Service(AWS KMS)를 사용하여 매개변수를 암호화하고 복호화할 수 있습니다.

SSH 키 관리


EC2 인스턴스에서 저장소의 SSH 비밀 키를 사용한다고 가정합니다.열쇠를 파라미터 저장소에 저장하고 이용하기 위해서는 다음과 같은 것이 필수적이다.
  • 매개변수 스토리지에 SSH 기밀 키 등록
  • 액세스 매개변수를 허용하는 IAM 역할 생성(EC2에 첨부)
  • AWS CLI 기반 매개 변수 호출/사용
  • 다음은 설명입니다.

    매개변수 저장소에 SSH 비밀 키 등록


    SSH 키를 만들고 매개변수 저장소에 비밀 키를 등록합니다.
    AWS 관리 콘솔에서 Systems Manager 페이지로 이동합니다.
    페이지 왼쪽의 창 창에서 パラメータストア(아래)를 선택하고 매개변수 스토어의 페이지로 이동합니다.
    페이지에서 パラメータの作成를 클릭하여 매개변수 설정 화면(다음 그림)으로 이동합니다.

    화면 항목에 필요한 항목을 입력하여 매개 변수를 설정합니다.
    이번 설정은 다음과 같다.
  • 이름:ssh-key
  • 활용 프레임워크: 표준
  • 유형: 보안 문자열
  • KMS의 주요 출처: 현재 계정
  • 값: (SSH 기밀 키)
  • 암호화 매개 변수를 설정하는 중입니다.
    범위가 상세하면 고급 매개 변수를 사용하십시오.
    고급 매개 변수는 사용 비용이 발생하지만 매개 변수의 크기와 수량 상한선이 비교적 커서 유효기간 등 상세하게 설정할 수 있다.
    https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/parameter-store-advanced-parameters.html

    매개변수에 액세스할 수 있는 IAM 역할 작성


    EC2 인스턴스의 매개변수 액세스를 허용하려면 IAM 역할이 필요합니다.
    IAM 스크롤 제작 템플릿은 다음과 같습니다.
    AWSTemplateFormatVersion: "2010-09-09"
    Parameters:
      ParameterName:
        Type: String
        Description: ssm parameter name
    
    Resources:
    
      # SSMパラメータにアクセス許可するIAMロール
      GetParameterRole:
        Type: "AWS::IAM::Role"
        Properties:
          RoleName: "get-parameter-role"
          Path: "/"
          AssumeRolePolicyDocument:
            Version: "2012-10-17"
            Statement: 
            - Effect: "Allow"
              Principal: 
                Service: 
                - "ec2.amazonaws.com"
              Action: 
                - "sts:AssumeRole"
    
      # SSMパラメータにアクセスするポリシー
      GetParameterPolicy:
        Type: "AWS::IAM::Policy"
        Properties:
          PolicyName: "get-parameter-policy"
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - 
                Effect: "Allow"
                Action: "ssm:GetParameter"
                Resource: !Sub "arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/${ParameterName}"
    
          Roles:
            - !Ref GetParameterRole
    
      # インスタンスプロファイル
      GetParameterProfile:
        Type: "AWS::IAM::InstanceProfile"
        Properties:
          Path: "/"
          Roles:
            - !Ref GetParameterRole
          InstanceProfileName: get-parameter-profile
    
    위의 템플릿은 지정된 이름(템플릿의 ParameterName) 매개변수 정보를 가져올 수 있도록 하는 역할을 합니다.
    역할을 작성한 후 EC2 인스턴스에 인스턴스 구성 파일을 첨부합니다.

    AWS CLI 기반 매개 변수 호출, 활용


    EC2 인스턴스에서 AWS CLI 를 사용하면 다음 명령을 통해 매개변수 정보를 얻을 수 있습니다.
    aws ssm get-parameter --name (parameter-name) --with-decryption --output text
    
    명령 옵션에 대한 설명은 다음과 같습니다.
  • name: 매개변수 이름 지정
  • with-decrypton: 매개 변수의 디코딩
  • output: 출력 형식
  • 또한 --query Parameter.Value를 추가하면 매개변수 값만 얻을 수 있습니다.

    git 명령 실행


    얻은 키는 ssh-agent에서 키 등록을 통해 파일로 관리하지 않은 상태에서 사용할 수 있습니다.
    다음은 가져온 매개 변수를 사용하여git 명령을 실행하는 케이스 스크립트의 예입니다.
    #!/bin/bash
    
    key_name=ssh-key
    
    git_with_ssm_key() {
    
      ssm_key=$1; shift
    
      # 鍵の取得
      key_param=$(aws ssm get-parameter \
                  --with-decryption \
                  --name $ssm_key \
                  --output text \
                  --query Parameter.Value)
    
      if [ $? -eq 0 ]; then
    
        # 鍵の登録
        ssh-add - <<< "${key_param}"
    
       # gitコマンド実行
        git "$@"
      else
        echo >&2 "ERROR: Failed to get ssm parameter : $ssm_key"
        exit 1
      fi
    }
    
    git_with_ssm_key $key_name clone [email protected]:your_account/repo_name
    
    위 스크립트에서 매개 변수 저장소에서 얻은 키를 ssh-agent에 로그인하여git clone 명령을 실행합니다.

    주의사항 등


    이번에 설명한 방법이라면 매개 변수 상점에서 매개 변수를 설정한 곳과 EC2 실례에서 매개 변수를 얻은 곳에서 인터넷을 통해 통신한다.더욱 안전하게 고려할 때 다음과 같은 변경 절차를 통해 인터넷을 통해 파라미터의 설정, 이용을 하지 않을 수 있다.
  • Systems Manager용 VPC 엔드포인트를 만듭니다.
  • EC2 인스턴스에 키 쌍을 만듭니다.
  • EC2 실례aws ssm put-parameter 명령은 매개 변수에 등록 기밀 키를 저장한다(캐릭터도 만들어야 한다).
  • 1에 따르면 VPC 내의 EC2 실례와 Systems Manager의 통신은 AWS 네트워크에만 한정되어 있기 때문에 앞으로의 3과 파라미터 획득은 인터넷을 거치지 않고 실행할 수 있다.

    참고 자료

  • VPC 엔드포인트 설정
      https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/setup-create-vpc.html
  • 고급 매개변수
    https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/parameter-store-advanced-parameters.html
  • 조개 스크립트의 제작은 아래 사이트를 참고하였다.
    https://alestic.com/2018/12/aws-ssm-parameter-store-git-key/
  • 좋은 웹페이지 즐겨찾기