AWS Systems Manager 파라미터 스토어에 파라미터 저장해두고 CLI로 취득해보기

AWS Systems Manager 파라미터 스토어에 파라미터 저장해두고 CLI로 취득해보기

Clock Icon2022.04.28 07:34

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

안녕하세요, 임채정입니다.
이번 블로그에서는 파라미터 스토어에 대해서 알아보고 실제로 사용해보려고 합니다.

아젠다

  1. 파라미터 스토어란
  2. 파라미터 스토어에 파라미터 생성
  3. CLI에서 파라미터 취득해보기
  4. 마무리

1. 파라미터 스토어란

  • 구성 데이터 관리 및 암호 관리를 위한 안전한 계층적 스토리지를 제공
  • 파라미터를 생성할 때 지정한 고유 이름을 지정해서 스크립트, 명령어 등에서 참조 가능
  • 이하의 데이터 등을 파라미터 값으로 저장
    • 암호
    • 데이터베이스 문자열
    • Amazon Machine Image(AMI) ID
    • 라이선스 코드
  • 저장 값 종류
    • 문자열
    • 문자열 목록
    • 암호화된 데이터

2. 파라미터 스토어에 파라미터 생성

실제로 파라미터 스토어에 파라미터를 생성해보겠습니다.

AWS Systems Manager 콘솔화면에서 [파라미터 스토어] 태그로 이동합니다.
그리고 새로운 파라미터 생성을 클릭합니다.

이번에는 테스트를 위해 3개정도의 파라미터를 만들겠습니다.

[DB의 URL]
이름: /app/dev/db-url
유형: 문자열
값: mysql://ssmtest:3306

[DB의 비밀번호]
이름: /app/dev/db-password
유형: 보안 문자열
값: password2022

[EC2의 AMI ID]
이름: /EC2/AMI-ID
유형: 문자열
값: ami-081e8fe2fd01c823f

이렇게 3개의 파라미터를 작성했으니까 다음으로 CLI에서 해당 파라미터를 얻어봅시다.

3. CLI에서 파라미터 취득해보기

CLI에서 다양한 방법으로 파라미터를 취득해보겠습니다.

파라미터 취득하기

평범하게 /EC2/AMI-ID에 대한 파라미터를 취득하는 명령어입니다.

aws ssm get-parameters --names /EC2/AMI-ID

{
    "Parameters": [
        {
            "Name": "/EC2/AMI-ID",
            "Type": "String",
            "Value": "ami-081e8fe2fd01c823f",
            "Version": 1,
            "LastModifiedDate": "2022-04-28T13:35:48.911000+09:00",
            "ARN": "arn:aws:ssm:ap-northeast-1:763723081076:parameter/EC2/AMI-ID",
            "DataType": "text"
        }
    ],
    "InvalidParameters": []
}

보안 문자열을 복호화해서 취득하기

/app/dev/db-url/app/dev/db-password를 그냥 가져오면 /app/dev/db-url의 값은 그냥 가져와지지만 보안 문자열인 /app/dev/db-password은 암호화된 문자열로 출력됩니다.

aws ssm get-parameters --names /app/dev/db-url /app/dev/db-password

{
    "Parameters": [
        {
            "Name": "/app/dev/db-password",
            "Type": "SecureString",
            "Value": "AQICAHiyx8ItwrAKNY8Ly6JZE6F/HmLQM0m2KCAn0EugOMV+nwEBQpnRaEIZly65xY9eZ3bYAAAAajBoBgkqhkiG9w0BBwagWzBZAgEAMFQGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQM6FczyjAUfftwcIh9AgEQgCcFi7/hjdrZdajgXlE+hWFlGaFMc1RxTzY5xw0gIxUxjiEboh+1upY=",
            "Version": 1,
            "LastModifiedDate": "2022-04-28T02:39:49.583000+09:00",
            "ARN": "arn:aws:ssm:ap-northeast-1:763723081076:parameter/app/dev/db-password",
            "DataType": "text"
        },
        {
            "Name": "/app/dev/db-url",
            "Type": "String",
            "Value": "mysql://ssmtest:3306",
            "Version": 1,
            "LastModifiedDate": "2022-04-28T02:38:55.488000+09:00",
            "ARN": "arn:aws:ssm:ap-northeast-1:763723081076:parameter/app/dev/db-url",
            "DataType": "text"
        }
    ],
    "InvalidParameters": []
}

하지만 --with-decryption옵션을 붙여주면 보안 문자열이 복호화되서 출력됩니다.

aws ssm get-parameters --names /app/dev/db-url /app/dev/db-password --with-decryption

{
    "Parameters": [
        {
            "Name": "/app/dev/db-password",
            "Type": "SecureString",
            "Value": "password2022",
            "Version": 1,
            "LastModifiedDate": "2022-04-28T02:39:49.583000+09:00",
            "ARN": "arn:aws:ssm:ap-northeast-1:763723081076:parameter/app/dev/db-password",
            "DataType": "text"
        },
        {
            "Name": "/app/dev/db-url",
            "Type": "String",
            "Value": "mysql://ssmtest:3306",
            "Version": 1,
            "LastModifiedDate": "2022-04-28T02:38:55.488000+09:00",
            "ARN": "arn:aws:ssm:ap-northeast-1:763723081076:parameter/app/dev/db-url",
            "DataType": "text"
        }
    ],
    "InvalidParameters": []
}

경로(path)로 취득하기

이번에는 경로로 파라미터를 취득해보겠습니다.
/app/dev/경로에 있는 모든 파라미터를 취득합니다.

aws ssm get-parameters-by-path --path /app/dev/

{
    "Parameters": [
        {
            "Name": "/app/dev/db-password",
            "Type": "SecureString",
            "Value": "AQICAHiyx8ItwrAKNY8Ly6JZE6F/HmLQM0m2KCAn0EugOMV+nwEBQpnRaEIZly65xY9eZ3bYAAAAajBoBgkqhkiG9w0BBwagWzBZAgEAMFQGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQM6FczyjAUfftwcIh9AgEQgCcFi7/hjdrZdajgXlE+hWFlGaFMc1RxTzY5xw0gIxUxjiEboh+1upY=",
            "Version": 1,
            "LastModifiedDate": "2022-04-28T02:39:49.583000+09:00",
            "ARN": "arn:aws:ssm:ap-northeast-1:763723081076:parameter/app/dev/db-password",
            "DataType": "text"
        },
        {
            "Name": "/app/dev/db-url",
            "Type": "String",
            "Value": "mysql://ssmtest:3306",
            "Version": 1,
            "LastModifiedDate": "2022-04-28T02:38:55.488000+09:00",
            "ARN": "arn:aws:ssm:ap-northeast-1:763723081076:parameter/app/dev/db-url",
            "DataType": "text"
        }
    ]
}

하지만 /app/의 경우 경로 바로 뒤에 파라미터가 없기 때문에 결과가 표시되지 않습니다.

aws ssm get-parameters-by-path --path /app/

{
    "Parameters": []
}

이럴 경우에는 --recursive옵션이 붙으면 /app/으로 시작되는 모든 파라미터를 출력합니다.

aws ssm get-parameters-by-path --path /app/ --recursive

{
    "Parameters": [
        {
            "Name": "/app/dev/db-password",
            "Type": "SecureString",
            "Value": "AQICAHiyx8ItwrAKNY8Ly6JZE6F/HmLQM0m2KCAn0EugOMV+nwEBQpnRaEIZly65xY9eZ3bYAAAAajBoBgkqhkiG9w0BBwagWzBZAgEAMFQGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQM6FczyjAUfftwcIh9AgEQgCcFi7/hjdrZdajgXlE+hWFlGaFMc1RxTzY5xw0gIxUxjiEboh+1upY=",
            "Version": 1,
            "LastModifiedDate": "2022-04-28T02:39:49.583000+09:00",
            "ARN": "arn:aws:ssm:ap-northeast-1:763723081076:parameter/app/dev/db-password",
            "DataType": "text"
        },
        {
            "Name": "/app/dev/db-url",
            "Type": "String",
            "Value": "mysql://ssmtest:3306",
            "Version": 1,
            "LastModifiedDate": "2022-04-28T02:38:55.488000+09:00",
            "ARN": "arn:aws:ssm:ap-northeast-1:763723081076:parameter/app/dev/db-url",
            "DataType": "text"
        }
    ]
}

쿼리를 통해 부분 값만 취득하기

이번에는 필요한 부분만 취득하겠습니다.

/app/dev/db-url/app/dev/db-password의 이름과 값

aws ssm get-parameters --names /app/dev/db-url /app/dev/db-password --query "Parameters[*].{Name:Name,Value:Value}"

[
    {
        "Name": "/app/dev/db-password",
        "Value": "AQICAHiyx8ItwrAKNY8Ly6JZE6F/HmLQM0m2KCAn0EugOMV+nwEBQpnRaEIZly65xY9eZ3bYAAAAajBoBgkqhkiG9w0BBwagWzBZAgEAMFQGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQM6FczyjAUfftwcIh9AgEQgCcFi7/hjdrZdajgXlE+hWFlGaFMc1RxTzY5xw0gIxUxjiEboh+1upY="
    },
    {
        "Name": "/app/dev/db-url",
        "Value": "mysql://ssmtest:3306"
    }
]

/EC2/AMI-ID의 값만 출력

aws ssm get-parameters --names /EC2/AMI-ID --query "Parameters[*].Value"

[
    "ami-081e8fe2fd01c823f"
]

4. 마무리

지금까지 AWS Systems Manager 의 파라미터 스토어에 대해서 알아봤습니다.
다음은 여기서 좀 더 응용을 해서 해당 파라미터 값을 CloudFormation의 템플릿에서 사용하는 방법에 대해서 알아보겠습니다.

본 블로그 게시글을 보시고 문의 사항이 있으신 분들은 클래스메소드코리아 (info@classmethod.kr)로 연락 주시면 빠른 시일 내 담당자가 회신 드릴 수 있도록 하겠습니다 !

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.