이 게임을 플레이하여 S3 기술을 레벨업하세요!
S3 Game은 S3의 다양한 기능을 초보자부터 상당히 고급까지 안내하는 멋진 게임입니다.
필요한 것:
플레이하려면 여기를 클릭하세요!
각 레벨은 "보물"개체를 찾고 "보물"의 비밀 코드를 사용하여 다음 레벨로 이동하는 것으로 구성됩니다.
이 게임을 하세요. 각 수준에는 S3 API 설명서에 대한 링크가 포함된 여러 힌트가 포함되어 있습니다.
아래는 어떤 수준에서든 막힌 경우 참조할 수 있는 안내입니다. 여기를 보기 전에 잠시 시도해보세요 :)
걸어가다(스포일러)
레벨 1
해결책:
# List the objects in bucket
aws s3 ls s3://s3game-level1
방문treasure object
레벨 2
해결책:
브라우저나 aws s3를 사용하여 Treasure2 객체를 가져오기만 하면 됩니다. https://s3game-level2.s3.us-east-2.amazonaws.com/treasure2
액세스 및 비밀 키를 어딘가에 저장하십시오.
레벨 3
이전 수준에서 얻은 액세스 및 비밀 키를 사용하여 AWS 프로필 "tmp"를 생성합니다. 이제부터 거의 모든 레벨에서 이것을 사용해야 합니다.
aws configure --profile tmp
> AWS Access Key ID
> AWS Secret Access Key
> Default region name - us-east-2
해결책:
aws s3 ls s3://s3game-level3 --profile tmp
aws s3 cp s3://s3game-level3/treasure3_has_no_secret_code . --profile tmp
cat treasure3_has_no_secret_code
# The object data itself does not have the secret code. It is present in the metadata
aws s3api head-object --bucket s3game-level3 --key treasure3_has_no_secret_code --profile tmp
레벨 4
해결책:
# List the bucket ..
# get the file
aws s3 cp s3://s3game-level4-k73045aztqln/treasure4_also_has_no_secret_code . --profile tmp
# looks like the data is empty
aws s3api head-object --bucket s3game-level4-k73045aztqln --profile tmp --key treasure4_also_has_no_secret_code
# ... so is the metadata. Let's try object tags as mentioned in hint
aws s3api get-object-tagging --bucket s3game-level4-k73045aztqln --profile tmp --key treasure4_also_has_no_secret_code
테이크아웃:
Object in S3, including its metadata, is immutable. When you edit object's metadata, you are actually overwriting the object with a copy of itself, with its metadata modified.
In contrast, tags are subresources. They are managed separately and can be modified without modifying the object itself.
레벨 5
해결책
# We are listing all versions of objects as the hint says that the object is not present in its current version
aws s3api list-object-versions --bucket s3game-level5-8v95e5rv7z4i --profile tmp
# Get the specific version of treasure5_is_deleted using version-id from previous call
aws s3api get-object --bucket 's3game-level5-8v95e5rv7z4i' --key treasure5_is_deleted --version-id '344PQOyFqocF0TI66MbLynNNdQqHfBz3' --profile tmp treasure5_is_deleted
테이크아웃
S3 versioning keeps multiple variants of an object in the same bucket.
If you enable versioning for a bucket, S3 automatically generates a unique version ID for the object being stored.
In one bucket you can have two objects with the same key, but different version IDs.
Check if versioning is enabled using:aws s3api get-bucket-versioning --bucket my-bucket
레벨 6
해결책
# We need to get a gzipped object using S3 select
aws s3api list-objects --bucket s3game-level6-vjv45x1gux81 --profile tmp
# Now, do the select on s3select.csv.gz
aws s3api select-object-content --bucket s3game-level6-vjv45x1gux81 --key s3select.csv.gz --expression "SELECT s.Answer FROM s3object s WHERE Category = 'TREASURE'" --expression-type sql --input-serialization '{"CSV": {"FileHeaderInfo": "USE", "FieldDelimiter": ";"}, "CompressionType": "GZIP"}' --output-serialization '{"CSV": {}}' --profile tmp treasure6
레벨 7
해결책
# Get 'somethingstrange' from the bucket
aws s3api get-object --bucket s3game-level7-zhovpo4j8588 --key somethingstrange --profile tmp t7
cat t7
# Visit the pre-signed URL in the file to get URL for next level
테이크아웃
미리 서명된 URL은 S3의 강력한 기능입니다. docs에서 :
A presigned URL is generated by an AWS user who has access to the object. The generated URL is then given to the unauthorized user. The presigned URL can be entered in a browser or used by a program or HTML webpage. The credentials used by the presigned URL are those of the AWS user who generated the URL.
A presigned URL remains valid for a limited period of time which is specified when the URL is generated.
레벨 8
해결책
# List objects
aws s3api list-objects --bucket s3game-level8-v6g8tp7ra2ld --profile tmp
# Visit the treasure file using the cloudfront URL
curl 'https://d2suiw06vujwz3.cloudfront.net/treasure8_CDN'
테이크아웃
레벨 9
버킷에는 "arn:aws:s3:::s3game-level9-781xtls2quvy/treasure9_referer"에 대한 모든 요청에 참조자 문자열 "http://s3game.treasure "이 있는지 확인하는 정책이 있습니다.
해결책
우리가 해야 할 일은 정책에 주어진 --refer로 말리는 것뿐입니다.
컬 'https://s3game-level9-781xtls2quvy.s3.us-east-2.amazonaws.com/treasure9_referer ' --참조 'http://s3game.treasure '
레벨 10
여기에서 Infrequent Access 저장소에 있는 개체를 가져와야 합니다.
해결책
# We can use the powerful query param of aws cli to just fetch those objects which are in infrequent access storgae
aws s3api list-objects --bucket s3game-level10-gac6tf83erp6 --query 'Contents[?StorageClass == `STANDARD_IA`]' --profile tmp
테이크아웃
Amazon S3 offers a range of storage classes designed for different use cases:
- Standard for general-purpose storage of frequently accessed data
- Intelligent-Tiering for data with unknown or changing access patterns
- Standard-Infrequent Access (Standard-IA) and One Zone-Infrequent Access (One Zone-IA) for long-lived, but less frequently accessed data
- Glacier and Glacier Deep Archive for long-term archive
레벨 11
여기에서 클라이언트 측 암호화를 사용하여 암호화되어 S3에 업로드된 객체를 가져와야 합니다. 이것은 암호화 키가 없으면 객체를 가져올 수 없음을 의미합니다.
해결책
# The encryption key is given in the hint
aws s3 cp --sse-c 'AES256' --sse-c-key 'UkXp2s5v8y/B?E(H+MbPeShVmYq3t6w9' 's3://s3game-level11-djq30a807iyq/treasure11_encryption' --profile tmp .
# Alternate way using aws s3api. Here we also need to give md5 of encryption key as additional integrity check
aws s3api get-object --bucket s3game-level11-djq30a807iyq --key treasure11_encryption --sse-customer-key 'UkXp2s5v8y/B?E(H+MbPeShVmYq3t6w9' --sse-customer-algorithm AES256 --profile tmp treasure11_encryption
테이크아웃
S3는 server side 및 client side encryption을 모두 지원합니다.
승리! - 레벨 12
축하해요! 게임을 클리어했습니다!
Reference
이 문제에 관하여(이 게임을 플레이하여 S3 기술을 레벨업하세요!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rrampage/level-up-your-s3-skills-by-playing-this-game-23a8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)