SSM 매개 변수를 읽는 3가지 방법
7700 단어 ssmawsserverlesssecure
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 방법 중 하나를 시도하십시오.구축할 때 읽는 것을 최대한 피해야 한다.
Reference
이 문제에 관하여(SSM 매개 변수를 읽는 3가지 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/eoinsha/3-ways-to-read-ssm-parameters-4555텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)