Elastic Beanstalk의 프라이빗 리포지토리에 있는 이미지 사용하기 - AWS Elastic Beanstalk

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Elastic Beanstalk의 프라이빗 리포지토리에 있는 이미지 사용하기

이 항목에서는 Elastic Beanstalk를 사용하여 프라이빗 온라인 이미지 리포지토리에 인증하는 방법을 설명합니다. Elastic Beanstalk는 온라인 레지스트리를 통해 인증을 거쳐야 이미지를 가져와서 배포할 수 있습니다. 이를 위한 여러 가지 옵션이 있습니다.

  • 아마존 ECR 리포지토리

  • 더 AWS Secrets Manager

  • Dockerrun.aws.json 파일

Amazon ECR 리포지토리의 이미지 사용

Amazon 엘라스틱 컨테이너 레지스트리 (AmazonECR) 에 AWS 사용자 지정 Docker 이미지를 저장할 수 있습니다.

Docker 이미지를 ECR Amazon에 저장하면 Elastic Beanstalk가 사용자 환경의 인스턴스 프로필을 사용하여 ECR Amazon 레지스트리에 자동으로 인증합니다. 따라서 Amazon ECR 리포지토리의 이미지에 액세스할 수 있는 권한을 인스턴스에 제공해야 합니다. 이렇게 하려면 Amazon EC2ContainerRegistryReadOnly 관리형 정책을 인스턴스 프로필에 연결하여 환경의 인스턴스 프로필에 권한을 추가하십시오. 이렇게 하면 계정의 모든 Amazon ECR 리포지토리에 대한 읽기 전용 액세스가 제공됩니다. 다음 템플릿을 사용하여 사용자 지정 정책을 생성하여 단일 리포지토리에만 액세스할 수도 있습니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEbAuth", "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken" ], "Resource": [ "*" ] }, { "Sid": "AllowPull", "Effect": "Allow", "Resource": [ "arn:aws:ecr:us-east-2:account-id:repository/repository-name" ], "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:GetRepositoryPolicy", "ecr:DescribeRepositories", "ecr:ListImages", "ecr:BatchGetImage" ] } ] }

위 정책의 Amazon 리소스 이름 (ARN) 을 리포지토리의 이름으로 바꾸십시오. ARN

Dockerrun.aws.json파일에 이미지 정보를 지정해야 합니다. 구성은 사용하는 플랫폼에 따라 달라집니다.

ECS관리형 Docker 플랫폼의 경우 컨테이너 정의 개체에서 image 키를 사용하십시오.

"containerDefinitions": [ { "name": "my-image", "image": "account-id.dkr.ecr.us-east-2.amazonaws.com/repository-name:latest",

Docker 플랫폼의 경우 이미지를 로 참조하십시오. URL Dockerrun.aws.json파일 URL Image 정의에는 다음과 같은 내용이 들어 있습니다.

"Image": { "Name": "account-id.dkr.ecr.us-east-2.amazonaws.com/repository-name:latest", "Update": "true" },

사용 AWS Secrets Manager

배포 프로세스를 시작하기 전에 프라이빗 리포지토리에 로그인하도록 Elastic Beanstalk를 구성할 수 있습니다. 이렇게 하면 Elastic Beanstalk에서 리포지토리의 이미지에 액세스하여 해당 이미지를 Elastic Beanstalk 환경에 배포할 수 있습니다.

이 구성은 Elastic Beanstalk 배포 프로세스의 미리 빌드 단계에서 이벤트를 시작합니다. 이는 .ebextentions 구성 디렉터리에서 설정합니다. 이 구성은 프라이빗 리포지토리를 호스팅하는 온라인 레지스트리로 인증하기 위해 docker login을 호출하는 플랫폼 후크 스크립트를 사용합니다. 이러한 구성 단계에 대한 자세한 분석은 다음과 같습니다.

다음을 사용하여 개인 리포지토리에 인증하도록 Elastic Beanstalk를 구성하려면 AWS Secrets Manager
참고

이러한 단계를 완료하려면 특정 권한을 부여해야 합니다. 자세한 내용은 다음 참고 자료를 참조하세요.

  • 2단계에서는 보안 암호를 생성하기 위한 권한이 필요합니다. 자세한 내용을 알아보려면 AWS Secrets Manager 사용 설명서예: 보안 암호 생성 권한을 참조하세요.

  • 3단계에서는 secretsmanager 동적 참조를 사용하여 보안 암호를 검색할 수 있는 권한이 필요합니다. 자세한 내용을 알아보려면 AWS Secrets Manager 사용 설명서예: 보안 암호 값을 검색할 수 있는 권한을 참조하세요.

  1. 다음과 같이 .ebextensions 디렉터리 구조를 생성합니다.

    ├── .ebextensions │ └── env.config ├── .platform │ ├── confighooks │ │ └── prebuild │ │ └── 01login.sh │ └── hooks │ └── prebuild │ └── 01login.sh ├── docker-compose.yml
  2. Elastic Beanstalk가 필요할 때 자격 증명을 검색할 수 있도록 개인 리포지토리의 자격 증명을 저장하는 데 사용합니다 AWS Secrets Manager . 이를 위해 Secrets Manager AWS CLI create-secret 명령을 실행하십시오.

    aws secretsmanager create-secret \ --name MyTestSecret \ --description "My image repo credentials created with the CLI." \ --secret-string "{\"USER\":\"EXAMPLE-USERNAME\",\"PASSWD\":\"EXAMPLE-PASSWORD\"}"
  3. 다음 env.config 파일을 생성하여 이전 디렉터리 구조에 표시된 대로 .ebextensions 디렉터리에 배치합니다. 이 구성은 aws:elasticbeanstalk:application:environment 네임스페이스를 사용하여 AWS Secrets Manager에 대한 동적 참조를 사용하는 USERPASSWD Elastic Beanstalk 환경 변수를 초기화합니다. secretsmanager동적 참조에 대한 자세한 내용은 사용 설명서의 AWS CloudFormation 리소스에서 AWS Secrets Manager 암호 검색을 참조하십시오.AWS Secrets Manager

    참고

    스크립트에서 USERPASSWD는 이전 secretsmanager create-secret 명령에서 사용된 문자열과 일치해야 합니다.

    option_settings: aws:elasticbeanstalk:application:environment: USER: '{{resolve:secretsmanager:MyTestSecret:SecretString:USER}}' PASSWD: '{{resolve:secretsmanager:MyTestSecret:SecretString:PASSWD}}'
  4. 다음 01login.sh 스크립트 파일을 생성하여 다음 디렉터리에 배치합니다(이전 디렉터리 구조에도 표시됨).

    • .platform/confighooks/prebuild

    • .platform/hooks/prebuild

    ### example 01login.sh #!/bin/bash USER=/opt/elasticbeanstalk/bin/get-config environment -k USER /opt/elasticbeanstalk/bin/get-config environment -k PASSWD | docker login -u $USER --password-stdin

    01login.sh 스크립트는 get-config 플랫폼 스크립트를 호출하여 리포지토리 보안 인증 정보를 검색한 다음 리포지토리로 로그인합니다. 스크립트는 사용자 이름을 USER 스크립트 변수에 저장합니다. 다음 줄에서는 암호를 검색합니다. 암호를 스크립트 변수에 저장하는 대신 스크립트는 암호를 stdin 입력 스트림의 docker login 명령에 직접 연결합니다. 이 --password-stdin 옵션은 입력 스트림을 사용하기 때문에 암호를 변수에 저장할 필요가 없습니다. 도커 명령줄 인터페이스를 사용한 인증에 대한 자세한 내용은 도커 설명서 웹 사이트의 도커 로그인을 참조하세요.

    참고
    • 모든 스크립트 파일에 실행 권한이 있어야 합니다. 후크 파일에 대한 실행 권한을 설정하려면 chmod +x를 사용합니다. 2022년 4월 29일 이후에 릴리스된 모든 Amazon Linux 2 기반 플랫폼 버전의 경우 Elastic Beanstalk가 모든 플랫폼 후크 스크립트에 실행 권한을 자동으로 부여합니다. 이 경우 실행 권한을 수동으로 부여할 필요가 없습니다. 이러한 플랫폼 버전 목록은 AWS Elastic Beanstalk 릴리스 정보2022년 4월 29일 - Linux 플랫폼 릴리스 정보를 참조하세요.

    • 후크 파일은 이진 파일 또는 해당 인터프리터 경로를 포함하는 #! 줄(#!/bin/bash)로 시작하는 스크립트 파일일 수 있습니다.

    • 자세한 내용은 Elastic Beanstalk Linux 플랫폼 확장플랫폼 후크 단원을 참조하십시오.

Elastic Beanstalk이 프라이빗 리포지토리를 호스팅하는 온라인 레지스트리로 인증하면 이미지를 가져오고 배포할 수 있습니다.

Dockerrun.aws.json 파일 사용

이 섹션에서는 프라이빗 리포지토리로 Elastic Beanstalk를 인증하는 또 다른 접근 방식에 대해 설명합니다. 이 접근 방식을 사용하면 도커 명령을 사용하여 인증 파일을 생성 한 다음 인증 파일을 Amazon S3 버킷에 업로드합니다. 또한 Dockerrun.aws.json 파일에 버킷 정보를 포함해야 합니다.

Elastic Beanstalk에 인증 파일을 생성하고 제공하려면
  1. docker login 명령으로 인증 파일을 생성합니다. 도커 허브의 리포지토리의 경우, docker login을 실행합니다:

    $ docker login

    다른 레지스트리의 경우 레지스트리 서버의 레지스트리를 URL 포함하세요.

    $ docker login registry-server-url
    참고

    Elastic Beanstalk 환경에서 아마존 리눅스 도커 플랫폼 버전 (AMI아마존 리눅스 2 이전 버전) 을 사용하는 경우, 에서 관련 정보를 읽어보세요. 아마존 리눅스에서의 도커 구성 AMI (이전 아마존 리눅스 2)

    인증 파일에 대한 자세한 내용은 도커 허브에서의 이미지 저장과 도커 웹 사이트의 docker login을 참조하십시오.

  2. 이름이 .dockercfg인 인증 파일의 복사본을 안전한 Amazon S3 버킷에 업로드합니다.

    • Amazon S3 버킷은 해당 버킷을 사용하는 환경과 AWS 리전 동일한 환경에서 호스팅되어야 합니다. Elastic Beanstalk는 다른 리전에 호스팅된 Amazon S3 버킷에서 파일을 다운로드할 수 없습니다.

    • 인스턴스 프로필의 IAM 역할에 s3:GetObject 작업 권한을 부여합니다. 자세한 내용은 Elastic Beanstalk 인스턴스 프로파일 관리 단원을 참조하십시오.

  3. Authentication 파일의 Dockerrun.aws.json 파라미터에 Amazon S3 버킷 정보를 포함합니다.

    다음 예제는 mydockercfg 버킷에 있는 인증 파일 amzn-s3-demo-bucket를 사용하여 타사 레지스트리에서 프라이빗 이미지를 사용하는 방법을 보여줍니다. 의 올바른 버전 번호는 예제 다음에 나오는 메모를 참조하십시오. AWSEBDockerrunVersion

    { "AWSEBDockerrunVersion": "version-no", "Authentication": { "Bucket": "amzn-s3-demo-bucket", "Key": "mydockercfg" }, "Image": { "Name": "quay.io/johndoe/private-image", "Update": "true" }, "Ports": [ { "ContainerPort": "1234" } ], "Volumes": [ { "HostDirectory": "/var/app/mydb", "ContainerDirectory": "/etc/mysql" } ], "Logging": "/var/log/nginx" }
    Dockerrun.aws.json 버전

    AWSEBDockerrunVersion 파라미터는 Dockerrun.aws.json 파일의 버전을 나타냅니다.

    • Docker AL2 및 AL2 023 플랫폼은 다음 버전의 파일을 사용합니다.

      • Dockerrun.aws.json v3— Docker Compose를 사용하는 환경.

      • Dockerrun.aws.json v1— Docker Compose를 사용하지 않는 환경

    • ECSAmazon Linux 2에서 ECS 실행하고 AL2 023에서 실행하면 Dockerrun.aws.json v2 파일이 사용됩니다. 사용 중지된 플랫폼 ECS- 멀티컨테이너 Docker Amazon Linux AMI (AL1) 도 이와 동일한 버전을 사용했습니다.

Elastic Beanstalk가 프라이빗 리포지토리를 호스팅하는 온라인 레지스트리로 인증하면 이미지를 배포하고 가져올 수 있습니다.