AWS Systems Manager
사용 설명서

Parameter Store 파라미터에서 AWS Secrets Manager 암호 참조

Secrets Manager를 사용하면 자격 증명, 암호 및 라이선스 키 등과 같이 중요한 구성 데이터를 정리 및 관리할 수 있습니다. Parameter Store는 이제 Secrets Manager에 통합되어 Parameter Store 파라미터에 대한 참조를 이미 지원하는 다른 AWS 서비스를 사용하는 경우 Secrets Manager 암호를 가져올 수 있습니다. 이러한 서비스에는 Amazon EC2, Amazon Elastic Container Service, AWS Lambda, AWS CloudFormation, AWS CodeBuild, AWS CodeDeploy 및 기타 Systems Manager 기능이 포함됩니다. Parameter Store를 통해 Secrets Manager 암호를 참조하면 코드 및 구성 스크립트에서 일관성 있고 안전하게 암호 및 참조 데이터를 호출하고 사용할 수 있는 프로세스가 마련됩니다.

Secrets Manager에 대한 자세한 정보는 AWS Secrets Manager User GuideAWS Secrets Manager란 무엇입니까?를 참조하십시오.

중요

Parameter Store는 Secrets Manager 암호 참조를 위한 패스스루 서비스의 역할을 합니다. Parameter Store는 암호에 대한 데이터 또는 메타데이터를 보존하지 않습니다. 참조는 상태 비저장입니다.

제한

Parameter Store를 사용하여 Secrets Manager 암호를 참조할 때는 다음과 같은 제한 사항이 있습니다.

  • GetParameterGetParameters API 작업으로만 Secrets Manager 암호를 검색할 수 있습니다. DescribeParameters 또는 GetParametersByPath 등 고급 쿼리 API 작업과 수정 작업은 Secrets Manager에 사용할 수 없습니다.

  • AWS CLI, AWS Tools for Windows PowerShell 및 SDK에서 Parameter Store를 사용하여 암호를 검색할 수 있습니다.

  • Parameter Store에서 Secrets Manager 암호를 검색하는 경우, 파라미터 이름이 반드시 예약된 경로인 /aws/reference/secretsmanager/secret_ID_in_Secrets_Manager로 시작되어야 합니다.

    예를 들면 /aws/reference/secretsmanager/CFCreds1 등입니다.

  • Parameter Store는 Secrets Manager 암호에 연결된 IAM 정책을 준수합니다. 예를 들어 사용자 1에게 암호 A에 대한 액세스 권한이 없으면 사용자 1은 Parameter Store를 사용하여 암호 A를 검색할 수 없습니다.

  • Secrets Manager 암호를 참조하는 파라미터는 Parameter Store의 버전 관리 기능이나 기록 기능을 사용할 수 없습니다.

  • Parameter Store는 Secrets Manager 버전 단계를 준수합니다. 버전 단계를 참조할 때는 문자, 숫자, 마침표(.), 하이픈(-) 또는 밑줄(_)만 사용할 수 있습니다. 버전 단계에 그 밖의 모든 기호를 지정하면 참조가 실패하게 됩니다.

Parameter Store를 사용하여 Secrets Manager 암호를 참조하는 방법

다음 절차에서는 Parameter Store API를 사용하여 Secrets Manager 암호를 참조하는 방법에 대해 설명합니다. 여기서는 AWS Secrets Manager User Guide의 다른 절차를 참조합니다.

참고

시작하기 전에, Parameter Store 파라미터에서 Secrets Manager 암호를 참조할 권한이 있는지 확인하십시오. Secrets Manager 및 Systems Manager의 관리자 권한이 있으면 Parameter Store API를 사용해서 암호를 검색할 수 있습니다. Parameter Store 파라미터에 Secrets Manager 암호를 참조했는데 그 암호에 액세스할 권한이 없으면 참조가 실패합니다. 자세한 정보는 AWS Secrets Manager User GuideAWS Secrets Manager 인증 및 액세스 제어를 참조하십시오.

Parameter Store를 사용하여 Secrets Manager 암호를 참조하려면

  1. Secrets Manager에서 암호를 생성합니다. 자세한 정보는 AWS Secrets Manager로 암호 생성 및 관리를 참조하십시오.

  2. AWS CLI, AWS Tools for Windows PowerShell 또는 SDK를 사용하여 암호를 참조합니다. Secrets Manager 암호를 참조할 때는 파라미터 이름이 반드시 예약된 경로인 /aws/reference/secretsmanager/로 시작되어야 합니다. 이 경로를 지정하면 Parameter Store가 아니라 Secrets Manager에서 암호를 검색해야 한다는 것을 Systems Manager에서 알게 됩니다. 다음은 Secrets Manager 암호를 올바르게 참조한 몇 가지 파라미터의 예입니다.

    • /aws/reference/secretsmanager/CFCreds1

    • /aws/reference/secretsmanager/DBPass

    다음은 Secrets Manager에 저장된 액세스 키와 보안 키를 참조하는 Java 코드 예제입니다. 이 코드 예제는 Amazon DynamoDB 클라이언트를 설정합니다. 이 코드는 Parameter Store에서 구성 데이터와 자격 증명을 검색합니다. 구성 데이터는 Parameter Store에 문자열 파라미터로 저장되고, 자격 증명은 Secrets Manager에 저장됩니다. 구성 데이터와 자격 증명이 별도의 서비스에 저장되지만 두 데이터 세트 모두 Parameter Store에서 GetParameter API를 사용하여 액세스할 수 있습니다.

    /** * Initialize AWS System Manager Client with default credentials */ AWSSimpleSystemsManagement ssm = AWSSimpleSystemsManagementClientBuilder.defaultClient(); ... /** * Example method to launch DynamoDB client with credentials different from default * @return DynamoDB client */ AmazonDynamoDB getDynamoDbClient() { //Getting AWS credentials from Secrets manager using GetParameter BasicAWSCredentials differentAWSCreds = new BasicAWSCredentials( getParameter("/aws/reference/secretsmanager/access-key"), getParameter("/aws/reference/secretsmanager/secret-key")); //Initialize the DDB Client with different credentials final AmazonDynamoDB client = AmazonDynamoDBClient.builder() .withCredentials(new AWSStaticCredentialsProvider(differentAWSCreds)) .withRegion(getParameter("region")) //Getting config from Parameter Store .build(); return client; } /** * Helper method to retrieve SSM Parameter's value * @param parameterName identifier of the SSM Parameter * @return decrypted parameter value */ public GetParameterResult getParameter(String parameterName) { GetParameterRequest request = new GetParameterRequest(); request.setName(parameterName); request.setWithDecryption(true); return ssm.newGetParameterCall().call(request).getParameter().getValue(); }

    여기 몇 가지 AWS CLI 예제가 있습니다.

    AWS CLI 예제 1: 암호의 이름을 사용하여 참조

    aws ssm get-parameter --name /aws/reference/secretsmanager/s1-secret --with-decryption

    명령은 다음과 같은 정보를 반환합니다.

    {
        "Parameter": {
            "Name": "/aws/reference/secretsmanager/s1-secret",
            "Value": "Fl*MEishm!al875",
            "Type": "SecureString",
            "LastModifiedDate": 2018-05-14T21:47:14.743Z,
            "ARN": "arn:aws:secretsmanager:us-west-1:123456789:secret:s1-secret-
                   E18LRP",
            "SourceResult": 
                  "{
                       \"CreatedDate\": 1526334434.743,
                       \"Name\": \"s1-secret\",
                       \"VersionId\": \"aaabbbccc-1111-222-333-123456789\",
                       \"SecretString\": \"Fl*MEishm!al875\",
                       \"VersionStages\": [\"AWSCURRENT\"],
                       \"ARN\": \"arn:aws:secretsmanager:us-west-
                              1:123456789:secret:s1-secret-E18LRP\"
                   }"
          }
    }

    AWS CLI 예제 2: 버전 ID를 포함하는 참조

    aws ssm get-parameter --name /aws/reference/secretsmanager/s1-secret:11111-aaa-bbb-ccc-123456789 --with-decryption

    명령은 다음과 같은 정보를 반환합니다.

    {
        "Parameter": {
            "Name": "/aws/reference/secretsmanager/s1-secret",
            "Value": "Fl*MEishm!al875",
            "Type": "SecureString",
            "LastModifiedDate": 2018-05-14T21:47:14.743Z,
            "ARN": "arn:aws:secretsmanager:us-west-1:123456789:secret:s1-secret-
                   E18LRP",
            "SourceResult": 
                  "{
                       \"CreatedDate\": 1526334434.743,
                       \"Name\": \"s1-secret\",
                       \"VersionId\": \"11111-aaa-bbb-ccc-123456789\",
                       \"SecretString\": \"Fl*MEishm!al875\",
                       \"VersionStages\": [\"AWSCURRENT\"],
                       \"ARN\": \"arn:aws:secretsmanager:us-west-
                              1:123456789:secret:s1-secret-E18LRP\"
                   }"
            "Selector": ":11111-aaa-bbb-ccc-123456789"
          }
    }
    

    AWS CLI 예제 3: 버전 단계를 포함하는 참조

    aws ssm get-parameter --name /aws/reference/secretsmanager/s1-secret:AWSCURRENT --with-decryption

    명령은 다음과 같은 정보를 반환합니다.

    {
        "Parameter": {
            "Name": "/aws/reference/secretsmanager/s1-secret",
            "Value": "Fl*MEishm!al875",
            "Type": "SecureString",
            "LastModifiedDate": 2018-05-14T21:47:14.743Z,
            "ARN": "arn:aws:secretsmanager:us-west-1:123456789:secret:s1-secret-
                    E18LRP",
            "SourceResult": 
                  "{
                       \"CreatedDate\": 1526334434.743,
                       \"Name\": \"s1-secret\",
                       \"VersionId\": \"11111-aaa-bbb-ccc-123456789\",
                       \"SecretString\": \"Fl*MEishm!al875\",
                       \"VersionStages\": [\"AWSCURRENT\"],
                       \"ARN\": \"arn:aws:secretsmanager:us-west-
                              1:123456789:secret:s1-secret-E18LRP\"
                   }"
            "Selector": ":AWSCURRENT"
          }
    }