Secrets Manager를 사용하여 민감한 데이터 지정 - AWS Batch

Secrets Manager를 사용하여 민감한 데이터 지정

AWS Batch(을)를 사용하면 AWS Secrets Manager 보안 암호에 민감한 데이터를 저장하여 작업에 민감한 데이터를 삽입하고 작업 정의에 참조할 수 있습니다. Secrets Manager 암호에 저장된 민감한 데이터는 환경 변수 또는 로그 구성의 일부로 작업에 노출될 수 있습니다.

비밀을 환경 변수로 주입하는 경우 주입할 비밀의 JSON 키 또는 버전을 지정할 수 있습니다. 이 프로세스는 작업에 노출되는 중요한 데이터를 제어하는 데 도움이 됩니다. 보안 버전 관리에 대한 자세한 정보는 AWS Secrets Manager 사용 설명서의 AWS Secrets Manager의 주요 개념 및 용어를 참조하세요.

Secrets Manager를 사용하여 민감한 데이터 지정 시 고려할 사항

Secrets Manager를 사용하여 작업에 대한 민감한 데이터를 지정할 때 다음 사항을 고려해야 합니다.

  • 보안 암호의 특정 JSON 키 또는 버전을 사용하여 보안 암호를 주입하려면 컴퓨팅 환경의 컨테이너 인스턴스에 Amazon ECS 컨테이너 에이전트 버전 1.37.0 이상이 있어야 합니다. 그러나 최신 버전의 컨테이너 에이전트를 사용하는 것이 좋습니다. 에이전트 버전을 확인하고 최신 버전으로 업데이트하는 방법에 대한 자세한 내용은 Amazon Elastic Container Service 개발자 안내서Amazon ECS 컨테이너 에이전트 업데이트를 참조하십시오.

    보안 정보의 전체 내용을 환경 변수로 주입하거나 로그 구성에 보안 정보를 주입하려면 컨테이너 인스턴스에 컨테이너 에이전트 버전 1.23.0 이상이 있어야 합니다.

  • CreateSecret API의 SecretString 파라미터로 생성된 암호이며 텍스트 데이터를 저장하는 암호만이 지원됩니다. CreateSecret API의 SecretBinary 파라미터로 생성된 암호이며 바이너리 데이터를 저장하는 암호는 지원되지 않습니다.

  • Secrets Manager 암호를 참조하여 작업에 대한 민감한 데이터를 검색하는 작업 정의를 사용할 때, 인터페이스 VPC 엔드포인트도 사용하는 경우 Secrets Manager에 대한 인터페이스 VPC 엔드포인트를 생성해야 합니다. 자세한 정보는 AWS Secrets Manager 사용 설명서VPC 엔드포인트와 함께 Secrets Manager 사용을 참조하세요.

  • 작업이 처음 시작될 때 해당 작업에 중요한 정보가 주입됩니다. 암호가 이후에 업데이트되거나 교체되면 작업이 업데이트된 값을 자동으로 받지 않습니다. 서비스가 업데이트된 암호 값으로 새 작업을 강제로 시작하도록 하려면 새 작업을 시작해야 합니다.

AWS Batch 암호에 대한 필수 IAM 권한

이 기능을 사용하려면 실행 역할이 있어야 하며 작업 정의에서 해당 역할을 참조해야 합니다. 이렇게 하면 컨테이너 에이전트가 필요한 Secrets Manager 리소스를 가져올 수 있습니다. 자세한 내용은 AWS Batch IAM 실행 역할 단원을 참조하십시오.

생성하는 Secretes Manger 암호에 액세스 권한을 부여하려면 다음 권한을 인라인 정책으로 실행 역할에 수동으로 추가하세요. 자세한 내용은 IAM 사용 설명서IAM 정책 추가 및 제거를 참조하세요.

  • secretsmanager:GetSecretValue–Secrets Manager 암호를 참조하는 경우에 필요합니다.

  • kms:Decrypt암호가 사용자 지정 KMS 키를 사용하고 기본 키를 사용하지 않는 경우에 필요합니다. 사용자 지정 키의 ARN을 리소스로 추가해야 합니다.

다음 예제에서는 인라인 정책이 필수 권한을 추가합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "kms:Decrypt" ], "Resource": [ "arn:aws:secretsmanager:<region>:<aws_account_id>:secret:<secret_name>", "arn:aws:kms:<region>:<aws_account_id>:key/<key_id>" ] } ] }

민감한 데이터를 환경 변수로 삽입

작업 정의 내에서 다음을 지정할 수 있습니다.

  • 작업에 설정할 환경 변수의 이름을 포함하는 secrets 객체

  • Secrets Manager 암호의 Amazon 리소스 이름(ARN)

  • 작업에 제공할 중요한 데이터를 포함하는 추가 파라미터

다음 예제에서는 Secrets Manager 암호에 대해 지정해야 하는 전체 구문을 보여 줍니다.

arn:aws:secretsmanager:region:aws_account_id:secret:secret-name:json-key:version-stage:version-id

다음 섹션에서는 추가 파라미터에 대해 설명합니다. 이 파라미터는 선택 사항입니다. 그러나 사용하지 않는 경우 기본값을 사용하려면 콜론(:)을 포함시켜야 합니다. 추가 컨텍스트에 대한 예제가 아래에 나와 있습니다.

json-key

환경 변수 값으로 설정할 값과 함께 키-값 쌍의 키 이름을 지정합니다. JSON 형식의 값만 지원됩니다. JSON 키를 지정하지 않으면 암호의 전체 내용이 사용됩니다.

version-stage

사용할 암호 버전의 스테이징 레이블을 지정합니다. 버전 스테이징 레이블이 지정된 경우 버전 ID를 지정할 수 없습니다. 버전 단계가 지정되지 않은 경우 기본 동작은 AWSCURRENT 스테이징 레이블을 사용하여 암호를 검색하는 것입니다.

스테이징 레이블은 암호가 업데이트되거나 교체되는 경우 암호의 여러 버전을 추적하는 데 사용됩니다. 암호의 각 버전에는 하나 이상의 스테이징 레이블과 ID가 있습니다. 자세한 정보는 AWS Secrets Manager 사용 설명서AWS Secrets Manager의 주요 용어 및 개념을 참조하세요.

version-id

사용하고자 하는 암호 버전의 고유 식별자를 지정합니다. 버전 ID가 지정된 경우 버전 스테이징 레이블을 지정할 수 없습니다. 버전 ID가 지정되지 않은 경우 기본 동작은 AWSCURRENT 스테이징 레이블을 사용하여 암호를 검색하는 것입니다.

버전 ID는 암호가 업데이트되거나 교체되는 경우 암호의 여러 버전을 추적하는 데 사용됩니다. 암호의 각 버전에는 ID가 있습니다. 자세한 정보는 AWS Secrets Manager 사용 설명서AWS Secrets Manager의 주요 용어 및 개념을 참조하세요.

컨테이너 정의 예제

다음 예제에서는 컨테이너 정의에서 Secretes Manager 암호를 참조할 수 있는 방법을 보여 줍니다.

예 전체 암호 참조

다음은 Secret Manager 암호의 전체 텍스트를 참조할 때 형식을 나타내는 태스크 정의의 조각입니다.

{ "containerProperties": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf" }] }] }
예 암호 내에서 특정 키 참조

다음은 암호의 내용을 관련 버전 스테이징 레이블 및 버전 ID와 함께 표시하는 get-secret-value 명령의 출력 예를 보여 줍니다.

{
    "ARN": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf",
    "Name": "appauthexample",
    "VersionId": "871d9eca-18aa-46a9-8785-981dd39ab30c",
    "SecretString": "{\"username1\":\"password1\",\"username2\":\"password2\",\"username3\":\"password3\"}",
    "VersionStages": [
        "AWSCURRENT"
    ],
    "CreatedDate": 1581968848.921
}

ARN 끝에 키 이름을 지정하여 컨테이너 정의에서 이전 출력의 특정 키를 참조합니다.

{ "containerProperties": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:username1::" }] }] }
예 특정 비밀 버전 참조

다음은 암호의 암호화되지 않은 내용을 모든 버전의 암호에 대한 메타데이터와 함께 표시하는 describe-secret 명령의 출력 예입니다.

{
    "ARN": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf",
    "Name": "appauthexample",
    "Description": "Example of a secret containing application authorization data.",
    "RotationEnabled": false,
    "LastChangedDate": 1581968848.926,
    "LastAccessedDate": 1581897600.0,
    "Tags": [],
    "VersionIdsToStages": {
        "871d9eca-18aa-46a9-8785-981dd39ab30c": [
            "AWSCURRENT"
        ],
        "9d4cb84b-ad69-40c0-a0ab-cead36b967e8": [
            "AWSPREVIOUS"
        ]
    }
}

ARN 끝에 키 이름을 지정하여 컨테이너 정의에서 이전 출력의 특정 버전 스테이징 레이블을 참조합니다.

{ "containerProperties": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf::AWSPREVIOUS:" }] }] }

ARN 끝에 키 이름을 지정하여 컨테이너 정의에서 이전 출력의 특정 버전 ID를 참조합니다.

{ "containerProperties": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf::9d4cb84b-ad69-40c0-a0ab-cead36b967e8" }] }] }
예 암호의 특정 키 및 버전 스테이징 레이블 참조

다음은 암호 내 특정 키와 특정 버전 스테이징 레이블을 모두 참조하는 방법을 보여줍니다.

{ "containerProperties": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:username1:AWSPREVIOUS:" }] }] }

특정 키 및 버전 ID를 지정하려면 다음 구문을 사용합니다.

{ "containerProperties": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:username1::9d4cb84b-ad69-40c0-a0ab-cead36b967e8" }] }] }

로그 구성에 민감한 데이터 삽입

작업 정의 내에서 logConfiguration을 지정할 때 컨테이너에 설정할 로그 드라이버 옵션의 이름과 컨테이너에 제공할 민감한 데이터가 들어있는 Secret Manager 암호의 전체 ARN을 사용하여 secretOptions를 지정할 수 있습니다.

다음은 Secrets Manager 암호를 참조할 때 형식을 나타내는 작업 정의의 조각입니다.

{ "containerProperties": [{ "logConfiguration": [{ "logDriver": "splunk", "options": { "splunk-url": "https://cloud.splunk.com:8080" }, "secretOptions": [{ "name": "splunk-token", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf" }] }] }] }

AWS Secrets Manager 보안 암호 생성

Secrets Manager 콘솔을 사용하여 민감한 데이터에 대한 암호를 생성할 수 있습니다. 자세한 정보는 AWS Secrets Manager 사용 설명서기본 암호 생성을 참조하세요.

기본 암호를 생성하는 방법

Secrets Manager를 사용하여 민감한 데이터에 대한 암호를 생성합니다.

  1. https://console.aws.amazon.com/secretsmanager/에서 Secrets Manager 콘솔을 엽니다.

  2. 새 비밀 저장을 선택합니다.

  3. 암호 유형 선택에서 다른 유형의 암호를 선택합니다.

  4. 사용자 지정 암호의 세부 정보를 쌍으로 지정합니다. 예를 들어 UserName이라는 키를 지정한 다음 그 값으로 적절한 사용자 이름을 입력할 수 있습니다. Password라는 이름으로 두 번째 키를 추가하고 그 값으로 암호 텍스트를 추가합니다. 또한 데이터베이스 이름, 서버 주소, TCP 포트 등에 해당하는 항목을 추가할 수도 있습니다. 필요한 정보를 저장하는 데 필요한 만큼 많은 쌍을 추가할 수 있습니다.

    또는 일반 텍스트 탭을 선택하고 원하는 방식으로 암호 값을 입력할 수 있습니다.

  5. 암호에서 보호되는 텍스트를 암호화하는 데 사용하려는 AWS KMS 암호화 키를 선택합니다. 암호화 키를 선택하지 않으면 Secrets Manager에서는 계정에 대한 기본 키가 있는지 확인하고 있는 경우 해당 키를 사용합니다. 기본 키가 없는 경우 Secrets Manager에서는 자동으로 하나를 생성합니다. 또한 새 키 추가를 선택하여 이 암호에 대한 사용자 지정 KMS를 생성할 수 있습니다. KMS 키를 생성하려면 계정에 KMS 키를 생성할 권한이 있어야 합니다.

  6. 다음을 선택합니다.

  7. 암호 이름으로 production/MyAwesomeAppSecret 또는 development/TestSecret 같은 선택 경로와 이름을 입력하고, 다음을 선택합니다. 필요한 경우 설명을 추가하면 나중에 이 암호의 용도를 기억하는 데 도움이 됩니다.

    암호 이름은 ASCII 문자, 숫자 또는 다음 문자 중 하나가 되어야 합니다. /_+=.@-

  8. (선택 사항) 이때, 암호에 대한 교체를 구성할 수 있습니다. 이 절차에서는 자동 회전 비활성화 상태로 두고 다음을 선택합니다.

    새 암호 또는 기존 암호에 대한 교체를 구성하는 자세한 방법은 AWS Secrets Manager암호 교체 섹션을 참조하세요.

  9. 설정을 검토한 다음 암호 저장을 선택하여 Secrets Manager에 새 암호로 입력한 모든 항목을 저장합니다.