察象èªè : AWSãããããè§Šã人ã AWSå匷ã·ãªãŒãºã®4æ¬ç®ã§ããå šäœã®å°å³ã¯çŽ¢åŒèšäºã«ãããŸããååã®IAMå ¥éã§ã誰ãäœãããŠãããããæ±ºããã®ã§ãä»åã¯ãã®æš©éã§è§Šãæåã®çœ®ãå ŽãS3ã§ãã
S3ãšã¯äœã
Amazon Simple Storage Service(S3)ã¯ããã¡ã€ã«ãã€ã³ã¿ãŒãããçµç±ã§çœ®ãããåãåºãããã§ããã容éç¡å¶éã®ãªããžã§ã¯ãã¹ãã¬ãŒãžã§ããAWSã®äžã§ãæåæ(2006幎éå§)ã®ãµãŒãã¹ã§ãã»ãŒå šãŠã®AWSãµãŒãã¹ãS3ãèªã¿æžãã®çžæãšããŠæ³å®ããŠããŸãããAWSã«ãã¡ã€ã«ã眮ãããšèšã£ããããŸãS3ã®ããšã§ãã
ãµãŒããŒã®ç®¡çã¯èŠããŸããããã£ã¹ã¯å®¹éã®èšç»ãèŠããŸããã眮ããåã ã課éãããAWSåŽãè€æ°ã®èšåã«èªåã§è€è£œããŠä¿ç®¡ããŸããèšèšäžã®èä¹ æ§ã¯99.999999999%(ã€ã¬ãã³ãã€ã³)ã§ã1,000äžåã®ãã¡ã€ã«ã眮ããŠ1äžå¹Žã«1å倱ãèšç®ã§ãã
äœã«äœ¿ãã
- ãã¡ã€ã«ã®ä¿ç®¡: ç»åã»åç»ã»PDFã»CSVã»ãã°ã»ããã¯ã¢ãããªã©ã圢åŒãåããäœã§ã眮ã
- éçWebãµã€ãã®é ä¿¡: HTML/CSS/JSã眮ããŠãã®ãŸãŸå ¬éããããµãŒããŒäžèŠ
- ããŒã¿åæã®å ¥ãå£: ã¢ããªã®ãã°ãCSVãS3ã«æºããAthenaã»Glueã»RedshiftããçŽæ¥èªã(ããŒã¿ã¬ã€ã¯)
- ä»ãµãŒãã¹ãšã®åãæž¡ã: LambdaãåŠçããçµæã眮ããEC2ããããã¯ã¢ãããéããCloudFrontã§äžçé ä¿¡ãã
- é·æä¿å(ã¢ãŒã«ã€ã): æ³å®ä¿åã®åž³ç¥šãªã©ãããã£ãã«èªãŸãªãåæã®å®ãã¯ã©ã¹ã«ç§»ããŠçœ®ããŠãã
éèŠçšèª
| çšèª | æå³ |
|---|---|
| ãã±ãã | ãã¡ã€ã«ãå ¥ããå ¥ãç©ãååã¯äžçäžã§äžæããªãŒãžã§ã³ãéžãã§äœã |
| ãªããžã§ã¯ã | S3ã«çœ®ã1åã®ãã¡ã€ã«ãããŒã¿æ¬äœ+ã¡ã¿ããŒã¿ã1åæå€§5TB |
| ã㌠| ãªããžã§ã¯ãã®ååãreports/2026-08.csv ã®ããã« / ãå«ããŠããããS3ã«ãã©ã«ãã®å®äœã¯ç¡ã(ããŒã®æååãèŠãŠãã³ã³ãœãŒã«ããã©ã«ã颚ã«èŠããŠããã ã) |
| ã¹ãã¬ãŒãžã¯ã©ã¹ | ä¿åã®ççŽãããèªããªã StandardãããŸã«èªããªã Standard-IAãã»ãŒèªãŸãªããªã Glacier ç³»ãå®ãã¯ã©ã¹ã»ã©åãåºããé ãã»åãåºãæéãããã |
| ããŒãžã§ãã³ã° | åãããŒã«äžæžãããŠãå€ãçãæ®ãèšå®ã誀åé€ã»èª€äžæžãã®ä¿éº |
| ã©ã€ããµã€ã¯ã«ã«ãŒã« | ã30æ¥ãã£ããIAãžã365æ¥ãã£ããGlacierãžã7幎ã§åé€ãã®ãããªèªåç§»è¡ã»èªååé€ã®èšå® |
| 眲åä»ãURL | æéä»ãã®äžæçãªããŠã³ããŒã/ã¢ããããŒãURLããã±ãããå ¬éããã«ç¹å®ã®äººã«ã ãæž¡ãã |
| ãããã¯ãããªãã¯ã¢ã¯ã»ã¹ | ãã±ããã誀ã£ãŠå šäžçå ¬éããªãããã®å®å šè£ çœ®ãæ°èŠãã±ããã¯æ¢å®ã§ON |
ä»çµã¿ã®èŠç¹
S3ã¯ããŒãšå€ã®ã¹ãã¢ã§ããããã±ããå+ããŒããã¢ãã¬ã¹ã§ãããã«ãã€ãåã眮ããŸãããã¡ã€ã«ã·ã¹ãã ã§ã¯ãªãã®ã§ããã¡ã€ã«ã®äžéšã ãæžãæãã(远èšãã)ããšã¯ã§ããŸããã倿Žã¯å¿ ããªããžã§ã¯ãããšã®äžžããšäžæžãã§ãã
眮ããããŒã¿ã¯ãªãŒãžã§ã³å ã®è€æ°ã®å»ºç©(ã¢ãã€ã©ããªãã£ãŸãŒã³)ã«èªåè€è£œãããŸããèªã¿æžãã®æŽåæ§ã¯ãæžããçŽåŸã«èªãã°ææ°ãè¿ããåŒ·ãæŽåæ§ã§ã(2020幎12æä»¥é)ã
ã¢ã¯ã»ã¹å¶åŸ¡ã¯2系統ãããŸããIAMããªã·ãŒ(ååãã£ãã誰ããåŽ)ãšããã±ããããªã·ãŒ(ãã±ããåŽã«ããã®ãã±ããã¯èª°ã«äœãèš±ããããæžã)ã§ããåãã¢ã«ãŠã³ãå ãªããã©ã¡ããã«Allowãããã°éããŸãããã ãæç€ºçãªDenyãã©ã¡ããã«ããã°ãAllowããã£ãŠãæåŠã§ããå¥ã¢ã«ãŠã³ãããè§Šããšãã ããäž¡æ¹ã§AllowããèŠããŸã(çµç¹ã®SCPãPermissions Boundaryãªã©ãä»ã®å¶çŽããªã·ãŒãç¡ãåæã®è©±ã§ã)ã
ãã®ã³ãŒããåããåæ
ãã®èšäºã®ã³ãŒãã¯Python(boto3)ã§ããåããæ¹æ³ã¯2éããããŸãã
A. AWSã¢ã«ãŠã³ãç¡ãã§è©Šã(ãããã): motoãšããAWSã®ãã£ããããã䜿ããšã課éããµã€ã³ã¢ããããªãã§PCã®äžã ãã§åããŸãã
python3 -m venv venv
./venv/bin/pip install boto3 moto
from moto import mock_aws
@mock_aws # ãã®äžã®boto3åŒã³åºãã¯å
šéšããŒã«ã«ã®åœAWSã«è¡ã
def main() -> None:
... # 以äžã®èšäºã®ã³ãŒããããã«å
¥ãã
main()
B. æ¬ç©ã®AWSã§åãã: å
ã«IAMãŠãŒã¶ãŒãšã¢ã¯ã»ã¹ããŒãäœã£ãŠ aws configure ã§ç»é²ããŠããå¿
èŠããããŸããæé ã¯IAMã®èšäºã«ãããŸãã
äœ¿ãæ¹
ããããšã¯4ã€ã ãã§ããå庫ãäœã£ãŠãç®±ã眮ããŠãæãèªãã§æ¢ããŠãèŠããªããªã£ããæšãŠãã
ãã®4ã³ãããã®ãŸãŸã³ãŒãã®é çªã«ãªããŸããPython(boto3)ã§æžããšæ¬¡ã®ãšããã§ãã
import boto3
s3 = boto3.client("s3", region_name="ap-northeast-1")
bucket = "my-first-bucket-20260816" # äžçã§äžæãªååã«ãã
# â ãã±ãããäœã(æ±äº¬ãªãŒãžã§ã³)
s3.create_bucket(Bucket=bucket,
CreateBucketConfiguration={"LocationConstraint": "ap-northeast-1"})
# â¡ ãã¡ã€ã«(ãªããžã§ã¯ã)ã眮ã
s3.put_object(Bucket=bucket, Key="reports/2026-08.csv",
Body=b"date,sales\n2026-08-01,100\n")
# ⢠äžèЧãèŠã(Prefixã§ããã©ã«ããçžåœãçµã)
for o in s3.list_objects_v2(Bucket=bucket, Prefix="reports/")["Contents"]:
print("list:", o["Key"], o["Size"], "bytes")
# ⣠åãåºã
body = s3.get_object(Bucket=bucket, Key="reports/2026-08.csv")["Body"].read()
print("get:", body.decode())
# †æ¶ã
s3.delete_object(Bucket=bucket, Key="reports/2026-08.csv")
å®è¡çµæã¯ãããªããŸã(motoã§AWSã¢ã«ãŠã³ãç¡ãã«å®è¡)ã
list: reports/2026-08.csv 26 bytes
get: date,sales
2026-08-01,100
ããŒã«ã«ã®ãã¡ã€ã«ããã®ãŸãŸäžããããšã㯠s3.upload_file("local.csv", bucket, "reports/local.csv")ãèœãšããšã㯠s3.download_file(bucket, key, "saved.csv") ã䜿ããŸãã倧ããªãã¡ã€ã«ã®åå²ã¢ããããŒãããã®2ã€ãèªåã§ãã£ãŠãããŸãã
ãã±ãããå ¬éããã«ç¹å®ã®äººã«ãã¡ã€ã«ãæž¡ãã«ã¯çœ²åä»ãURLã䜿ããŸãã
# 10åéã ãæå¹ãªããŠã³ããŒãURL
url = s3.generate_presigned_url(
"get_object",
Params={"Bucket": bucket, "Key": "reports/2026-08.csv"},
ExpiresIn=600,
)
print(url)
åºå(é·ãã®ã§æ¹è¡ãå
¥ããŠããŸããX-Amz-Expires=600 ã10åã®æéã§ã)ã
https://my-first-bucket-20260816.s3.amazonaws.com/reports/2026-08.csv
?X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential=FOOBARKEY%2F20260816%2Fap-northeast-1%2Fs3%2Faws4_request
&X-Amz-Date=20260816T090716Z&X-Amz-Expires=600&X-Amz-SignedHeaders=host
&X-Amz-Signature=0b837d818a8a83a0...
æå
ã®moto 5.2.2 + boto3 1.43.72ã¯æ¢å®ã ãšå€ã圢åŒ(Signature=...&Expires=...)ã®URLãè¿ããŸãããæ¬ç©ã®S3ã¯æ°ãããã±ããã§ãã®å€ã圢åŒãåãä»ããªãã®ã§ãã¯ã©ã€ã¢ã³ãäœææã« config=Config(signature_version="s3v4") ãæž¡ããŠäžã®åœ¢åŒã«ããŠããŸãããã®URLãç¥ã£ãŠãã人ã ãããæéå
ã ãåãåºããŸãããã¡ãŒã«ã§ããŠã³ããŒããªã³ã¯ãéããããã©ãŠã¶ããçŽæ¥S3ã«ã¢ããããŒãããããã¯ããã§å®è£
ããŸãã
誀åé€ã®ä¿éºã«ã¯ããŒãžã§ãã³ã°ãæå¹ã«ããŸããèšå®ãããšããå€ãããŸãã
å·Šãäœãããªãå Žåãå³ãæå¹ã«ããå Žåã§ãã
s3.put_bucket_versioning(Bucket=bucket,
VersioningConfiguration={"Status": "Enabled"})
s3.put_object(Bucket=bucket, Key="v.txt", Body=b"v1")
s3.put_object(Bucket=bucket, Key="v.txt", Body=b"v2") # äžæžã
print(len(s3.list_object_versions(Bucket=bucket, Prefix="v.txt")["Versions"])) # â 2
äžæžãããŠãå€ãçãæ®ãã®ã§ãæ»ããŸããæå¹ã«ãããšå€ãçã®åã課éãããã®ã§ãã©ã€ããµã€ã¯ã«ã«ãŒã«ã§å€ãçãäžå®æéåŸã«æ¶ãèšå®ãšã»ããã§äœ¿ããŸãã
誰ãèªããããæ±ºãã2系統
ãå ¬éããªãããšèšãã®ã¯ç°¡åã§ãã§ã¯èª°ã«èªãŸããããã©ãæžãããS3ã®èªã¿æžãèš±å¯ã¯2ã€ã®åŽããæžããŸãã
| 系統 | ã©ãã«æžã | äž»èª | åããŠããå Žé¢ |
|---|---|---|---|
| 人ã»ããã°ã©ã åŽ | IAMããªã·ãŒ(ãŠãŒã¶ãŒã»ããŒã«ã«ä»ãã) | ããã®ããŒã«ã¯ããã®ãã±ãããèªãã§ããã | èªåã®ã¢ã«ãŠã³ãã®äžã§ã誰ãäœãããŠãããã管çãããšããIAMèšäºã®åœ¢ |
| ãã±ããåŽ | ãã±ããããªã·ãŒ(ãã±ããã«ä»ãã) | ããã®ãã±ããã¯ããã®ããŒã«ãããªãèªãŸããŠããã | å¥ã¢ã«ãŠã³ãã«èªãŸãããããã±ããåäœã§äžæ¬ã§çžããããšã |
ã©ã¡ããçæ¹ã§èš±å¯ãããŠããã°éããŸã(åãã¢ã«ãŠã³ãå ã®å Žå)ãæç€ºçãªDenyã¯ã©ã¡ãã«æžããŠãã£ãŠãæåªå ã§ããåå¿è ã¯äººåŽ(IAM)ã ãã§å§ããŠåé¡ãããŸããããã±ããããªã·ãŒã¯ãå¥ã¢ã«ãŠã³ãã®EC2ããèªãŸãããããåºãŠãããšãã«äœ¿ããŸãã
ãã±ããããªã·ãŒã¯ããæžããŸããIAMããªã·ãŒãšã»ãŒåãJSONã§ãéã㯠Principal(誰ã«)ãå
¥ãããšã
import json
bucket = "photo-bucket-demo"
policy = {
"Version": "2012-10-17",
"Statement": [{
"Sid": "AllowReaderRole",
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::123456789012:role/ec2-s3-reader"}, # 誰ã«
"Action": ["s3:GetObject"], # äœã
"Resource": f"arn:aws:s3:::{bucket}/*", # ã©ãã«
}],
}
s3.put_bucket_policy(Bucket=bucket, Policy=json.dumps(policy))
print(json.loads(s3.get_bucket_policy(Bucket=bucket)["Policy"])["Statement"][0]["Sid"])
# â AllowReaderRole
Resource ã ãã±ããå/* ãªã®ã¯ãäžã®ãªããžã§ã¯ãããæãããã§ããã±ããèªäœ(äžèЧ s3:ListBucket)ãèš±ããªã /* ç¡ãã®ARNã䞊ã¹ãŸãããããçæ¹ããæžããã«ãäžèЧã¯ã§ããã®ã«ååŸã§ããªããã§æ¢ãŸãã®ãå®çªã§ãã
ãã1ã€ãå
¬éãç©ççã«æ¢ããã¹ã€ããããããã¯ãããªãã¯ã¢ã¯ã»ã¹ã§ãã4ã€ã®èšå®ãå
šéšONã«ããŠãããšãPrincipal: "*"(誰ã§ã)ã®ããªã·ãŒãä»ããããšããæç¹ã§æ¬ç©ã®S3㯠AccessDenied ã§åŒŸããŸã(motoã¯åŒŸããªãã®ã§æ³šæ)ãæ°èŠãã±ããã¯æ¢å®ã§å
šéšONã§ãã
s3.put_public_access_block(Bucket=bucket, PublicAccessBlockConfiguration={
"BlockPublicAcls": True, "IgnorePublicAcls": True,
"BlockPublicPolicy": True, "RestrictPublicBuckets": True})
ãŸãšãããšãå®ãã¯ããããã¯ãããªãã¯ã¢ã¯ã»ã¹ON(æ¢å®)ããèš±å¯ã¯ãIAMããªã·ãŒã§äººåŽã«æžãããå¥ã¢ã«ãŠã³ããåºãŠãããããã±ããããªã·ãŒãããã®3ã€ã§å ¥éã®ç¯å²ã¯è¶³ããŸãã
䜿ãåããS3ããEBSããEFSã
AWSã®ãä¿åããå Žæãã¯3çš®é¡ãæåã¯ã©ããåãã«èŠããã®ã§ã倿ã®è»žã1è¡ãã€çœ®ããŸãã
| å Žé¢ | éžã¶ãã® | çç± |
|---|---|---|
| ãã¡ã€ã«ãã¢ããªããŠãŒã¶ãŒãHTTPã§åºãå ¥ããã | S3 | 容éç¡å¶éã»å®ãã»ã©ãããã§ãå±ãããµãŒããŒã«çŽã¥ããªã |
| EC2ã®OSãããŒã¿ããŒã¹ã®ãã£ã¹ã¯ãèŠã | EBS | 1å°ã®EC2ã«æ¥ç¶ãããããã¯ã¹ãã¬ãŒãžãOSããã¯æ®éã®ãã£ã¹ã¯ã«èŠãã |
| è€æ°ã®EC2ããåããã£ã¬ã¯ããªãåæã«èªã¿æžãããã | EFS | NFSã§å ±æã§ãããã¡ã€ã«ã·ã¹ãã ãS3ã¯ãåæã«ãã¡ã€ã«ã®äžéšãæžãããã§ããªã |
| ãã£ãã«èªãŸãªããæšãŠãããªã | S3 Glacierç³» | ä¿ç®¡æãæå®ãåãåºãã«åãæéããã |
è¿·ã£ããS3ããOSããæ®éã®ãã£ã¹ã¯ãšããŠèŠããŠã»ããããªãEBSããè€æ°å°ã§å ±æãããã¡ã€ã«ã·ã¹ãã ããªãEFSããšèŠããŸãã
æéã®èãæ¹
課éã¯äž»ã«3ã€ã§ãã
- ä¿ç®¡æ: 眮ããŠãã容éÃæéãæ±äº¬ãªãŒãžã§ã³ã®Standardã§çŽ0.025 USD/GB/æã100GBã§æ300åå°
- ãªã¯ãšã¹ãæ: PUT/GETçã®åæ°ãGETã¯1,000åãããçŽ0.0004 USDãšå®ãããæ°ååå©ããšå¹ããŠãã
- 転éæ: ã€ã³ã¿ãŒããããžã®éä¿¡ã«ããããåä¿¡(ã¢ããããŒã)ã¯ç¡æãåããªãŒãžã§ã³å ã®EC2ãLambdaããã®èªã¿åããç¡æ
äžåºŠé»åãå©ããŠã¿ããšè»¢éæã®éããåãããŸãã100GBã®åç»ã1,000人ã«é ããšéä¿¡100TBãæ±äº¬ã®æ®µéæé(æåã®10TBã0.114 USD/GBããã®å ã¯0.089â0.086)ã§èšç®ãããšçŽ9,000 USDãä¿ç®¡æã¯æ2.5 USDãªã®ã§ã誀差ã§ããé ä¿¡ãäž»çšéãªãCloudFront(CDN)ãåã«çœ®ããŸãã
ç¡æå©çšæ ããããŸã(æ ã®åœ¢ã¯ã¢ã«ãŠã³ãäœæææã§å€ããã®ã§ãå ¬åŒã®æéããŒãžã§ç¢ºèªããŠãã ãã)ãå人ã®åŠç¿ã§èª²éãåé¡ã«ãªãããšã¯ãŸããããŸããã
å®éã«å©ããšæ¢ãŸããšãã
äžã®ã³ãŒããæžããªãããmotoã§æå³çã«ãšã©ãŒãèµ·ãããŠæåãèŠãŸããããšã©ãŒã³ãŒãã¯æ¬ç©ã®S3ãšåãã§ãã
create_bucket(Bucket=b) # æ±äº¬ã§LocationConstraintç¡ã
â IllegalLocationConstraintException
get_object(Bucket=b, Key="nope.txt") # ç¡ãããŒ
â NoSuchKey - The specified key does not exist.
delete_bucket(Bucket=b) # äžèº«ãæ®ã£ããŸãŸ
â BucketNotEmpty - The bucket you tried to delete is not empty
delete_object(Bucket=b, Key="never.txt") # ç¡ãããŒãæ¶ã
â HTTP 204(ãšã©ãŒã«ãªããªã)
put_object(Bucket=b, Key="empty-folder/", Body=b"")
â äžèŠ§ã« ('empty-folder/', 0) ãåºã # ããã©ã«ããã®æ£äœã¯0ãã€ãã®ãªããžã§ã¯ã
1ã€ç®ã¯åèŠã§ãŸãåŒã£ããããŸããus-east-1以å€ã§ãã±ãããäœããšã㯠CreateBucketConfiguration ãå¿
é ã§ãçç¥ãããšãã®äŸå€ã§ãã4ã€ç®ã¯éã«æ³šæã§ãæ¶ãã€ããã®ããŒåãæã¡ééããŠãæåæ±ãã«ãªããŸããåé€ãã°ãèŠãŠå®å¿ããŠãããå®ã¯äœãæ¶ããŠããªãã£ãããèµ·ããŸãã
ããããæ³šæç¹
- ãã±ãããå ¬éããªãã ãããã¯ãããªãã¯ã¢ã¯ã»ã¹ã¯æ°ããäœããã±ããã§ã¯æ¢å®ã§ONã§ãããéçãµã€ãã§å ¬éãããã以å€ã®çç±ã§å€ããªãã§ãã ãããå人æ å ±å ¥ããã±ããã®å ¬éèšå®ãã¹ã¯ãæ¯å¹Žãã¥ãŒã¹ã«ãªã£ãŠããŸã
- ãã±ããåã¯åãæ¶ããªãããä»äººãšè¢«ãã äžåºŠäœããšåå倿Žã¯ã§ãããæ¶ããŠäœãçŽãã§ããäŒç€Ÿåããããžã§ã¯ãå+çšé+ãªãŒãžã§ã³ãªã©ã被ããªãèŠåãæ±ºããŠããäœããŸã
-
ãã©ã«ãã¯ç¡ãã
reports/ãäœã£ãã€ããã§ããäžã®ãªããžã§ã¯ããå šéšæ¶ãã°ããã©ã«ãããæ¶ããŸããS3ã®æŠå¿µãšããŠãã©ã«ãã¯ç¡ããã³ã³ãœãŒã«ã®ããã©ã«ãäœæãã¯0ãã€ãã®ãªããžã§ã¯ãã眮ããŠããã ãã§ã(äžã®å®æž¬ã®5ã€ç®) - æ¶ãããåºæ¬æ»ããªãã ããŒãžã§ãã³ã°ãå ¥ããŠããªããã±ããã® delete ã¯å³æã»äžå¯éã§ãã倧äºãªãã±ããã«ã¯ããŒãžã§ãã³ã°+ã©ã€ããµã€ã¯ã«ãæåãã
- ãªãŒãžã§ã³ãééããªãã ãã±ããã¯äœã£ããªãŒãžã§ã³ã«åºå®ã§ããæ±äº¬ã®EC2ããç±³åœã®ãã±ãããèªããšé ãäžã«è»¢éæãããããŸã
ãŸãšã
S3ã¯ã眮ãã»åãã»æ¶ããã®3åè©ã§è¶³ããŸãããã±ããã®äžã«ããŒã§ååãä»ããŠçœ®ããããã ãã§ããå®ãã®ã¯3ã€ããã©ã«ãã¯ç¡ããå ¬éããªããæ¶ãããæ»ããªãããã®3ã€ãæŒãããŠããã°ãåå¿è ãS3ã§äºæ ãå Žé¢ã¯ã»ãŒãããŸããã
æ¬¡ã«æãåãããªããããŒãžã§ãã³ã°ãONã«ã㊠putâäžæžãâlist_object_versions ã§2çèŠãããšãããŸã§ãã£ãŠã¿ãŠãã ããããããŸã§ã§ããã°S3ã®åºæ¬ã¯åæ¥ã§ãã
次åã¯EC2(ä»®æ³ãµãŒããŒ)ãäºå®ããŠããŸãã
åè
- Amazon S3 å ¬åŒããã¥ã¡ã³ã
- Amazon S3 ã®æé
- ã·ãªãŒãºçŽ¢åŒ: AWSãšã¯äœã
- åå: IAMå ¥é


