Gashida님의 AHSS 1기 온라인 스터디에서 학습한 내용을 정리하였습니다.
S3 접근통제
S3 접근통제 방법에는 객체 & 버킷 액세스 제어 목록(ACL), 버킷정책 , IAM 정책이 있습니다.
1. 객체 & 버킷 엑세스 제어 목록
액세스 제어 목록(ACL)을 사용하여 버킷 및 객체 각각에 대한 액세스를 제어할 수 있습니다.
ACL은 IAM보다 먼저 적용되며, ACL를 사용하면 각 객체에 대해 액세스를 개별적으로 제어해야 하므로 일반적인 경우에는 사용을 권장하지 않습니다. 따라서 버킷을 생성하면 기본적으로 ACL이 비활성화 되어있습니다.
2. 버킷정책
버킷 정책은 아래 예제와 같은 엑세스 정책 언어로 표현됩니다.
{
"Version":"2012-10-17",
"Statement":[
{
# Principal 요소는 사용자, 계정, 서비스 또는 리소스에 대한 엑세스가 허용 또는 거부된 주체를 지정합니다.
"Principal":{
"AWS":"arn:aws:iam::111122223333:role/JohnDoe"
},
#허용/금지 여부
"Effect":"Allow",
# Effect에 영향 받는 객체 작업
"Action":[
"s3:GetObject",
"s3:GetObjectVersion"
],
#리소스 이름 형식(arn) aws + 서비스 + 상대 ID(bucket-name, bucket-name/object-key, *)
"Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
#정책이 적용되기 위한 조건지정
"Condition":{
"StringEquals":{
"s3:ExistingObjectTag/environment":"production"
}
}
}
]
}
버킷 정책을 활용하여 Principal, 객체 작업, 리소스 와 요청의 여러 측면(IP 주소 등)을 비롯한 다양한 조건을 기반으로 버킷 또는 객체에 대한 중앙 집중식 엑세스 제어를 제공합니다.
개별객체에 대해서만 권한을 부여할 수 있는 ACL과 달리, 정책은 버킷 내 모든 객체 또는 객체의 하위 세트에 대해 권한을 지정할 수 있으며 버킷 내의 임의의 객체에 대한 권한을 설정할 수 있습니다.
버킷의 소유자만 정책을 버킷에 연결 가능합니다.
3. IAM 정책
IAM 을 사용하여 S3를 포함한 AWS리소스를 제어하는 권한을 중앙에서 관리할 수 있습니다.
IAM을 사용하여 리소스를 사용하도록 인증 및 권한 부여된 대상을 제어합니다.
S3 권한 설정 실습 & IAM Acess Analyzer
두가지 환경 준비
EC2 -> 어떠한 설정도 되어있지 않은 일반 VM
local -> aws cli에 IAM 키를 저장해 둔 환경
생성된 버킷 퍼블릭 엑세스 차단 기본 설정 확인
버켓 버플릭엑세스 차단 해제
테스트를 위한 파일 생성 및 복사
#업로드할 파일 생성
echo "ACL TEST" > test.txt
#로컬 환경에 IAM 설정이 완료되었다는 가정하에 진행
#s3에 파일 복사
aws s3 cp test.txt s3://<Bucket Name>
output: upload: ./test.txt to s3://<Bucket Name>/test.txt
#S3에 복사되었는지 확인
aws s3 ls s3://<Bucket Name> --recursive --human-readable --summarize
output: 2023-09-01 08:01:19 9 Bytes test.txt
#S3 API가 더 많은정보를 뿌려줌
aws s3api list-objects --bucket <Bucket Name> | jq
output:
{
"Contents": [
{
"Key": "test.txt",
"LastModified": "2023-08-31T23:01:19+00:00",
"ETag": "\"c04b812ace5e14###\"",
"Size": 9,
"StorageClass": "STANDARD",
"Owner": {
"ID": "68f71b1f###"
}
}
],
"RequestCharged": null
}
객체 URL 주소 확인
버킷 -> 객체 -> 객체 URL
EC2 내에서 버킷 검색
EC2에는 IAM 설정을 하지 않았으므로 보안 인증이 되지 않는다.
--no-sign-request 옵션을 통해 보안인증을 끄고 접근을 시도 하여도 List 권한이 없으므로 s3 ls 명령어의 결과값이 나오지 않는다.
ACL 활성화
ACL 복원확인 및 버킷 소유자 선호 체크후 변경사항 저장
ACL 편집
ACL중 나열 (List)권한을 모든사람(퍼플릭 엑세스)에게 권한 부여
EC2 내에서 버킷 재탐색
ACL을 통해 모든사람이 나열 권한을 받았으므로 s3 ls 명령어 결과가 출력
EC2 내에서 버킷 내의 객체 복사
ACL에서 읽기 권한이 없으므로 s3 cp 명령어 거부
권한별 테스트를 위해 IAM이 적용되어 있는 로컬에서 버킷으로 파일 업로드
권한 부여 Case별 테스트
test.txt 객체에는 인증된 사용자그룹에 대한 읽기권한 부여
copytest.txt 객체에는 모든사람에게 읽기권한 부여
IAM 설정이 되어있지 않은 EC2 환경에서 test.txt 객체는 복사가 되지 않음
EC2는 인증된 사용자가 아니기 떄문임
copy.txt 객체는 모든사람에게 읽기 권한을 부여했으므로 정상적으로 복사가 됨
bucketpolicy.txt의 경우 아직 아무 권한도 주지 않았으므로 복사를 거부
IAM 자격증명이 되어있는 로컬환경의 경우는 test.txt가 정상적으로 복사가능
버킷 정책 추가
정책추가 확인
버킷 정책 적용으로3 객체 모두 정상적으로 복사 가능.
IAM Access Analyzer 실습
# 액세스 분석기 생성
#aws accessanalyzer create-analyzer --analyzer-name firstanalyzer --type ACCOUNT --output text --query arn
ANA_ARN=$(aws accessanalyzer create-analyzer --analyzer-name firstanalyzer --type ACCOUNT --output text --query arn)
echo $ANA_ARN
# S3 버킷 스캔 수행
aws accessanalyzer start-resource-scan --analyzer-arn $ANA_ARN --resource-arn arn:aws:s3:::ahss-$NICKNAME
스캔결과 확인
AWS콘솔 IAM에서 엑세스 분석기 확인
버킷에 대한 퍼블릭 엑세스 차단 설정
버킷에서 퍼블릭 엑세스 다시 차단 된것을 확인
실습 종료후 객체 및 버킷 삭제
Pre-signed URL
미리 서명된 URL(pre-signed URL)을 통해 객체를 공유한다면 상대방은 앞서 설명한 IAM이나, 권한이 없어도 URL을 통해 객체로 접근하게 할 수 있습니다. Pre-signed URL은 URL을 생성하는 사용자의 권한에 따라 권한이 제한됩니다. 예를들어 URL을 생성한 사용자가 읽기권한민 있다면, Pre-singed URL을 통해 접근한 사용자는 읽기 권한만 가지게 됩니다.
테스트를 위한 객체 생성
# 미리 서명된 URL을 테스트 하기위해 버킷 생성
aws s3 mb s3://ahss-presign-test --region ap-northeast-2
#생성된 버킷 확인
aws s3 ls
output : 2023-09-02 08:42:01 ahss-presign-test
#퍼블릭 엑세스 차단 기본 설정 확인
aws s3api get-public-access-block --bucket ahss-presign-test | jq
output: 기본설정
{
"PublicAccessBlockConfiguration": {
"BlockPublicAcls": true,
"IgnorePublicAcls": true,
"BlockPublicPolicy": true,
"RestrictPublicBuckets": true
}
}
#객체 접근 테스트를 위해 그림파일 다운로드
curl https://www.nasa.gov/sites/default/files/thumbnails/image/main_image_star-forming_region_carina_nircam_final-5mb.jpg -o jameswebb.jpg
#다운 받은 이미지 업로드
aws s3 cp jameswebb.jpg s3://ahss-presign-test
# 파일 확인
aws s3 ls s3://ahss-presign-test --human-readable
output: 2023-09-02 08:47:59 5.1 MiB jameswebb.jpg
# s3 api를 통한 파일 확인
aws s3api list-objects --bucket ahss-presign-test | jq
{
"Contents": [
{
"Key": "jameswebb.jpg",
"LastModified": "2023-09-01T23:47:59+00:00",
"ETag": "\"3bae2c6845352####\"",
"Size": 5310371,
"StorageClass": "STANDARD",
"Owner": {
"ID": "68f71b1feeea3####"
}
}
],
"RequestCharged": null
}
자격증명이 없는 상태
권한이 없으므로 접근 불가
Pre-signed URL 생성
권한이 없는 환경에서 Pre-signed URL을 통한 객체 접근
URL을 통해 접근 가능
IAM 정책 내용이 충돌하는 경우 어떻게 동작할까?
Identity-based Policy는 요청하는 주체에게 연결됩니다. 이는 요청을 하기위한 정책이라고 보면됩니다.
Resource-based Policy는 요청을 받은 리소스에 연결이 됩니다. 이는 요청을 받기위한 정책이라고 보면 됩니다.
Resource-based Policy는 Principal 구문이 추가로 필수적으로 들어가게 됩니다.
정책을 적용하는 방법이 두가지로 나뉘어 있으므로 한쪽에서 요청을 허용을 하고 반대쪽에서 요청을 거부하는 정책을 추가하였다면 이는 정책이 충돌이 되는 경우가 될 수 있습니다. 이 같은 경우에는 Deny정책이 우선시 되어 요청이 차단이 됩니다.
이 외에 만약 한쪽에만 정책이 추가되어 있는경우 Identity-based Policy 에는 정책이 추가 되어있지만, Resource-based Policy에는 정책이 없는경우 동일 Account의 경우에는 한쪽에만 정책이 있어도 정책이 적용됩니다.
하지만 다른 Account의 Resource에 접근하게 된다면 한쪽에만 정책이 있다면 해당 정책은 적용되지 않습니다.
참조:
객체 소유권 제어 및 버킷에 대해 ACL 사용 중지 - Amazon Simple Storage Service
객체 소유권 제어 및 버킷에 대해 ACL 사용 중지 - Amazon Simple Storage Service
객체 ACL을 제거하지 마세요. 그렇지 않으면 객체 ACL에 권한을 의존하는 애플리케이션이 액세스 권한을 잃게 됩니다.
docs.aws.amazon.com
Amazon S3 조건 키 - Amazon Simple Storage Service
Amazon S3 조건 키 - Amazon Simple Storage Service
모든 조건이 전체 작업에 적용되는 것은 아닙니다. 예를 들어 s3:CreateBucket Amazon S3 권한을 부여하는 정책에는 s3:LocationConstraint 조건을 포함하는 것이 가능합니다. 그러나 s3:GetObject 권한을 부여하
docs.aws.amazon.com
미리 서명된 URL을 통해 객체 공유 - Amazon Simple Storage Service
미리 서명된 URL을 통해 객체 공유 - Amazon Simple Storage Service
미리 서명된 URL을 통해 객체 공유 미리 서명된 URL을 사용하여 다른 사람이 Amazon S3 버킷에 객체를 업로드하도록 허용할 수 있습니다. 미리 서명된 URL을 사용하면 상대방에게 AWS 보안 자격 증명
docs.aws.amazon.com
https://youtu.be/zIZ6_tYujts?si=tkRG6sIVZN4i04UW
'AHSS[1기]' 카테고리의 다른 글
AWS workshop IMDSv1의 SSRF - simulation 및 detection (0) | 2023.09.06 |
---|