Origin Access Identity(OAI)만 S3에 오브젝트를 조회할 수 있도록 Cloudfront를 배포했다.
젠킨스를 통해 S3에 Javascript SPA를 CI/CD 해야 하는데 aws s3 명령어가 "Access Denied" 되어 난감했다.
어떻게 해결해야 할까?
AWS cli에는 --profile 옵션을 사용할 수 있으며, Credentials 파일에서 특정 profile을 사용하는 것이다.
aws s3 ls s3://[버킷명] --profile [profile]
.aws/credentials 파일에 profile을 추가할 수 있으며, default가 기본으로 잡혀있는 것 같다.
"user1" 를 추가하는데, 아래와 같은 조건이 있다.
- s3를 다룰 수 있는 권한을 가진 프로그래밍 액세스 계정
- 해당 액세스 키와 시크릿 키를 입력해야 함
[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
[user1]
aws_access_key_id=AKIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
"user1"을 추가했으니 명령어를 실행해보자.
aws s3 ls s3://[버킷명] --profile user1
"Access Denied" 에러가 날 것이다.
왜냐하면 버킷의 보안 정책을 수정하지 않았기 때문이다.
Cloudfront 설정할 때, OAI만 접근 가능하도록 버킷 정책 자동 업데이트를 진행하면 아래와 같이 하나의 정책만 생성된다.
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity [OAI]"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::[버킷명]/*"
}
]
}
여기에 Credentials에 추가한 계정에 대한 정책을 추가하면 된다.
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity [OAI]"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::[버킷명]/*"
},
{
"Sid": "2",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::[root]:user/user1"
},
"Action": [
"s3:PutObject",
"s3:DeleteObject",
"s3:List*",
"s3:Get*"
],
"Resource": "arn:aws:s3:::[버킷명]/*"
}
]
}
다시 명령어를 입력해보면 원하는 결과를 얻을 것이다.
'[개발] Infrastructure > AWS' 카테고리의 다른 글
ECS 인스턴스 Docker에 컨테이너 안 올라갈 경우 (Feat. ECR, Jenkins, Gradle) - war 파일 (0) | 2021.09.07 |
---|---|
s3 bucket에서 사이즈가 가장 큰 file 찾기 (0) | 2021.08.12 |
About accessing AWS instances ssh using .pem (0) | 2021.08.06 |
사용 중인 모든 AWS 서비스를 확인하는 방법인 Tag Editor를 알아보자. (0) | 2021.07.30 |
미 사용 AWS EC2 보안 그룹은 어떻게 확인할까? (0) | 2021.07.28 |