저번 포스트에서는 AWS의 Secret을 만들었으니 이번에는 이것을 ECS에 연결해 보도록 하는 작업을 진행할 텐데 IAM정책부터 ECS의 태스크 정의까지 해보도록 한다.
1. IAM 역할 설정하기
먼저, ECS 태스크가 Secrets Manager에 접근할 수 있도록 ecsTaskExecutionRole IAM 역할에 권한을 부여해야 한다. 이 역할은 ECS 태스크가 다른 AWS 서비스와 상호 작용할 때 필요한 권한을 제공하는 역할이다.
1-1. IAM 콘솔 접속
- AWS 관리 콘솔에 로그인한 후, IAM 서비스 페이지로 이동한다.
1-2. 역할 선택
- 대시보드 페이지 좌측의 메뉴에서 '역할' 섹션을 클릭해서 들어간다.
- 아래와 같은 페이지가 나올 텐데 여기서 ecsTaskExecutionRole을 검색한다.
1-3. 정책 연결 또는 인라인 정책 추가
- 검색해서 나온 ecsTaskExecutionRole역할의 이름을 클릭해서 요약으로 들어가면 하단과 같은 페이지가 나온다.
1-4. Secrets Manager 권한 부여
- 하단의 "권한 정책"에서 우측의 "권한 추가" 버튼을 누른다.
- "권한 추가"를 눌렀다면 아래와 같이 보일 텐데 여기서 "정책 연결"을 클릭한다.
1-5. SecretsManagerReadWrite 정책 추가하기
- 아래와 같은 페이지가 나올 텐데 여기서 "SecretsManagerReadWrite"를 검색하도록 하자
- 검색된 SecretsManagerReadWrite 정책을 선택하고 하단의 "권한 추가"를 클릭한다.
1-6. 정책 연결 완료
- 위에서 "권한 추가" 버튼을 클릭했다면 하단의 페이지로 이동하면서 추가된 권한을 확인할 수가 있을 것이다.
2. ECS 태스크 정의 생성하기
IAM 역할에 권한을 설정한 후, ECS 태스크 정의에서 Secrets Manager의 시크릿을 환경변수로 사용할 수 있다.
2-1. ECS 콘솔 접속
- ECS 서비스 페이지로 이동한다.
2-2. 태스크 정의 생성 또는 수정
- 좌측 메뉴바의 "태스크 정의" 를 클릭해서 하단의 페이지로 들어온 다음 우측의"새 태스크 정의" 버튼을 클릭한다.
- 태스크 정의에 대한 방법은 하단의 포스트를 확인하자
2023.10.28 - [AWS] - AWS - ALB(로드 밸런서) 없이 ECS 생성하기
2-3. 시크릿 추가
- '컨테이너 정의' 섹션에서 "컨테이너 추가"를 클릭해서 들어가 준다.
- 컨테이너 추가 화면에서 아래로 스크롤해서 '환경' 부분을 찾아서 하단의 "환경 변수" 부분에 key, value를 추가한다.
2-4. 시크릿 키와 값 설정
- Secret을 만들 때 적었던 url, username, password를 key로 적는다. value에는 arn을 적어준다. 이때 중간에는 꼭 ValueForm을 선택해 주도록 하자 (여기서 문제가 발생한다. 다음 포스트를 확인하면 문제 해결에 대해서 확인할 수 있다. 이대로 따라 하면 추후 tomcat이 동작하지 않을 것이다.)
2-5. 태스크 정의 생성하기
- 생성하려니까 이런 에러가 발생했다.
- When you are specifying container secrets, you must also specify a value for 'executionRoleArn'.
2-6. 에러 해석 및 해결
- AWS ECS에서 태스크 정의에 비밀(Secrets)을 환경변수로 추가할 때는 해당 태스크가 AWS Secrets Manager에 접근할 수 있도록 executionRoleArn을 지정해야 한다. 이 역할은 ECS 태스크가 AWS 리소스에 접근할 때 사용하는 IAM 역할이다. 에러 메시지는 ECS 태스크가 비밀을 가져올 때 사용할 IAM 실행 역할(Execution Role)이 정의되지 않았다는 것을 나타낸다.
- "태스크 정의"를 생성할 때 내가 "작업 실행 IAM역할"을 선택하지 않았던 것이 문제였다. 얼른 다시 찾아가서 "ecsTaskExecutionRole"을 선택해 줬다.
- 다시 생성해 봤더니 생성에 성공했다.
이번 포스트에서는 ecsTaskExecutionRole에 Secret에 접근할 수 있는 IAM 정책을 생성해 줬고 이 정책을 적용시켜서 태스크 정의까지 생성해 봤다.
다음 포스트에서는 이 태스크 정의를 사용하여 ECS 서비스를 만들어보도록 하자
2023.11.03 - [AWS] - AWS Secrets & ECS SpringBoot 설정 (3-1): ECS배포와 오류 분석
2023.11.03 - [AWS] - AWS Secrets & ECS SpringBoot 설정 (1): Secret 생성
반응형
'AWS > ECS, ECR' 카테고리의 다른 글
AWS Secrets & ECS SpringBoot 설정 (3-2): 성공적인 배포 완료 (1) | 2023.11.03 |
---|---|
AWS Secrets & ECS SpringBoot 설정 (3-1): ECS배포와 오류 분석 (0) | 2023.11.03 |
AWS Secrets & ECS SpringBoot 설정 (1): Secret 생성 (0) | 2023.11.03 |
AWS ECS와 ALB: 동적 포트 vs 명시적 포트 설정의 EC2 DNS 접속 이슈 (1) | 2023.10.31 |
AWS - ALB를 적용시킨 ECS의 동적 포트 할당관계 동작원리 (1) | 2023.10.30 |