S3 : 공용 폴더를 다시 비공개로 만드시겠습니까?
AWS S3 공용 폴더를 다시 비공개로 만들려면 어떻게해야합니까?
일부 스테이징 데이터를 테스트하고 있었기 때문에 버킷 내에서 전체 폴더를 공개했습니다. 액세스를 다시 제한하고 싶습니다. 그렇다면 폴더를 다시 비공개로 만들려면 어떻게해야합니까?
내가 이해 한 바에 따르면 관리 콘솔의 '공개'옵션은 디렉터리 '내'에있는 모든 개체에 대한 공개 권한을 재귀 적으로 추가합니다. 하나의 파일을 마우스 오른쪽 버튼으로 클릭 한 다음 '속성'을 클릭하면 확인할 수 있습니다. 그런 다음 '권한'을 클릭해야하며 다음 줄이 있어야합니다.
Grantee: Everyone [x] open/download [] view permissions [] edit permission.
이 디렉토리 내에 새 파일을 업로드하면이 공개 액세스 세트가 없으므로 비공개가됩니다.
몇 개의 키만있는 경우 수동으로 또는 스크립트를 사용하여 공용 읽기 권한을 하나씩 제거해야합니다.
S3 폴더에있는 모든 키의 '공개 읽기'속성을 재귀 적으로 제거하기 위해 'boto'모듈을 사용하여 Python으로 작은 스크립트를 작성했습니다.
#!/usr/bin/env python
#remove public read right for all keys within a directory
#usage: remove_public.py bucketName folderName
import sys
import boto
bucketname = sys.argv[1]
dirname = sys.argv[2]
s3 = boto.connect_s3()
bucket = s3.get_bucket(bucketname)
keys = bucket.list(dirname)
for k in keys:
new_grants = []
acl = k.get_acl()
for g in acl.acl.grants:
if g.uri != "http://acs.amazonaws.com/groups/global/AllUsers":
new_grants.append(g)
acl.acl.grants = new_grants
k.set_acl(acl)
나는 (오직) 2 개의 개체가있는 폴더에서 테스트했으며 작동했습니다. 키 가 많은 경우 완료하는 데 시간이 걸릴 수 있으며 병렬 접근이 필요할 수 있습니다.
허용되는 대답은 잘 작동합니다. 주어진 s3 경로에서도 ACL을 재귀 적으로 설정하는 것 같습니다. 그러나 이것은 s3cmd 라는 타사 도구로도 더 쉽게 수행 할 수 있습니다. 우리 회사에서는이 도구를 많이 사용하고 있으며 AWS 커뮤니티에서 상당히 인기있는 것 같습니다.
예를 들어 다음과 같은 s3 버킷 및 dir 구조가 있다고 가정합니다 s3://mybucket.com/topleveldir/scripts/bootstrap/tmp/
.. 이제 scripts
Amazon S3 콘솔을 사용하여 전체 "디렉토리"를 공용으로 표시했다고 가정합니다 .
이제 전체 scripts
"디렉토리 트리"를 재귀 적으로 (즉, 하위 디렉토리 및 해당 파일 포함) 다시 비공개로 설정합니다.
s3cmd setacl --acl-private --recursive s3://mybucket.com/topleveldir/scripts/
scripts
원하는 경우 "디렉토리 트리"를 재귀 적으로 다시 공개 하는 것도 쉽습니다 .
s3cmd setacl --acl-public --recursive s3://mybucket.com/topleveldir/scripts/
--recursive
위의 명령에서 간단히 생략하여 주어진 s3 "디렉토리"(즉, 비재 귀적)에서만 권한 / ACL을 설정하도록 선택할 수도 있습니다 .
들어 s3cmd
작업에 먼저 s3cmd를 통해 귀하의 AWS 액세스 및 보안 키를 제공해야 s3cmd --configure
합니다 ( http://s3tools.org/s3cmd을 자세한 내용).
AWS CLI의 경우 매우 간단합니다.
개체가 다음과 같은 경우 : s3://<bucket-name>/file.txt
단일 개체의 경우 :
aws s3api put-object-acl --acl private --bucket <bucket-name> --key file.txt
버킷의 모든 객체 (bash one-liner) :
aws s3 ls --recursive s3://<bucket-name> | cut -d' ' -f5- | awk '{print $NF}' | while read line; do
echo "$line"
aws s3api put-object-acl --acl private --bucket <bucket-name> --key "$line"
done
나열하는 AWS S3 버킷합니다 (AWS S3 UI)에서, 당신은 수정할 수 있습니다 개인 한 후 파일의 권한을 중 하나 개의 파일 공개 수동으로 또는 (나는 양동이 안에 폴더 말하는 겁니다 명확히하기 위해) 전체 폴더 콘텐츠를 공개함으로써. 공개 속성을 다시 비공개로 되돌리려면 파일을 클릭 한 다음 권한으로 이동하여 방사형 버튼을 클릭 합니다."모든 사람"제목 아래. * read object "속성의 선택을 취소 할 수있는 두 번째 부동 창이 나타납니다. 변경 사항을 저장하는 것을 잊지 마십시오. 링크에 액세스하려고하면 일반적인"Access Denied "메시지가 표시됩니다. 두 개의 스크린 샷을 첨부했습니다. . 첫 번째는 폴더 목록을 보여줍니다. 파일을 클릭하고 앞서 언급 한 절차에 따라 4 단계를 보여주는 두 번째 스크린 샷을 보여줄 것입니다. 여러 파일을 수정하려면 이전 게시물에서 제안한 스크립트를 사용해야합니다. -Kf
실제로이 가이드 http://aws.amazon.com/articles/5050/에 따라 Amazon의 UI를 사용했습니다.
현재 boto 문서 에 따르면 이렇게 할 수 있습니다.
#!/usr/bin/env python
#remove public read right for all keys within a directory
#usage: remove_public.py bucketName folderName
import sys
import boto
bucketname = sys.argv[1]
dirname = sys.argv[2]
s3 = boto.connect_s3()
bucket = s3.get_bucket(bucketname)
keys = bucket.list(dirname)
for k in keys:
# options are 'private', 'public-read'
# 'public-read-write', 'authenticated-read'
k.set_acl('private')
또한 s3 버킷의 권한 탭에서 버킷 정책을 제거하는 것을 고려할 수 있습니다.
While @kintuparantu's answer works great, it's worth mentioning that, due to the awk
part, the script only accounts for the last part of the ls
results. If the filename has spaces in it, awk
will get only the last segment of the filename split by spaces, not the entire filename.
Example: A file with a path like folder1/subfolder1/this is my file.txt
would result in an entry called just file.txt
.
In order to prevent that while still using his script, you'd have to replace $NF
in awk {print $NF}
by a sequence of variable placeholders that accounts for the number of segments that the 'split by space' operation would result in. Since filenames might have a quite large number of spaces in their names, I've gone with an exaggeration, but to be honest, I think a completely new approach would probably be better to deal with these cases. Here's the updated code:
#!/bin/sh
aws s3 ls --recursive s3://plusplus-staging | awk '{print $4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25}' | while read line; do
echo "$line"
aws s3api put-object-acl --acl private --bucket plusplus-staging --key "$line"
done
I should also mention that using cut
didn't have any results for me, so I removed it. Credits still go to @kintuparantu, since he built the script.
I did this today. My situation was I had certain top level directories whose files needed to be made private. I did have some folders that needed to be left public.
I decided to use the s3cmd
like many other people have already shown. But given the massive number of files, I wanted to run parallel s3cmd
jobs for each directory. And since it was going to take a day or so, I wanted to run them as background processes on an EC2 machine.
I set up an Ubuntu machine using the t2.xlarge
type. I chose the xlarge after s3cmd
failed with out of memory messages on a micro instance. xlarge is probably overkill but this server will only be up for a day.
After logging into the server, I installed and configured s3cmd
:
sudo apt-get install python-setuptools wget https://sourceforge.net/projects/s3tools/files/s3cmd/2.0.2/s3cmd-2.0.2.tar.gz/download mv download s3cmd.tar.gz tar xvfz s3cmd.tar.gz cd s3cmd-2.0.2/ python setup.py install sudo python setup.py install cd ~ s3cmd --configure
I originally tried using screen
but had some problems, mainly processes were dropping from screen -r
despite running the proper screen command like screen -S directory_1 -d -m s3cmd setacl --acl-private --recursive --verbose s3://my_bucket/directory_1
. So I did some searching and found the nohup
command. Here's what I ended up with:
nohup s3cmd setacl --acl-private --recursive --verbose s3://my_bucket/directory_1 > directory_1.out & nohup s3cmd setacl --acl-private --recursive --verbose s3://my_bucket/directory_2 > directory_2.out & nohup s3cmd setacl --acl-private --recursive --verbose s3://my_bucket/directory_3 > directory_3.out &
With a multi-cursor error this becomes pretty easy (I used aws s3 ls s3//my_bucket
to list the directories).
Doing that you can logout
as you want, and log back in and tail any of your logs. You can tail multiple files like: tail -f directory_1.out -f directory_2.out -f directory_3.out
So set up s3cmd
then use nohup
as I demonstrated and you're good to go. Have fun!
It looks like that this is now addressed by Amazon:
Selecting the following checkbox makes the bucket and its contents private again:
Block public and cross-account access if bucket has public policies
S3 브라우저가있는 경우 공개 또는 비공개로 설정할 수있는 옵션이 있습니다.
참조 URL : https://stackoverflow.com/questions/9238629/s3-make-a-public-folder-private-again
'IT Share you' 카테고리의 다른 글
양식에서 Enter 키를 누를 때 실행할 기본 동작 (0) | 2021.01.06 |
---|---|
내부 콘텐츠가 있어도 Div가 확장되지 않음 (0) | 2021.01.06 |
폴더의 모든 파일 되돌리기 (0) | 2021.01.06 |
MVC4에서 MVC5로 업그레이드 (0) | 2021.01.06 |
PHPExcel 병합 셀에서 텍스트를 중앙에 배치하는 방법 (0) | 2021.01.06 |