내용으로 건너뛰기

Amazon ECS 작업 및 서비스의 시크릿 및 액세스 키를 관리하려면 어떻게 해야 합니까?

3분 분량
0

데이터베이스 자격 증명이나 API 키와 같은 민감한 정보에 액세스하도록 Amazon Elastic Container Service(Amazon ECS)를 구성했습니다. 하드코딩되지 않은 시크릿을 안전하게 관리 및 검색하려고 합니다.

해결 방법

하드코딩되지 않은 시크릿 및 액세스 키를 관리하려면 AWS Systems Manager의 기능인 AWS Secrets Manager 또는 Parameter Store를 사용합니다.

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

시크릿 만들기

시크릿을 만들려면 Secrets Manager 콘솔 또는 AWS CLI를 사용합니다. Parameter Store를 사용하여 시크릿을 저장하려면 put-parameter 명령을 실행합니다.

aws ssm put-parameter --type SecureString --name awsExampleParameter --value awsExampleValue

참고: awsExampleParameter를 사용자의 파라미터로, awsExampleValue을 시크릿으로 바꾸십시오.

Amazon ECS 작업의 시크릿 액세스 허용

Amazon ECS는 AWS Identity and Access Management(IAM) 작업 실행 역할을 사용하여 Secrets Manager 또는 Parameter Store로부터 시크릿 정보를 가져옵니다. 필요한 최소 권한을 가진 역할에 대한 IAM 정책을 만듭니다. Secrets Manager를 사용하는 경우 IAM 역할에 secretsmanager:GetSecretValue 권한이 있어야 합니다. Parameter Store를 사용하는 경우 IAM 역할에 ssm:GetParameterskms:Decrypt 권한이 있어야 합니다.

Secrets Manager 정책 예시:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "secretsmanager:GetSecretValue",
      "Resource": "arn:aws:secretsmanager:region:account-id:secret:secret-name"
    }
  ]
}

참고: arn:aws:secretsmanager:region:account-id:secret:secret-name을 시크릿 ARN으로 바꾸십시오.

Parameter Store 정책 예시:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameter",
                "ssm:GetParameters",
                "ssm:GetParameterHistory"
            ],
            "Resource": "arn:aws:ssm:region:account-id:parameter/parameter-name"
        },
        {
            "Effect": "Allow",
            "Action": "kms:Decrypt",
            "Resource": "arn:aws:kms:region:account-id:key/kms-key-id"
        }
    ]
}

참고: arn:aws:ssm:region:account-id:parameter/parameter-name을 파라미터의 ARN으로, arn:aws:kms:region:account-id:key/kms-key-id를 AWS Key Management Service(AWS KMS) 키로 바꾸십시오.

Amazon ECS 작업 실행 역할에 IAM 정책을 연결합니다.

Amazon ECS 작업 시크릿에 액세스

API 키나 자격 증명과 같은 민감한 데이터를 파라미터 또는 환경 변수로 전달할 수 있습니다. 먼저 환경 변수 또는 시크릿 매핑을 포함하도록 Amazon ECS 작업 정의를 수정합니다.

작업 정의의 시크릿 매핑 예시:

{
  "name": "MY_SECRET",
  "valueFrom": "arn:aws:secretsmanager:region:account-id:secret:secret-name"
}

이후 환경 변수를 Amazon ECS 컨테이너로 전달합니다.

작업 정의의 containerDefinitions 예시:

  - name: my-container
    environment:
      - name: Example_PASSWORD
        valueFrom: arn:aws:ssm:us-west-2:123456789012:parameter/my-app/example-password

CI/CD로 시크릿 관리

CI/CD(지속적 통합 및 지속적 전달) 배포 중에 환경 변수를 사용하여 시크릿을 동적으로 전달합니다. 배포 스크립트에 있는 Secrets Manager 또는 Parameter Store의 시크릿을 가져옵니다. 작업 정의에서 비밀을 하드코딩하지 마십시오. 대신 파라미터 또는 플레이스홀더를 사용하십시오. 자세한 정보 및 모범 사례는 AWS Secrets Manager, AWS KMS 및 AWS Certificate Manager를 사용한 DevOps 파이프라인 강화 및 데이터 보호를 참조하십시오.

예를 들어, AWS CodePipeline을 사용하는 경우 AWS CLI를 사용하여 시크릿을 가져오는 빌드 단계를 구성합니다.

bashCopy codeaws secretsmanager get-secret-value --secret-id secret-name --query 'SecretString' --output text

참고: secret-name을 시크릿으로 바꾸십시오.

시크릿 관리 문제 해결

Amazon ECS에서 시크릿을 사용할 때 문제가 발생하면 다음 작업을 수행하십시오.

  • Amazon ECS 작업의 IAM 역할에 올바른 secretsmanager:GetSecretValue 또는 ssm:GetParameter 권한이 있어야 합니다.

  • 거부됨 오류가 발생하면 IAM 정책이 올바른 Amazon ECS 작업 실행 역할에 연결되어 있는지 확인하십시오. 또한 IAM 정책의 시크릿 ARN이 정확해야 합니다.

  • Amazon ECS에서 시크릿을 가져올 수 없는 경우 올바른 AWS 리전 및 시크릿을 사용하고 있는지 확인하십시오. 시크릿을 테스트하려면 Amazon ECS 외부에서 get-secret-value 명령을 실행합니다.

    aws secretsmanager get-secret-value --secret-id secret-name --region region-code

    참고: secret-name을 시크릿으로, region-code를 리전으로 바꾸십시오.

AWS 공식업데이트됨 2년 전