

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

# 이미지 리포지토리로 인증
<a name="docker-configuration.remote-repo"></a>

이 주제에서는 Elastic Beanstalk를 사용하여 온라인 이미지 리포지토리에 인증하는 방법을 설명합니다. 프라이빗 리포지토리의 경우 이미지를 가져와 배포하기 전에 Elastic Beanstalk가 인증해야 합니다. Amazon ECR Public의 경우 인증은 선택 사항이지만 더 높은 속도 제한과 향상된 신뢰성을 제공합니다.

## Amazon ECR 리포지토리의 이미지 사용
<a name="docker-images-ecr"></a>

[Amazon Elastic Container Registry](https://aws.amazon.com/ecr)(Amazon ECR) AWS 를 사용하여에 사용자 지정 Docker 이미지를 저장할 수 있습니다.

Amazon ECR에 Docker 이미지를 저장하면 Elastic Beanstalk는 환경의 [인스턴스 프로파일](concepts-roles-instance.md)을 사용하여 Amazon ECR 레지스트리에 자동으로 인증합니다. 따라서 Amazon ECR 리포지토리의 이미지에 액세스할 수 있는 권한을 인스턴스에 제공해야 합니다. 이렇게 하려면 [AmazonEC2ContainerRegistryReadOnly](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2ContainerRegistryReadOnly.html) 관리형 정책을 인스턴스 프로파일에 연결하여 환경의 인스턴스 프로파일에 권한을 추가합니다. 이렇게 하면 계정의 모든 Amazon ECR 리포지토리에 대한 읽기 전용 액세스 권한이 제공됩니다. 또한 다음 템플릿을 사용해서 사용자 지정 정책을 생성하여 단일 리포지토리에만 액세스할 수 있는 옵션도 있습니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowEbAuth",
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "AllowPull",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:ecr:us-east-2:{{111122223333}}: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 플랫폼](create_deploy_docker_v2config.md)의 경우, 컨테이너 정의 객체 ****에서 `image` 키를 사용합니다.

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

[Docker 플랫폼](single-container-docker-configuration.md)의 경우 URL별 이미지를 참조하세요. URL은 `Dockerrun.aws.json` 파일의 `Image` 정의에 포함됩니다.

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

## 사용 AWS Secrets Manager
<a name="docker-configuration.remote-repo.secrets"></a>

컨테이너 이미지에 액세스할 수 있도록 배포하기 전에 프라이빗 리포지토리로 인증하도록 Elastic Beanstalk를 구성합니다.

이 접근 방식은 두 가지 구성 요소와 함께 Elastic Beanstalk 배포 프로세스의 *사전 빌드* 단계를 사용합니다.
+ 리포지토리 자격 증명을 저장하는 환경 변수를 정의하는 [ebextensions](ebextensions.md)
+ 이미지를 가져오기 전에 **docker login**을 실행하는 [플랫폼 후크 스크립트](platforms-linux-extend.hooks.md)

후크 스크립트는 JSON 형식의 단일 AWS Secrets Manager 보안 암호에서 채워진 환경 변수에서 사용자 이름과 암호를 검색합니다. 이 기능을 사용하려면 2[026년 1월 13](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2026-01-13-al2023.html)일 또는 그 이후에 릴리스된 Elastic Beanstalk Docker 및 ECS 관리형 Docker 플랫폼이 필요합니다. 자세한 내용은 [환경 암호를 참조하세요](AWSHowTo.secrets.env-vars.md).

**를 사용하여 프라이빗 리포지토리에 인증하도록 Elastic Beanstalk를 구성하려면 AWS Secrets Manager**
**참고**  
계속하기 전에에서 AWS Secrets Manager 자격 증명을 설정하고 필요한 IAM 권한을 구성했는지 확인합니다. 자세한 내용은 [보안 암호를 환경 변수로 구성하기 위한 사전 조건](AWSHowTo.secrets.env-vars.md#AWSHowTo.secrets.configure-env-vars.prerequisites)을 참조하세요.

1. 프로젝트를 위해 다음 디렉터리 구조를 생성합니다.

   ```
   ├── .ebextensions
   │   └── env.config
   ├── .platform
   │   ├── confighooks
   │   │   └── prebuild
   │   │       └── 01login.sh
   │   └── hooks
   │       └── prebuild
   │           └── 01login.sh
   ├── Dockerfile
   ```

1. [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)를 사용하여 프라이빗 리포지토리의 자격 증명을 JSON 형식의 보안 암호로 저장합니다.

   ```
   aws secretsmanager create-secret --name repo-credentials \
       --secret-string '{"username":"myuser","password":"mypassword"}'
   ```

1. 다음 `env.config` 파일을 생성하여 이전 디렉터리 구조에 표시된 대로 `.ebextensions` 디렉터리에 배치합니다. 이 구성은 [JSON 키 추출](AWSHowTo.secrets.env-vars.md#AWSHowTo.secrets.json)과 함께 [aws:elasticbeanstalk:application:environmentsecrets](command-options-general.md#command-options-general-elasticbeanstalk-application-environmentsecrets) 네임스페이스를 사용하여 보안 암호의 개별 필드에서 `USER` 및 `PASSWD` Elastic Beanstalk 환경 변수를 초기화합니다.

   ```
   option_settings:
     aws:elasticbeanstalk:application:environmentsecrets:
       USER: arn:aws:secretsmanager:us-east-1:111122223333:secret:repo-credentials-AbCd12:username
       PASSWD: arn:aws:secretsmanager:us-east-1:111122223333:secret:repo-credentials-AbCd12:password
   ```

1. 다음 `01login.sh` 스크립트 파일을 생성하여 다음 위치에 배치합니다(이전 디렉터리 구조에도 표시됨).
   + `.platform/confighooks/prebuild/01login.sh`
   + `.platform/hooks/prebuild/01login.sh`

   ```
   #!/bin/bash
   echo $PASSWD | docker login -u $USER --password-stdin
   ```

   스크립트는 `01login.sh` **3단계**에서 구성된 환경 변수를 사용하고를 **docker login** 통해 암호를에 전달합니다`stdin`. Docker 인증에 대한 자세한 내용은 Docker 설명서의 [docker login](https://docs.docker.com/engine/reference/commandline/login/)을 참조하세요.
**참고**  
ECS 관리형 Docker 플랫폼은 보안 암호를 참조하기 위해 기본 ECS 구문을 사용합니다. 자세한 내용은 [Amazon Elastic Container Service 개발자 안내서의 Amazon ECS 환경 변수를 통해 Secrets Manager 보안 암호 전달](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/secrets-envvar-secrets-manager.html)을 참조하세요. ** 
플랫폼 후크에 대한 자세한 내용은 *Elastic Beanstalk Linux 플랫폼 확장*[플랫폼 후크](platforms-linux-extend.hooks.md)의 섹션을 참조하세요.

인증이 구성되면 Elastic Beanstalk는 프라이빗 리포지토리에서 이미지를 가져와 배포할 수 있습니다.

## `Dockerrun.aws.json` 파일 사용
<a name="docker-configuration.remote-repo.dockerrun-aws"></a>

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

**Elastic Beanstalk에 인증 파일을 생성하고 제공하려면**

1. **docker login** 명령으로 인증 파일을 생성합니다. 도커 허브의 리포지토리의 경우, **docker login**을 실행합니다:

   ```
   $ docker login
   ```

   다른 레지스트리의 경우, 레지스트리 서버의 URL을 포함시킵니다:

   ```
   $ docker login {{registry-server-url}}
   ```
**참고**  
Elastic Beanstalk 환경에서 Amazon Linux AMI 도커 플랫폼 버전(이전 Amazon Linux 2)을 사용하는 경우 [Amazon Linux AMI(이전 Amazon Linux 2)에서 Docker 구성](create_deploy_docker.container.console.md#docker-alami)의 관련 정보를 읽어 보십시오.

   인증 파일에 대한 자세한 내용은 [도커 허브에서의 이미지 저장](https://docs.docker.com/docker-hub/repos/)과 도커 웹 사이트의 [docker login](https://docs.docker.com/engine/reference/commandline/login/)을 참조하십시오.

1. 이름이 `.dockercfg`인 인증 파일의 복사본을 안전한 Amazon S3 버킷에 업로드합니다.
   + Amazon S3 버킷은 이를 사용하는 환경 AWS 리전 과 동일한에서 호스팅되어야 합니다. Elastic Beanstalk는 다른 리전에 호스팅된 Amazon S3 버킷에서 파일을 다운로드할 수 없습니다.
   + 인스턴스 프로파일의 IAM 역할에 `s3:GetObject` 작업에 대한 권한을 부여합니다. 자세한 내용은 [Elastic Beanstalk 인스턴스 프로파일 관리](iam-instanceprofile.md) 섹션을 참조하세요.

1. `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 및 AL2023 플랫폼은 다음과 같은 버전의 파일을 사용합니다.  
`Dockerrun.aws.json v3` - Docker Compose를 사용하는 환경.
`Dockerrun.aws.json v1` - Docker Compose를 사용하지 않는 환경.
*Amazon Linux 2에서 실행되는 ECS* 및 *AL2023에서 실행되는 ECS*는 `Dockerrun.aws.json v2` 파일을 사용합니다. 사용 중지된 플랫폼인 *ECS-다중 컨테이너 Docker Amazon Linux AMI(AL1)*도 동일한 버전을 사용했습니다.

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

## Amazon ECR Public의 이미지 사용
<a name="docker-images-ecr-public"></a>

Amazon ECR Public은 Docker 이미지를 호스팅하는 퍼블릭 컨테이너 레지스트리입니다. Amazon ECR Public 리포지토리는 공개적으로 액세스할 수 있지만, 인증하면 배포에 더 높은 속도 제한과 더 나은 안정성을 제공합니다.

**참고**  
중국 리전(`cn-*`) 및 AWS GovCloud 리전()에서는 Amazon ECR 퍼블릭 인증이 지원되지 않습니다`us-gov-*`. 이러한 리전에서 Elastic Beanstalk는 인증되지 않은 가져오기를 사용합니다.

Amazon ECR Public 인증을 활성화하려면 환경의 [인스턴스 프로파일](concepts-roles-instance.md)에 다음 권한을 추가합니다. Amazon ECR Public 인증에 대한 자세한 내용은 *Amazon Elastic Container Registry Public 사용 설명서*의 [Amazon ECR public의 레지스트리 인증](https://docs.aws.amazon.com/AmazonECR/latest/public/public-registries.html)을 참조하세요.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
       {
          "Effect": "Allow",
          "Action": [
             "ecr-public:GetAuthorizationToken",
             "sts:GetServiceBearerToken"
          ],
          "Resource": "*"
       }
    ]
}
```

------

이러한 권한이 인스턴스 프로파일에 연결되면 Elastic Beanstalk는 Amazon ECR Public 레지스트리로 자동 인증합니다. `Dockerrun.aws.json` 파일 또는 Dockerfile의 표준 `public.ecr.aws/{{registry-alias}}/{{repository-name:tag}}` 형식을 사용하여 Amazon ECR Public 이미지를 참조할 수 있습니다.