전제조건: 기존에 사용하던 EC2인스턴스는 CDK로 만들어져 있지 않음.
AWS console에서 직접 버튼 누르면서 만들 수도 있으나 권한이 없는 경우 상사(들이 권한을 갖기 때문)에게 부탁할 일이 생긴다. 마냥 알아서 만들어 주세요 하면 시간 없는 상사들은 굉장히 귀찮아할 수도 있기 때문에 가급적이면 스크립트를 작성해서 넘기는 편이다.
때문에 이번에는 aws cli만을 이용했다.
참고 document: https://aws.amazon.com/jp/blogs/news/new-attach-an-aws-iam-role-to-an-existing-amazon-ec2-instance-by-using-the-aws-cli/
예를 들어, 기존에 사용하던 EC2가 S3에 파일을 생성/수정/삭제/읽어오기 등의 처리를 수행해야 한다고 하자.
(shell언어는 아직 모르는 것이 많아서 더 좋은 command가 있을 수 있다)
정책(policy) 작성
$ echo '
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": "arn:aws:s3:::my-bucket"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
' > /tmp/SearchEsAccessToS3.json
$ aws iam create-policy --policy-name EC2AccessToS3Policy --policy-document file:///tmp/EC2AccessToS3Policy.json --profile mfa-production
역할(role) 작성
$ echo '
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
}
' > /tmp/EC2AccessToS3Role.json
$ aws iam create-role --role-name EC2AccessS3Role --assume-role-policy-document file:///tmp/EC2AccessToS3Role.json --profile mfa-production
instance profile 작성
$ aws iam create-instance-profile --instance-profile-name EC2AccessToS3RoleInstanceProfile --profile mfa-production
정책을 역할에 attach
$ account_id=`aws sts get-caller-identity --query 'Account' --profile mfa-production`
$ aws iam attach-role-policy --role-name EC2AccessToS3Role --p
olicy-arn arn:aws:iam::${account_id:1:-1}:policy/EC2AccessS3Policy --profile mfa-production
EC2 인스턴스에 역할 연계
$ aws iam add-role-to-instance-profile --role-name EC2AccessToS3Role --instance-profile-name EC2AccessToS3RoleInstanceProfile --profile mfa-production
# 역할을 연계해야 하는 EC2 인스턴스가 한대일 경우
# Name tag가 붙어있을 경우
$ instance_id=`aws ec2 describe-instances --filters "Name=tag:Name,Values=my-instance-001" --query 'Reservations[].Instances[].[InstanceId][0][0]' --profile mfa-production`
# query로 취득한 값에서 큰 따음표 제거
$ aws ec2 associate-iam-instance-profile --instance-id ${instance_id:1:-1} --iam-instance-profile Name=EC2AccessToS3RoleInstanceProfile --profile mfa-production
# 역할을 연계해야 하는 EC2 인스턴스가 여러대일 경우
$ for i in {01..10}; do
instance_id=`aws ec2 describe-instances --filters "Name=tag:Name,Values=my-instance-0$i" --query 'Reservations[].Instances[].[InstanceId][0][0]' --profile mfa-production`
aws ec2 associate-iam-instance-profile --instance-id ${instance_id:1:-1} --iam-instance-profile Name=EC2AccessToS3RoleInstanceProfile --profile mfa-production
done
다만 제일 좋은 방법은 처음부터 CDK로 구축하는 것이다.
'AWS 노트' 카테고리의 다른 글
cdk bin디렉토리 안에 있는 앱 파일 이름 바꾸기 (0) | 2023.06.08 |
---|---|
CDK가 No stack could be identified for the construct at path ... 에러를 낼 때 (0) | 2022.04.07 |
Lambda에서 특정 네트워크 환경에서만 리퀘스트를 보낼 수 있는 API를 사용하기 (0) | 2020.11.19 |
Amazon Athena 를 사용해 SageMaker 노트북에서 SQL 쿼리 실행하기 (Amazon Web Services 블로그 번역) (0) | 2020.07.17 |
Docker 컨테이너를 AWS ECR 에 작성한 이미지로 build 하기 (SageMaker training job) (0) | 2020.07.15 |