Secrets Manager에서 보안 암호 또는 보안 암호 값 가져오기
Secrets Manager는 데이터베이스 자격 증명, 암호, 타사 API 키와 같은 보안 암호를 안전하게 저장 및 관리하는 서비스입니다. Secrets Manager를 사용하면 이러한 보안 암호에 대한 액세스를 중앙에서 저장하고 제어할 수 있으므로 코드의 하드코딩된 자격 증명(암호 포함)을 Secrets Manager에 대한 API 호출로 대체하여 프로그래밍 방식으로 보안 암호를 검색할 수 있습니다. 자세한 내용은 AWS Secrets Manager 사용 설명서의 AWS Secrets Manager이란 무엇입니까? 섹션을 참조하세요.
CloudFormation 템플릿 내에서 Secrets Manager에 저장된 전체 보안 암호 또는 보안 암호 값을 사용하려면 secretsmanager 동적 참조를 사용합니다.
모범 사례
CloudFormation 템플릿에서 Secrets Manager 동적 참조를 사용할 때는 다음 모범 사례를 따르세요.
-
CloudFormation 템플릿에 버전 없는 참조 사용 - 자격 증명을 Secrets Manager에 저장하고 적절한 보안 암호 교체 워크플로를 지원하기 위해
version-stage또는version-id파라미터를 지정하지 않고 동적 참조를 사용합니다. -
자동 교체 활용 - 자격 증명 관리를 위해 버전 없는 동적 참조와 함께 Secrets Manager의 자동 교체 기능을 사용합니다. 이렇게 하면 템플릿 변경 없이 자격 증명을 정기적으로 업데이트할 수 있습니다. 자세한 내용을 알아보려면 AWS Secrets Manager 보안 암호 교체를 참조하세요.
-
버전이 지정된 참조를 거의 사용 - 테스트 또는 롤백 상황과 같은 특정 시나리오에 대해 명시적
version-stage또는version-id파라미터만 지정합니다.
고려 사항
secretsmanager 동적 참조를 사용할 때는 다음과 같은 중요한 보안 고려 사항을 염두에 두어야 합니다.
-
CloudFormation은 이전 배포에서 사용된 보안 암호 버전을 추적하지 않습니다. 동적 참조를 구현하기 전에 보안 암호 관리 전략을 신중하게 계획합니다. 가능하면 버전 없는 참조를 사용하여 자동 보안 암호 교체를 활용합니다. 버전 관리되지 않은 동적 참조에서 버전 관리된 동적 참조로 전환하거나 그 반대로 전환하는 경우와 같이 동적 참조 구성을 변경할 때 리소스 업데이트를 모니터링하고 검증합니다.
-
Secrets Manager에서 보안 암호 값만 업데이트해도 CloudFormation에서 새 값을 자동으로 검색하지는 않습니다. CloudFormation은 리소스 생성 또는 동적 참조가 포함된 리소스를 수정하는 업데이트 중에만 보안 암호 값을 검색합니다.
예를 들어 템플릿에
MasterPassword속성이 Secrets Manager 동적 참조로 설정된 AWS::RDS::DBInstance 리소스가 포함되어 있다고 가정합니다. 이 템플릿에서 스택을 생성한 후 Secrets Manager에서 보안 암호 값을 업데이트합니다. 그러나MasterPassword속성은 이전 암호 값을 유지합니다.새 보안 암호 값을 적용하려면 CloudFormation 템플릿에서
AWS::RDS::DBInstance리소스를 수정하고 스택 업데이트를 수행해야 합니다.향후 이 수동 프로세스를 거치지 않으려면 Secrets Manager를 사용하여 보안 암호를 자동으로 교체하는 것이 좋습니다.
-
secretsmanager와 같은 보안 암호 값에 대한 동적 참조는 현재 사용자 지정 리소스에서 지원되지 않습니다. -
secretsmanager동적 참조는 모든 리소스 속성에서 사용될 수 있습니다.secretsmanager동적 참조 사용은 Secrets Manager 또는 CloudFormation 로그에서 확인된 보안 암호 값을 보존하지 않아야 함을 나타냅니다. 하지만 보안 암호 값이 리소스가 사용 중인 서비스에 표시될 수 있습니다. 사용을 검토하여 보안 암호 데이터 유출을 피합니다.
권한
Secrets Manager에 저장된 보안 암호를 지정하려면 보안 암호에 대한 GetSecretValue를 호출할 수 있는 권한이 있어야 합니다.
참조 패턴
CloudFormation 템플릿에서 Secrets Manager 보안 암호를 참조하려면 다음과 같은 secretsmanager 동적 참조 패턴을 사용합니다.
{{resolve:secretsmanager:secret-id:secret-string:json-key:version-stage:version-id}}
secret-id-
보안 암호의 이름 또는 ARN입니다.
AWS 계정의 보안 암호에 액세스하려면 보안 암호 이름만 지정하면 됩니다. 다른 AWS 계정의 보안 암호에 액세스하려면 보안 암호의 전체 ARN을 지정해야 합니다.
필수 사항입니다.
secret-string-
지원되는 유일한 값은
SecretString입니다. 기본값은SecretString입니다. json-key-
검색하고자 하는 값을 보유한 키-값 페어의 키 이름입니다.
json-key를 지정하지 않는 경우 CloudFormation에서 전체 암호 텍스트를 검색합니다.이 세그먼트에는 콜론 문자(
:)가 포함되지 않을 수 있습니다. version-stage-
사용할 보안 암호 버전의 스테이징 레이블입니다. Secrets Manager는 교체 프로세스 도중 다른 버전을 추적하는 데 스테이징 레이블을 사용합니다.
version-stage을 사용하는 경우version-id를 지정하지 마세요.version-stage또는version-id를 지정하지 않은 경우 기본값은AWSCURRENT버전입니다.이 세그먼트에는 콜론 문자(
:)가 포함되지 않을 수 있습니다. version-id-
사용하고자 하는 보안 암호의 버전에 대한 고유 식별자입니다.
version-id을 지정할 경우version-stage을 지정하지 마세요.version-stage또는version-id를 지정하지 않은 경우 기본값은AWSCURRENT버전입니다.이 세그먼트에는 콜론 문자(
:)가 포함되지 않을 수 있습니다.
예시
보안 암호에서 사용자 이름 및 암호 값 검색
다음 AWS::RDS::DBInstance 예제에서는 보안 암호에 저장된 사용자 이름 및 암호 값을 검색합니다. 이 예제는 버전 없는 동적 참조에 권장되는 패턴을 보여줍니다. 이 패턴은 템플릿 변경 없이 자동으로 MySecretAWSCURRENT 버전을 사용하고 Secrets Manager 회전 워크플로를 지원합니다.
JSON
{ "MyRDSInstance": { "Type": "AWS::RDS::DBInstance", "Properties": { "DBName": "MyRDSInstance", "AllocatedStorage": "20", "DBInstanceClass": "db.t2.micro", "Engine": "mysql", "MasterUsername": "{{resolve:secretsmanager:MySecret:SecretString:username}}", "MasterUserPassword": "{{resolve:secretsmanager:MySecret:SecretString:password}}" } } }
YAML
MyRDSInstance: Type: AWS::RDS::DBInstance Properties: DBName: MyRDSInstance AllocatedStorage: '20' DBInstanceClass: db.t2.micro Engine: mysql MasterUsername: '{{resolve:secretsmanager:MySecret:SecretString:username}}' MasterUserPassword: '{{resolve:secretsmanager:MySecret:SecretString:password}}'
전체 SecretString 검색
다음 동적 참조는 SecretString의 을 검색합니다.MySecret
{{resolve:secretsmanager:MySecret}}
대안:
{{resolve:secretsmanager:MySecret::::}}
특정 버전의 보안 암호에서 값 검색
다음 동적 참조는 버전의 AWSPREVIOUS에 대한 password 값을 검색합니다.MySecret
{{resolve:secretsmanager:MySecret:SecretString:password:AWSPREVIOUS}}
다른 AWS 계정에서 보안 암호 검색
다음 동적 참조는 다른 AWS 계정에 있는 에 대한 MySecretSecretString을 검색합니다. 다른 AWS 계정의 보안 암호에 액세스하려면 전체 보안 암호 ARN을 지정해야 합니다.
{{resolve:secretsmanager:arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret}}
다음 동적 참조는 다른 AWS 계정에 있는 에 대한 MySecret 값을 검색합니다. 다른 AWS 계정의 보안 암호에 액세스하려면 전체 보안 암호 ARN을 지정해야 합니다.password
{{resolve:secretsmanager:arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret:SecretString:password}}