aws cli 초기 설정
AWS의 서버리스 웹 애플리케이션 구축 튜토리얼을 따라하고 있다. AWS를 내가 직접 만지는건 3년만이다. 그간 모르긴 몰라도 많이 바뀌었다. aws cli조차도 구성하기 힘들었다. 튜토리얼을 따라하기 위하여 aws cli로 S3를 만질 수 있도록 설정하는 과정을 정리해보았다.
1. aws configure
튜토리얼이 알려주는대로 aws cli를 설치한 후, 가벼운 마음으로 첫번째 명령어를 입력했다. aws sync. 아래와 같이 보기좋게 에러가 떨어진다.
$ aws s3 sync s3://wildrydes-us-east-1/WebApplication/1_StaticWebHosting/website s3://wildrydes-ys-a --region ap-northeast-2 # 복사하려고 했더니
fatal error: Unable to locate credentials # 인증이 안된다는 오류가 뜨네
aws cli가 내 S3 bucket에 접근하기 위해서는 로그인 정보가 필요하다. 설정해주자. 우선 IAM에서 사용자를 추가하고 key를 얻는다.
잘 모르겠으면 공식 문서를 참조하자.
발급받은 AWS Access Key ID와 AWS Secret Access Key는 잘 적어둬야한다. aws configure에 필요하다.
$ aws configure # aws cli 설정정보를 입력하자
AWS Access Key ID [None]: 나의 키 # 방금 발급받은 그 키
AWS Secret Access Key [None]: 내 비밀 키 # 방금 발급받은 그 비밀 키
Default region name [None]: ap-northeast-2 # 서울 리전
Default output format [None]: json
이제 aws cli 설정은 다 끝났다.
2. 버킷 정책
하지만 여전히 sync는 안 될 것이다.
$ aws s3 sync s3://wildrydes-us-east-1/WebApplication/1_StaticWebHosting/website s3://wildrydes-ys-a --region ap-northeast-2 # 복사하려고 했더니
fatal error: An error occurred (AccessDenied) when calling the ListObjects operation: Access Denied # 권한이 없다는 오류가 뜨네
버킷 정책을 세워야 한다.
정책 생성기를 사용해도 되고, 공식 문서를 참고해도 된다.
나는 아래와 같이 만들었다.
// wildrydes-ys-a 버킷의 모든 리소스에 나만 접근할 수 있게 설정했다.
// 주석은 빼고 입력해야 한다
{
"Id": "Policy1523420131398",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1523419995280",
"Action": "s3:*", // S3에 한하여 뭐든지 다 허용
"Effect": "Allow",
"Resource": "arn:aws:s3:::s3://wildrydes-ys-a/*", // 대상은 wildrydes-ys-a bucket의 모든 리소스
"Principal": {
"AWS": [
"arn:aws:iam::398594406637:user/ys" // IAM에서 사용자 ARN 값을 넣으면 됨. 요 값은 내 ARM 값
]
}
}
]
}
잘못 설정하면 저장이 안된다. 혹시나 잘못 입력할까봐 걱정하며 망설이지 말고 마구 저장 버튼을 눌러보자. Principal: “*“ 으로 입력하면 public 버킷이 된다.
3. 권한 추가
하지만 에러는 여전하다.
$ aws s3 sync s3://wildrydes-us-east-1/WebApplication/1_StaticWebHosting/website s3://wildrydes-ys-a --region ap-northeast-2 # 복사하려고 했더니
fatal error: An error occurred (AccessDenied) when calling the ListObjects operation: Access Denied # 권한이 없다는 오류가 뜨네
IAM에서 권한을 주자. 나는 그냥 AdministratorAccess 권한을 주었다.
4. 끝
이제 잘 된다!
Leave a comment