본문 바로가기

AWS(Amazon Web Service)

AWS 인스턴스 스케줄러 KMS 권한 설정 방법

일반적으로 AWS의 EC2 및 RDS 인스턴스를 특정시간에 OFF/ON 하기 위해 인스턴스 스케줄러(instance scheduler)를 많이 사용합니다.

사용하지 않는 리소스를 중지하고 필요할 때 사용하므로 비용 절감에 많은 도움이 됩니다.

 

 

Instance Scheduler on AWS

https://aws.amazon.com/ko/solutions/implementations/instance-scheduler-on-aws/

 

Instance Scheduler on AWS | AWS 솔루션 | AWS Solutions Library

닫기 1단계 AWS CloudFormation 템플릿은 고객이 정의한 간격으로 Amazon CloudWatch 이벤트를 설정합니다. 이 이벤트는 Instance Scheduler AWS Lambda 함수를 간접 호출합니다. 구성 중에 AWS 리전 및 계정을 정의

aws.amazon.com

 

구현 가이드를 참고하면 CloudFormation 인스턴스 스케줄러 템플릿을 사용하여 생성합니다.

생성 시 IAM역할이 필요하고, KMS KEY가 필요하기 때문에 해당 권한이 있는 계정으로 생성하게 됩니다. 특정 계정이나 역할이 Administrator Access권한이 있다면 해당 계정이나 역할로 cloudformation 템플릿을 수행해서 스케줄러를 생성합니다.

아래와 같이 IAM 역할이 만들어지고, KMS키가 만들어지고, Lambda코드, DynamoDB테이블들이 생성됩니다.

다른 부분은 생성 후 크게 수정할 부분이 없는데, DynamoDB테이블에 Schedule과 Period를 생성하거나 변경해서 스케줄을 만듭니다.

 

초기 Cloudformation 생성시 사용한 계정의 권한을 계속해서 사용할 수 없는 경우가 많이 있습니다.

 

Administrator Access권한을 부여하기에는 불필요하게 많은 권한을 부여하기 때문입니다.

 

아래는 다른 IAM 역할이 DynamoDB테이블에 액세스 하기 위해서 테이블을 조회하게 되면 권한 부족으로 오류가 발생됩니다. 처음에는 DynamoDB Full Access권한을 부여합니다.

 

그 후에도 오류가 발생되면 KMS 키에 대한 권한을 확인해봐야합니다.

 

초기 생성된 KMS 키를 사용할 권한이 없기 때문입니다.

 

KMS에서 Custom Managed Key에 보면 Instance Scheduler관련 키가 있습니다.

 

이 키의 key policy 편집해서 Allows use of key 아래 부분을 다음과 같이 수정합니다.

-- AS-IS
"AWS": "arn:aws:iam::2888888888883:role/instance-scheduler-SchedulerRole-1xxxxxxxxx"

-- TO-BE
"AWS": [
            "arn:aws:iam::2888888888883:role/instance-scheduler-SchedulerRole-1xxxxxxxxx",
            "arn:aws:iam::2888888888883:role/a-role"
          ]

 

위와 같이 수정 후 DynamoDB 테이블을 액세스 할 수 있습니다.