Secrets Manager에서 보안 암호 또는 보안 암호 값 가져오기 - AWS CloudFormation

Secrets Manager에서 보안 암호 또는 보안 암호 값 가져오기

Secrets Manager는 데이터베이스 자격 증명, 암호, 타사 API 키와 같은 보안 암호를 안전하게 저장 및 관리하는 서비스입니다. Secrets Manager를 사용하면 이러한 보안 암호에 대한 액세스를 중앙에서 저장하고 제어할 수 있으므로 코드의 하드코딩된 자격 증명(암호 포함)을 Secrets Manager에 대한 API 호출로 대체하여 프로그래밍 방식으로 보안 암호를 검색할 수 있습니다. 자세한 내용은 AWS Secrets Manager 사용 설명서AWS Secrets Manager이란 무엇입니까? 섹션을 참조하십시오.

CloudFormation 템플릿 내에서 Secrets Manager에 저장된 전체 보안 암호 또는 보안 암호 값을 사용하려면 secretsmanager 동적 참조를 사용합니다.

고려 사항

secretsmanager 동적 참조를 사용할 때는 다음과 같은 몇 가지 중요한 보안 고려 사항을 염두에 두어야 합니다.

  • secretsmanager 동적 참조는 모든 리소스 속성에서 사용될 수 있습니다. secretsmanager 동적 참조 사용은 Secrets Manager 또는 CloudFormation 로그에서 확인된 보안 암호 값을 보존하지 않아야 함을 나타냅니다. 하지만 보안 암호 값이 리소스가 사용 중인 서비스에 표시될 수 있습니다. 사용을 검토하여 보안 암호 데이터 유출을 피합니다.

  • Secrets Manager의 보안 암호를 업데이트해도 CloudFormation의 보안 암호가 자동으로 업데이트되지 않습니다. CloudFormation에서 secretsmanager 동적 참조를 업데이트하려면 secretsmanager 동적 참조가 포함된 리소스 속성을 업데이트하거나 다른 리소스 속성을 업데이트하여 동적 참조가 포함된 리소스를 업데이트하는 스택 업데이트를 수행해야 합니다.

    예를 들어 템플릿에서 AWS::RDS::DBInstance 리소스의 MasterPassword 속성을 secretsmanager 동적 참조로 지정한 다음 템플릿에서 스택을 생성한다고 가정합니다. 나중에 Secrets Manager의 해당 보안 암호 값을 업데이트할 수 있지만 템플릿의 AWS::RDS::DBInstance 리소스는 업데이트할 수 없습니다. 이 경우 스택 업데이트를 수행하더라도 MasterPassword 속성의 보안 암호 값은 업데이트되지 않으며 이전 보안 암호 값을 유지합니다.

    또한 보안 서비스 또는 데이터베이스에 대한 보안 암호를 자동으로 교체하는 데 Secret Manager를 사용하는 것이 좋습니다. 자세한 내용을 알아보려면 AWS Secrets Manager 보안 암호 교체를 참조하세요.

  • secretsmanager와 같은 보안 암호 값에 대한 동적 참조는 현재 사용자 지정 리소스에서 지원되지 않습니다.

권한

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 예제에서는 MySecret 보안 암호에 저장된 사용자 이름 및 암호 값을 검색합니다. 검색되는 보안 암호 버전은 버전 스테이지 값이 AWSCURRENT인 버전입니다.

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 검색

다음 동적 참조는 SecretStringMySecret을 검색합니다.

{{resolve:secretsmanager:MySecret}}

대안:

{{resolve:secretsmanager:MySecret::::}}

특정 버전의 보안 암호에서 값 검색

다음 동적 참조는 AWSPREVIOUS 버전의 password에 대한 MySecret 값을 검색합니다.

{{resolve:secretsmanager:MySecret:SecretString:password:AWSPREVIOUS}}

다른 AWS 계정에서 보안 암호 검색

다음 동적 참조는 다른 AWS 계정에 있는 MySecret에 대한 SecretString을 검색합니다. 다른 AWS 계정의 보안 암호에 액세스하려면 전체 보안 암호 ARN을 지정해야 합니다.

{{resolve:secretsmanager:arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret}}

다음 동적 참조는 다른 AWS 계정에 있는 MySecret에 대한 password 값을 검색합니다. 다른 AWS 계정의 보안 암호에 액세스하려면 전체 보안 암호 ARN을 지정해야 합니다.

{{resolve:secretsmanager:arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret:SecretString:password}}