Systems Manager 파라미터 스토어를 사용하여 민감한 데이터 지정 - Amazon Elastic Container Service

Systems Manager 파라미터 스토어를 사용하여 민감한 데이터 지정

Amazon ECS를 사용하면 AWS Systems Manager 파라미터 스토어 파라미터에 민감한 데이터를 저장한 후 컨테이너 정의에서 참조하여 컨테이너에 민감한 데이터를 주입할 수 있습니다.

Systems Manager 파라미터 스토어를 사용하여 민감한 데이터 지정 시 고려할 사항

Systems Manager 파라미터 스토어 파라미터를 사용하여 컨테이너에 민감한 데이터를 지정할 때 다음 사항을 고려해야 합니다.

  • Fargate 시작 유형을 사용하는 태스크의 경우 이 기능을 사용하려면 플랫폼 버전 1.3.0 이상(Linux) 또는 1.0.0 이상(Windows)이 필요합니다. 자세한 정보는 AWS Fargate 플랫폼 버전 섹션을 참조하세요.

  • EC2 시작 유형을 사용하는 태스크의 경우 이 기능을 사용하려면 컨테이너 인스턴스에 버전 1.22.0 이상의 컨테이너 에이전트가 있어야 합니다. 그러나 최신 버전의 컨테이너 에이전트를 사용하는 것이 좋습니다. 에이전트 버전을 확인하고 최신 버전으로 업데이트하는 방법에 대한 자세한 내용은 Amazon ECS 컨테이너 에이전트 업데이트 섹션을 참조하세요.

  • 컨테이너가 처음 시작될 때 해당 컨테이너에 중요한 정보가 주입됩니다. 암호 또는 Parameter Store 파라미터가 이후에 업데이트되거나 교체되면 컨테이너가 업데이트된 값을 자동으로 받지 않습니다. 새 태스크를 시작해야 하거나 작업이 서비스의 일부인 경우 서비스를 업데이트하고 새 배포 강제 적용을 사용하여 서비스에서 새 태스크를 시작하도록 강제로 지정할 수 있습니다.

  • awslogs 로깅 드라이버를 사용하도록 구성된 Windows 태스크의 경우 컨테이너 인스턴스에 ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE 환경 변수도 설정해야 합니다. 이 태스크는 다음 구문을 사용하는 사용자 데이터로 수행할 수 있습니다.

    <powershell> [Environment]::SetEnvironmentVariable("ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE", $TRUE, "Machine") Initialize-ECSAgent -Cluster <cluster name> -EnableTaskIAMRole -LoggingDrivers '["json-file","awslogs"]' </powershell>

Amazon ECS 암호에 대한 필수 IAM 권한

이 기능을 사용하려면 Amazon ECS 태스크 실행 역할이 있어야 하며 태스크 정의에서 해당 역할을 참조해야 합니다. 이렇게 하면 컨테이너 에이전트가 필요한 AWS Systems Manager 리소스를 가져올 수 있습니다. 자세한 내용은 Amazon ECS 태스크 실행 IAM 역할 섹션을 참조하세요.

중요

EC2 시작 유형을 사용하는 태스크의 경우, 이 기능을 사용하려면 ECS 에이전트 구성 변수인 ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE=true를 사용해야 합니다. 컨테이너 인스턴스를 생성할 때 이를 ./etc/ecs/ecs.config 파일에 추가하거나 기존 인스턴스에 추가한 다음 ECS 에이전트를 다시 시작할 수 있습니다. 자세한 내용은 Amazon ECS 컨테이너 에이전트 구성 섹션을 참조하세요.

사용자가 생성하는 AWS Systems Manager 파라미터 스토어 파라미터에 액세스 권한을 부여하려면 태스크 실행 역할에 다음 권한을 인라인 정책으로서 직접 추가하세요. 자세한 내용은 IAM 정책 추가 및 제거 섹션을 참조하세요.

  • ssm:GetParameters―태스크 정의에서 Systems Manager 파라미터 스토어 파라미터를 참조하는 경우에 필요합니다.

  • secretsmanager:GetSecretValue―Secrets Manager 암호를 직접 참조하는 경우 또는 Systems Manager 파라미터 스토어 파라미터가 태스크 정의에서 Secrets Manager 암호를 참조하는 경우에 필요합니다.

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

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

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

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

컨테이너 정의 내에서 컨테이너에 설정할 환경 변수의 이름으로 secrets를 지정하여 컨테이너에 제공할 민감한 데이터가 들어있는 Systems Manager 파라미터 스토어 파라미터의 전체 ARN을 지정합니다.

다음은 Systems Manager 파라미터 스토어 파라미터를 참조할 때 형식을 나타내는 태스크 정의의 조각입니다. Systems Manager 파라미터 스토어 파라미터가 현재 실행 중인 태스크와 동일한 리전에 있는 경우, 파라미터의 전체 ARN 또는 이름을 사용할 수 있습니다. 파라미터가 다른 리전에 있다면 전체 ARN을 지정해야 합니다.

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter/parameter_name" }] }] }

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

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

중요

Systems Manager 파라미터 스토어 파라미터가 현재 실행 중인 태스크와 동일한 리전에 있는 경우, 파라미터의 전체 ARN 또는 이름을 사용할 수 있습니다. 파라미터가 다른 리전에 있다면 전체 ARN을 지정해야 합니다.

다음은 Systems Manager 파라미터 스토어 파라미터를 참조할 때 형식을 나타내는 태스크 정의의 조각입니다.

{ "containerDefinitions": [{ "logConfiguration": [{ "logDriver": "fluentd", "options": { "tag": "fluentd demo" }, "secretOptions": [{ "name": "fluentd-address", "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter:/parameter_name" }] }] }] }

AWS Systems Manager 파라미터 스토어 파라미터 생성

AWS Systems Manager 콘솔을 사용하면 민감한 데이터에 대한 Systems Manager 파라미터 스토어 파라미터를 생성할 수 있습니다. 자세한 내용은 AWS Systems Manager 사용 설명서연습: 명령에 파라미터 생성 및 사용(콘솔)을 참조하세요.

파라미터 스토어 파라미터를 생성하려면

  1. AWS Systems Manager 콘솔(https://console.aws.amazon.com/systems-manager/)을 엽니다.

  2. 탐색 창에서 파라미터 스토어(Parameter Store), 파라미터 생성(Create parameter)을 차례대로 선택합니다.

  3. 이름(Name)에서 계층 구조와 파라미터 이름을 입력합니다. 예를 들어 /test/database_password를 입력합니다.

  4. 설명(Description)에 선택적 설명을 입력합니다.

  5. 유형에서 String, StringList 또는 SecureString을 선택합니다.

    참고
    • SecureString을 선택한 경우, KMS 키 ID 필드가 표시됩니다. KMS 키 ID, KMS 키 ARN, 별칭 이름 또는 별칭 ARN을 제공하지 않으면 시스템에서 Systems Manager용 기본 KMS 키인 alias/aws/ssm을 사용합니다. 이 키의 사용을 방지하려면 사용자 지정 키를 선택합니다. 자세한 내용은 AWS Systems Manager 사용 설명서보안 문자열 파라미터 사용을 참조하세요.

    • 사용자 지정 KMS 키 별칭 이름 또는 별칭 ARN과 함께 key-id 파라미터를 사용하여 콘솔에 보안 문자열 파라미터를 생성할 때에는 별칭 앞에 접두사 alias/를 지정해야 합니다. ARN 예제는 다음과 같습니다.

      arn:aws:kms:us-east-2:123456789012:alias/MyAliasName

      별칭 이름 예제는 다음과 같습니다.

      alias/MyAliasName
  6. 값(Value)에 값을 입력합니다. 예: MyFirstParameter. SecureString을 선택한 경우, 입력하는 값이 마스킹됩니다.

  7. 파라미터 생성(Create parameter)을 선택합니다.

민감한 데이터를 참조하는 클래식 콘솔에서 태스크 정의 생성

Amazon ECS 콘솔을 사용하면 Systems Manager 파라미터 스토어 파라미터를 참조하는 태스크 정의를 생성할 수 있습니다.

암호를 지정하는 태스크 정의를 생성하는 방법

  1. https://console.aws.amazon.com/ecs/에서 Amazon ECS 콘솔을 엽니다.

  2. 탐색 창에서 태스크 정의, 새 태스크 정의 생성을 차례대로 선택합니다.

  3. 시작 유형 호환성 선택 페이지에서 작업의 시작 유형을 선택한 다음, 다음 단계를 선택합니다.

    참고

    이 단계는 현재 AWS Fargate를 사용하여 Amazon ECS를 지원하는 리전에만 적용됩니다. 자세한 내용은 AWS Fargate의 Amazon ECS 섹션을 참조하세요.

  4. 태스크 정의 이름(Task Definition Name)에 태스크 정의 이름을 입력합니다. 최대 255개의 문자(대문자 및 소문자), 숫자, 하이픈 및 밑줄이 허용됩니다.

  5. 태스크 실행 역할에서 기존 태스크 실행 역할을 선택하거나, 혹은 새 역할 생성을 선택하여 사용자 역할을 하나 생성합니다. 이렇게 생성된 역할은 태스크에 사용할 프라이빗 이미지를 가져올 수 있는 권한을 Amazon ECS에게 부여합니다. 자세한 내용은 프라이빗 레지스트리 인증에 대한 필수 IAM 권한 섹션을 참조하세요.

    중요

    태스크 실행 역할 필드가 나타나지 않을 경우, JSON을 통한 구성을 선택하고 executionRoleArn 필드를 수동으로 추가하여 태스크 실행 역할을 지정하세요. 다음 코드는 구문을 보여줍니다.

    "executionRoleArn": "arn:aws:iam::aws_account_id:role/ecsTaskExecutionRole"
  6. 태스크 정의에서 각 컨테이너를 생성할 때마다 다음 단계를 수행합니다.

    1. 컨테이너 정의에서 컨테이너 추가를 선택합니다.

    2. 컨테이너 이름(Container name)에 컨테이너 이름을 입력합니다. 최대 255개의 문자(대문자 및 소문자), 숫자, 하이픈 및 밑줄이 허용됩니다.

    3. 이미지(Image)는 이미지 이름 또는 프라이빗 이미지 경로를 입력합니다. 최대 255개의 문자(대문자 및 소문자), 숫자, 하이픈 및 밑줄이 허용됩니다.

    4. 고급 컨테이너 구성을 확장합니다.

    5. 환경 변수로 주입할 중요한 데이터의 경우, 환경 아래의 환경 변수에서 다음 필드를 작성합니다.

      1. 키(Key)에서 컨테이너에 설정할 해당 환경 변수의 이름을 입력합니다. 이것은 컨테이너 정의의 secrets 섹션에 있는 name 필드에 해당합니다.

      2. 값(Value)에서 ValueFrom을 선택합니다. 값 추가에서 컨테이너에 환경 변수로 제공할 데이터가 들어 있는 AWS Systems Manager 파라미터 스토어 파라미터의 전체 ARN을 입력합니다.

        참고

        Systems Manager 파라미터 스토어 파라미터가 현재 실행 중인 태스크와 동일한 리전에 있을 경우, 해당 암호의 전체 ARN 또는 이름을 사용할 수 있습니다. 파라미터가 다른 리전에 있다면 전체 ARN을 지정해야 합니다.

    6. 컨테이너에 대한 로그 구성에서 참조되는 암호의 경우, 스토리지 및 로깅에서 로그 구성에 대해 다음 필드를 완료하세요.

      1. CloudWatch Logs 자동 구성(Auto-configure) 옵션 선택을 취소합니다.

      2. 로그 옵션에서 에 설정할 로그 구성 옵션의 이름을 입력하세요.

      3. 값(Value)에서 ValueFrom을 선택합니다. 값 추가에서 로그 구성에 로그 옵션으로 제공할 데이터가 들어 있는 AWS Systems Manager 파라미터 스토어 파라미터의 이름 또는 전체 ARN을 입력합니다.

        참고

        Systems Manager 파라미터 스토어 파라미터가 현재 실행 중인 태스크와 동일한 리전에 있을 경우, 해당 암호의 전체 ARN 또는 이름을 사용할 수 있습니다. 파라미터가 다른 리전에 있다면 전체 ARN을 지정해야 합니다.

    7. 컨테이너 정의에서 사용할 나머지 필수 필드와 선택 필드를 작성합니다. 고급 컨테이너 구성 메뉴에서는 더 많은 컨테이너 정의 파라미터가 사용됩니다. 자세한 내용은 태스크 정의 파라미터 섹션을 참조하세요.

    8. 추가(Add)를 선택합니다.

  7. 컨테이너를 추가하려면 생성(Create)을 선택합니다.