【S3】Curl로 파일을 업로드할 때 소유자나 버킷 정책 문제
처음에
어드벤트 캘린더 기사의 두 번째
최근 S3의 Object OwnerShip이 출시되었으므로 소유자 문제가 해결되었으므로,
사용하기 쉽고 이전에 업로드 한 객체의 대응에 대해 씁니다.
개요
외부에서 S3에 업로드한 데이터의 소유자는 업로드한 사람이었지만,
curl 등으로 업로드하면 게스트 사용자(?)가 되므로 기본적으로 객체를 공개하게 됩니다.
버킷 소유자는 객체 권한도 갖고 있지 않으므로 IAM 권한이 있어도 액세스 및 삭제 등을 할 수 없습니다.
이 기사는 S3의 Object OwnerShip에서 업로드한 항목의 소유자를 강제 변경하면,
Object OwnerShip을 설정하기 전에 업로드된 객체의 소유자를 변경하는 방법을 소개합니다.
S3의 Object OwnerShip 구성 절차
1. 버킷 만들기
콘솔에서 적절하게 생성
방법은 할애
2. 버킷 정책 설정
외부에서 S3에 업로드한 데이터의 소유자는 업로드한 사람이었지만,
curl 등으로 업로드하면 게스트 사용자(?)가 되므로 기본적으로 객체를 공개하게 됩니다.
버킷 소유자는 객체 권한도 갖고 있지 않으므로 IAM 권한이 있어도 액세스 및 삭제 등을 할 수 없습니다.
이 기사는 S3의 Object OwnerShip에서 업로드한 항목의 소유자를 강제 변경하면,
Object OwnerShip을 설정하기 전에 업로드된 객체의 소유자를 변경하는 방법을 소개합니다.
S3의 Object OwnerShip 구성 절차
1. 버킷 만들기
콘솔에서 적절하게 생성
방법은 할애
2. 버킷 정책 설정
bucket-owner-full-control
로 설정한 요청 만 허용합니다.Deny
정책 없이도 공개는 하지 않기 때문에 불필요합니다{
"Version": "2012-10-17",
"Id": "test_policy",
"Statement": [
{
"Sid": "get",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::{バケット名}/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"1.1.1.1/32"
]
}
}
},
{
"Sid": "put",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::{バケット名}/*",
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control"
},
"IpAddress": {
"aws:SourceIp": [
"1.1.1.1/32"
]
}
}
}
]
}
3. S3 Object Ownership 설정
Curl에서 객체를 업로드하는 방법
$ curl -XPUT -H "x-amz-acl:bucket-owner-full-control" -T {ファイル名} https://{バケット名}.s3-ap-northeast-1.amazonaws.com/{ファイル名}
검증
# curl -XPUT -T test.txt https://${バケット名}.s3-ap-northeast-1.amazonaws.com/test.txt
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>829150681872CD3C</RequestId><HostId>W1sEi85Oa03yMlm8SSwFKvSv2RY7B1FhnhEQhspvsBX0VCPND0esPhg7hunsUpJoWiIHuik5r+k=</HostId></Error>
'bucket-owner-full-control' のヘッダーがないので、失敗
# curl -XPUT -H "x-amz-acl:bucket-owner-full-control" -T test.txt https://${バケット名}.s3-ap-northeast-1.amazonaws.com/test.txt
エラーが出ないので、成功
소유자
bucket-owner-full-control
가 붙지 않은 채 업로드 한 것bucket-owner-full-control
가 올린 업로드개체의 소유자를 변경하는 방법
1. 버킷의 모든 객체 가져오기
--prefix
를 사용하여 특정 접두사를 지정할 수 있습니다 NextToken
를 취득해, --starting-token
를 붙여 계속을 취득합시다 # aws s3api list-objects-v2 --bucket ${バケット名} --query Contents[*].[Key] --output text >> /tmp/key.txt
2. 객체의 ACL 변경
1
에서 취한 목록을 기반으로 객체의 ACL을 변경합니다 # cat key.txt | xargs -I KEY aws s3api put-object-acl --bucket ${バケット名} --key KEY --acl bucket-owner-full-control --no-sign-request
3. 객체의 소유자 변경
1
에서 가져온 목록을 기반으로 개체의 소유자를 변경합니다. # cat key.txt |xargs -I KEY aws s3 cp s3://${バケット名}/KEY s3://${バケット名}/KEY --metadata-directive REPLACE
마지막으로
S3의 Object OwnerShip이 출시한 것에 오랜 세월에 어려움을 겪었습니다.
감사합니다!
이 기사도 모두의 고민을 해결할 수 있다면 기쁩니다.
Reference
이 문제에 관하여(【S3】Curl로 파일을 업로드할 때 소유자나 버킷 정책 문제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/caesar0060jp/items/1f1611c3b6d1e935aa14
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(【S3】Curl로 파일을 업로드할 때 소유자나 버킷 정책 문제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/caesar0060jp/items/1f1611c3b6d1e935aa14텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)