반응형
ECS Fargate 및 Terraform으로 개인 도커 레지스트리 액세스
가능한 경우 간단한 토큰이나 사용자:비밀번호를 사용하여 개인 도커 레지스트리의 자격 증명을 포함하려면 ECS 작업 정의가 필요합니다.
아래는 제 코드입니다:
resource "aws_secretsmanager_secret" "docker_registry_secret" {
name_prefix = "/my_environment/registry/pwd"
}
resource "aws_secretsmanager_secret_version" "docker_registry_secret_version" {
secret_id = aws_secretsmanager_secret.docker_registry_secret.id
secret_string = xxxMYTOKENxxx
}
resource "aws_iam_role_policy" "password_policy_secretsmanager" {
name = "${var.task_name}-secretsmanager"
role = aws_iam_role.MY_ECS_ROLE.id
policy = <<-EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"secretsmanager:GetSecretValue"
],
"Effect": "Allow",
"Resource": [
"${aws_secretsmanager_secret.docker_registry_secret.arn}",
]
}
]
}
EOF
}
resource "aws_ecs_task_definition" "task_to_be_scheduled" {
.....
....
requires_compatibilities = ["FARGATE"]
network_mode = "awsvpc"
container_definitions = jsonencode([
{
"repositoryCredentials" : {
"credentialsParameter" : aws_secretsmanager_secret.docker_registry_secret.arn
},
....
....
])
}
그러나 작업을 시작할 때 ECS에서 다음과 같은 오류가 발생합니다:
저는 그 오류가 비밀 관리자와 관련이 있다고 확신하지만, 정확한 위치는 모르겠습니다. 내가 뭘 잘못하고 있는지 알아?
이 대답이 다른 사람에게 도움이 되었으면 좋겠습니다. 내가 두가지 실수를 했어요:
- 내 작업 정의에서, 나는 execution_role_arn 필드만 설정했다. task_role_arn을 추가하는 것을 잊었습니다.
# before
resource "aws_ecs_task_definition" "task_to_be_scheduled" {
execution_role_arn = aws_iam_role.ecs_role.arn
....
}
# after
resource "aws_ecs_task_definition" "task_to_be_scheduled" {
execution_role_arn = aws_iam_role.ecs_role.arn
task_role_arn = aws_iam_role.ecs_role.arn
....
}
- {"username": "gitlab-ci-token", "password": "your-password"} 대신 토큰을 credentialParameter로 사용하고 있었습니다
# before
container_definitions = jsonencode([
{
"repositoryCredentials" : {
"credentialsParameter" : "any-token-as-string"
},
....
}]
# after
container_definitions = jsonencode([
{
"repositoryCredentials" : {
"credentialsParameter" : {"username" : "gitlab-ci-token", "password" : "your-password"}
},
....
}]
다음을 사용한 후에도 비슷한 문제가 발생했습니다:
"repositoryCredentials": {
"credentialsParameter": {"username" : "xx" , "password" : "xxxxx"}
},
넥서스 저장소로 인증하려고 합니다.
오류: ECS 작업 정의 컨테이너_정의가 잘못되었습니다: JSON 디코딩 오류: json: Go struct 필드 RepositoryCredentials로 개체 마셜을 해제할 수 없습니다.리포지토리 자격 증명.자격 증명 문자열의 매개 변수
repositoryCredentials": {
"credentialsParameter": "arn:aws:secretsmanager:us-east-1:xxxxx:secret:NexusContainerRegistryAccess-yVnAfJ"
},
나는 시크릿 매니저를 이용해서 해결했다
반응형
'개발하자' 카테고리의 다른 글
장애인 일/월의 Flot datepicker 변경 스타일(이상적인 교차 또는 색상 변경) (0) | 2023.09.13 |
---|---|
FastAPI를 이용하여 엑셀 파일을 반납하고 다운로드하는 방법은? (0) | 2023.09.13 |
Basic Python calculator (0) | 2023.09.12 |
Typescript에 해당하는 typedef (0) | 2023.09.11 |
Svelte 구성 요소를 트리거/강제 업데이트하는 방법 (0) | 2023.09.11 |