SSM 매개 변수를 읽는 3가지 방법

AWS Systems Manager 매개 변수 저장소(또는 SSM 매개 변수 저장소)는 AWS에서 층 매개 변수를 저장하는 편리한 방법입니다.암호나 API 키와 같은 보안 값을 포함하여 모든 구성 값에 사용할 수 있습니다.그것은 다른 AWS 서비스와도 잘 통합될 수 있다.
SSM에서 매개변수를 읽을 때 사용할 수 있는 몇 가지 옵션이 있습니다.
  • 런타임 읽기
  • 구축 시 읽기
  • 배포 시 읽기

  • 이러한 옵션을 고려할 때 중요한 것은 다음과 같습니다.
  • 이 매개변수를 언제 사용할 수 있는지 확인할 수 있습니까?
  • 매개변수 값을 변경할 수 있습니까?
  • 이 매개 변수는 데이터 유출을 방지해야 하는 비밀입니까?
  • 런타임 읽기


    실행할 때 읽는 것은 기밀 파라미터를 보호하고 생성 또는 배치할 때 사용할 수 없는 파라미터를 처리하는 가장 안전한 방법입니다.또한 값이 자주 변하는 매개변수를 처리하는 데도 도움이 됩니다.AWS SDK를 사용하여 선택한 언어의 매개변수(예: JS, Python 또는 SSM API를 읽을 수 있습니다.
    매개 변수 값을 읽는 주파수를 조정하는 것을 고려하는 것은 좋은 생각이다.기본적으로 매개 변수는 비교적 낮은 값throughput quota(초당 40)을 저장하고 필요할 때마다 이 값을 읽는 것도 지연을 증가시킨다.이곳의 전형적인 해결 방안은 시작할 때 불러오는 것이다.예를 들어, Lambda 함수의 컨텍스트에서 매개변수 read는 프로세서 함수 외에 코드를 부트할 때 실행될 수 있습니다.
    런타임에 오래된 값을 보존할까 봐 걱정되면 합리적인 시간 초과 후에 다시 읽을 수 있습니다.파이톤의 ssm-cache과 노드의 Middy SSM.js Lambda 함수는 두 개의 소스 라이브러리로 이 점을 간단하게 합니다.
    실행할 때 읽는 방법은 메모리에만 비밀 파라미터를 저장하기 때문에 다른 곳에 이 값을 쓰지 않으면 비밀을 누설할 위험이 명문 비밀을 포함하는 파일이나 환경 변수를 사용하는 것보다 낮을 수 있습니다.

    제작 시 읽기


    이 옵션은 다음 옵션 (배치할 때 읽기) 과 미세한 차이가 있습니다.만약에 인프라를 코드로 사용하고 구축할 때 코드와 인프라를 함께 묶는다면.이 패키지 프로세스는 AWS에 배포되기 전에 발생합니다.
    구축 시 SDK 또는 API를 사용하여 로드된 매개변수 값을 읽고 코드의 위치에 포함합니다.이것은 생성된 .env 파일이거나 Lambda 함수 환경 변수에 설정된 값일 수 있습니다.
    서버 프레임이 없는 경우는 다음과 같습니다.
    functions:
      getItem:
        handler: handler.handleGetItem
        environment: ${ssm:/path/to/secret}
    
    서버 프레임워크가 없으면 소량의 코드(docs만 있으면 값을 검색할 수 있기 때문에 매우 편리하다.불리한 면은 비밀 매개 변수다.보호된 비밀 값을 코드나 환경 변수에 저장하면 여러 종류의 공격을 받을 수 있다.
    이 예제의 CloudFormation 템플릿은 SSM 매개 변수 값이clear의 JSON에 어떻게 저장되는지 보여 줍니다.
       "Environment": {
         "Variables": {
           "SECRET_CODE": "shhhhh!s3cr3t"
         }
       },
    
    Lambda 함수 구성에 배치한 후에도 환경 변수를 볼 수 있습니다.환경 변수로 사용할 수 있다면 함수에서 실행되는 모든 악성코드나 접근 함수 설정의 참여자에게 쉽게 발견되고 필터링될 수 있습니다.

    생성할 때 읽을 때 생성 환경에 읽기 파라미터에 대한 정확한 증거가 있고 이 파라미터가 존재하는지 확인해야 합니다. 설령 생성만 하고 배치하지 않더라도.

    배포 시 읽기


    AWS CloudFormation이나 그 위에 구축된 위대한 도구, 예를 들어 CDK, Serverless Framework 또는 SAM를 사용한다면 SSM 파라미터를 불러오고 사용할 수 있는 두 가지 옵션이 있습니다.이것은 파라미터를 읽는 책임이 구축 후로 미뤄지고 클라우드 포메이션이 전체 창고에 클라우드 배치를 수행할 때로 미뤄진다는 것을 의미한다.그 장점은 구축할 때 파라미터를 읽을 수 있는 특권이 필요하지 않고, 주어진 환경에 배치하기 전에 이 값이 존재하는지 확인할 필요가 없다는 것이다.
    첫 번째 옵션은 Cloudformation 매개변수에 특수 구문을 사용하는 것입니다.YAML에서 선언은 다음과 같습니다.
    resources:
      Parameters:
        UserPoolArnParameter:
          Type: AWS::SSM::Parameter::Value<String>
          Default: /dev/user-service/user-pool-arn
    
      Resources:
        CognitoAuthorizer:
          Type: AWS::ApiGateway::Authorizer
          Properties:
            ...
            ProviderARNs:
              - !Ref UserPoolArnParameter
    
    완전한 예가 있다here.이 구문은 지원되지 않습니다SecureString.그것은 다른 파일 CloudFormation Parameter types 과 함께 여기에 기록되어 있다.
    CloudFormation의 두 번째 배치 시 옵션은 dynamic parameters라는 기능을 사용했습니다. 이 옵션은 고정된 서비스 그룹SecureString 유형을 지원합니다.CloudFormation 동적 매개변수는 특정 매개변수 버전도 지원합니다.아래와 같다.{{resolve:ssm:/path/to/parameter:VERSION}}또는{{resolve:ssm:/path/to/secure-parameter:VERSION}} :VERSION 접미사는 이 두 가지 상황에서 모두 선택할 수 있으며 기본적으로 최신 버전을 자동으로 선택합니다.
    이러한 옵션은 서버 프레임워크가 없는 변수 문법ssm:보다 상세할 수 있지만 클라우드 포메이션 문법은 안정적이고 배치 시 검증을 확보하며 클라우드 포메이션 창고의 클라우드 포메이션 모델에 더욱 적합하다.
    AWS CDK는 클라우드 구성 옵션을 동적으로 생성할 수 있는 SSM 매개변수convenient functions를 제공합니다.이것은 CDK를 구축할 때의 검색이 아니라 배치할 때의 검색입니다. 이것은 뚜렷하지 않을 수도 있지만, 엔진 덮개 아래에서 무슨 일이 일어났는지 확인하기 위해 합성된 CDK 출력을 검사할 수 있습니다.

    비밀 매니저


    여기서는 Secrets Manager 가 아닌 SSM 매개 변수에 초점을 맞추고 있습니다.이러한 원칙은 모두 적용되지만 Secrets Manager를 사용하면 정기적으로 교체되는 민감한 값을 처리할 수 있기 때문에 안전, 후기 귀속의 비밀 값을 강조하는 것이 더욱 중요합니다!CloudFormation 동적 값도 Secrets Manager를 지원하지만 CloudFormation 매개 변수에는 지원되지 않습니다.

    결론


    SSM 매개변수를 읽는 경험의 법칙은 일반적으로 가능한 한 늦게 읽습니다.이는 시간치를 읽고 유출될 수 있는 기밀을 저장할 가능성을 낮춘다.코드를 실행하기 전에 값을 찾으려면 다음 CloudFormation 방법 중 하나를 시도하십시오.구축할 때 읽는 것을 최대한 피해야 한다.

    좋은 웹페이지 즐겨찾기