AWS ECR 인증 자동화 설정
개요
CI/CD 작업 수행 시 Docker 이미지 빌드 후 ECR에 배포하게 됨
이후 EC2 또는 ECS에서 해당 이미지를 사용하게 되는데 EC2의 경우 빌드 한 이미지를 사용하는데 필요한 ECR 자격 증명이 필요하고 이를 Amazon ECR Docker Credential Helper 를 사용하여 자동화에 기여할 수 있는 방법에 대한 가이드
Amazon ECR Docker Credential Helper 설치 및 설정
- 설치
sudo dnf install -y amazon-ecr-credential-helper~/.docker/config.json파일 생성
{
"credsStore": "ecr-login"
}- Docker 서비스 재기동
sudo service docker restartEC2에 할당할 IAM Role 생성 및 할당
ECR Private repository의 이미지를 pull 하기 위해 arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly 정책(Policy)을 가진 권한(IAM Role)을 생성 후 EC2 인스턴스에 할당
- Terraform 코드 예시
# EC2
resource "aws_instance" "linux-instance" {
...
iam_instance_profile = aws_iam_instance_profile.ec2_profile.name
...
}
# EC2 IAM Role
resource "aws_iam_role" "ec2_role" {
name = "cd-target-instance-role"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = "sts:AssumeRole"
Effect = "Allow"
Sid = ""
Principal = {
Service = "ec2.amazonaws.com"
}
},
]
})
}
# EC2 SSM IAM profile
resource "aws_iam_instance_profile" "ec2_profile" {
name = "ec2-profile"
role = aws_iam_role.ec2_role.name
}
# IAM Policy(ECR ReadOnly)
resource "aws_iam_role_policy_attachment" "ecr_readonly_attach" {
role = aws_iam_role.ec2_role.name
policy_arn = "arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly"
}EC2 인스턴스 메타데이터 옵션 사용
~/.aws/credentials의 인증정보를 사용하는 것이 아닌 IMDSv2를 사용하여 인스턴스에 할당된 메타데이터( IAM Role)를 통해 인증 하는 방식을 사용
- AWS Console에서 직접 수정
- Instance → Instance settings → Modify instance metadata options

- Terraform 코드 예시
resource "aws_instance" "linux-instance" {
...
metadata_options { # https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html#imds-considerations
http_endpoint = "enabled"
http_tokens = "required" # IMDSv2
http_put_response_hop_limit = 2 # hop limit
instance_metadata_tags = "enabled"
}
...
}no basic auth credentials 오류 시
설정을 해도 인증 정보를 가져못하는 경우, 보통 인터넷에 연결 가능한 인스턴스가 해당 문제가 발생합니다.
[ec2-user@ip-1-1-1-1 temp]$ docker pull <AWS-ACCOUNT-ID>.dkr.ecr.ap-northeast-2.amazonaws.com/<PRIVATE-REPOSITORY-NAME>:<TAG>
Error response from daemon: Head "<AWS-ACCOUNT-ID>.dkr.ecr.ap-northeast-2.amazonaws.com/<PRIVATE-REPOSITORY-NAME>:<TAG>": no basic auth credentialsEC2 Windows 인스턴스에서 메타데이터에 접근할 수 없는 문제 해결 방법
본 기사는 EC2 Windows 인스턴스에서 메타데이터에 접근할 수 없는 문제가 발생되었을 때 이에 대한 해결 방법에 대해 설명합니다.

해결방법
메타데이터를 가져오는 서버 접근 시 Proxy를 사용하지 않도록 변경
EC2 인스턴스의 모든 유저가 로그인할 때마다 적용되도록 전역 profile.d에 스크립트 생성
echo 'export NO_PROXY="169.254.169.254,169.254.170.2,localhost,127.0.0.1"' > /etc/profile.d/proxy.sh
echo 'export no_proxy="169.254.169.254,169.254.170.2,localhost,127.0.0.1"' >> /etc/profile.d/proxy.sh
chmod +x /etc/profile.d/proxy.sh- Terraform 코드 예시
resource "aws_instance" "linux-instance" {
...
user_data = <<-EOF
#!/bin/bash
echo 'export NO_PROXY="169.254.169.254,169.254.170.2,localhost,127.0.0.1"' > /etc/profile.d/proxy.sh
echo 'export no_proxy="169.254.169.254,169.254.170.2,localhost,127.0.0.1"' >> /etc/profile.d/proxy.sh
chmod +x /etc/profile.d/proxy.sh
EOF
}
