æ¬è¨äºã¯
ãAdvent Calendar 2023ã
12æ¥ç®ã®è¨äºã§ãã
ð
11æ¥ç®
â¶â¶ æ¬è¨äº â¶â¶
13æ¥ç®
ð
ä»åã®ãã¼ãã«ã¤ãã¦
AWSã使ç¨ããã·ã¹ãã ã§ãS3ã使ããªããã¨ãªãã¦ãªããã¨è¨ãåããããªãããS3ã¯ä½¿ç¨ããã¦ãã¾ããããä½ã³ã¹ãã§å¤§å®¹éã®ãªãã¸ã§ã¯ããä¿åã§ããã¨ããã¡ãªãããã¾ãæãæµ®ãã¶ã¨æãã¾ããããã以å¤ã«ãã¢ã¯ã»ã¹å¶éãç´°ããã§ããã¨ãã£ãã»ãã¥ãªãã£é¢ã®å¼·ã¿ã大ããªé
åã§ãã
ãã®ã»ãã¥ãªãã£è¨å®ã®1ã¤ã¨ãã¦ãã±ããããªã·ã¼ãããã¾ãããæ£ããçè§£ã§ãã¦ãã¾ãã§ããããï¼ä»åã¯ããééããã·ããªãªãã¿ã¼ã³5ã¤ãæ³å®ããããã«å³ãããã±ããããªã·ã¼ã®ä¾ãç´¹ä»ãã¦ããããã¨æãã¾ãã
ãªãããã±ããããªã·ã¼ã¯åãã·ããªãªã§ãã£ã¦ãè¤æ°è¨å®ãã¿ã¼ã³ãåå¨ããä»åç´¹ä»ããã¦ããã ããã®ãæ£è§£ã¨ãããã®ã§ã¯ããã¾ããã®ã§ãããããããäºæ¿ãã ããã
ãã±ããããªã·ã¼ã®åºæ¬çãªèãæ¹
æ¬é¡ã«å ¥ãåã«ã1ã¤èãã¦ã¿ã¾ããããä¸è¨ã®ã·ããªãªã®å ´åãã©ã®ãã±ããããªã·ã¼ãæãè¦ä»¶ã«å³ãã¦ããã¨ãããã§ããããï¼
ã·ããªãªï¼
NetcomBlogRole(IAMRole)ã®ã¿ããªãã¸ã§ã¯ãã«ã¢ã¯ã»ã¹ã§ããã°åé¡ãªããã±ããããªã·ã¼ãè¨å®ãããï¼â»NetcomBlogRoleã¯S3ã¨åä¸ã¢ã«ã¦ã³ãã«ãããã®ã¨ããï¼
NetcomBlogRoleã«ã¯å¯¾è±¡ã®S3ãã±ããã«å¯¾ããDeleteObject以å¤ã®æä½ã«é¢ããIAM Policyãã¢ã¿ãããã¦ãã
DeleteObjectã®ã¢ã¯ã·ã§ã³ã¯NetcomBlogRoleãå«ããã¹ã¦ã®ãªã½ã¼ã¹ã§ä¸è¦
æ¡â
{ "Version": "2012-10-17", "Id": "NetcomBLOG-Policy1", "Statement": [ { "Sid": "BaseDeny", "Effect": "Deny", "Principal": "*", "Action": "*", "Resource": "arn:aws:s3:::BucketName/*", "Condition": { "StringNotLike": { "aws:userid": [ "AROAXXXX(NetcomBlogRoleã®RoleID):*" ] } } } ] }
æ¡â¡
{ "Version": "2012-10-17", "Id": "NetcomBLOG-Policy2", "Statement": [ { "Sid": "BaseAllow", "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": "arn:aws:s3:::BucketName/*", "Condition": { "StringLike": { "aws:userid": [ "AROAXXXX(NetcomBlogRoleã®RoleID):*" ] } } } ] }
æ¡â¢
{ "Version": "2012-10-17", "Id": "NetcomBLOG-Policy3", "Statement": [ { "Sid": "BaseDeny", "Effect": "Deny", "Principal": "*", "Action": "*", "Resource": "arn:aws:s3:::BucketName/*", "Condition": { "StringNotLike": { "aws:userid": [ "AROAXXXX(NetcomBlogRoleã®RoleID):*" ] } } }, { "Sid": "BaseAllow", "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": "arn:aws:s3:::BucketName/*", "Condition": { "StringLike": { "aws:userid": [ "AROAXXXX(NetcomBlogRoleã®RoleID):*" ] } } } ] }
æ¡â£
ãã±ããããªã·ã¼ã®è¨è¿°ãªã
çãã¨ãã¦ã¯â ãæãçæ³å½¢ãã¨æãã¾ããããããã®ãã±ããããªã·ã¼ã§NetcomBlogRoleãã§ããæä½ã表ã«ãã¦ã¿ã¾ãã
ãã±ããããªã·ã¼ | è¨å®æ¦è¦ |
---|---|
â | NetcomBlogRoleã®ã¿ãDeleteObject以å¤ã®æä½ãå¯è½ |
â¡ | NetcomBlogRoleã¯å ¨æä½ãå¯è½ãã¾ãIAM Policyã§æ¨©éãä¸ãã¦ããã¦ããåä¸ã¢ã«ã¦ã³ãã®ãªã½ã¼ã¹ã¯ä»ä¸ãããæ¨©éã®æä½ãå¯è½ |
⢠| NetcomBlogRoleã®ã¿ãå ¨æä½ãå¯è½ |
⣠| IAM Policyã§æ¨©éãä¸ãã¦ããã¦ããåä¸ã¢ã«ã¦ã³ãã®ãªã½ã¼ã¹ã¯ä»ä¸ãããæ¨©éã®æä½ãå¯è½ |
ãã¡ãã®è¡¨ãã¿ã¦ãæ³å®ããã£ã¦ããã°æ£ãããã±ããããªã·ã¼ã®æåãçè§£ã§ãã¦ãããã¨æãã¾ããã¾ãããã±ããããªã·ã¼ã¯åä¸ã¢ã«ã¦ã³ãããã®ã¢ã¯ã»ã¹ãã©ããã§æåãå¤ããã¾ãã
æä½å ã¨S3ãåä¸ã¢ã«ã¦ã³ãã«ãã | IAMããªã·ã¼ | ãã±ããããªã·ã¼ | S3ã®å¯è½ãªæä½ |
---|---|---|---|
ã | ã | ã | ã©ã¡ããçæ¹ã§ã許å¯ããã¦ããæä½ãå¯è½ |
ã | ã | à | IAMããªã·ã¼ã§è¨±å¯ããã¦ããæä½ãå¯è½ |
ã | à | ã | ãã±ããããªã·ã¼ã§è¨±å¯ããã¦ããæä½ãå¯è½ |
à | ã | ã | IAMããªã·ã¼ã¨ãã±ããããªã·ã¼ä¸¡æ¹ã§è¨±å¯ããã¦ããæä½ãå¯è½ |
à | ã | à | æä½ä¸å¯ |
à | à | ã | æä½ä¸å¯ |
â»æç¤ºçãªDenyããªã·ã¼ãå«ã¾ãã¦ããå ´åã¯Denyãåªå ããã¾ãã
åä¸ã¢ã«ã¦ã³ããç°ãªãã¢ã«ã¦ã³ãããã®ã¢ã¯ã»ã¹ã§æåãå¤ãã
åä¸ã¢ã«ã¦ã³ãããã®ã¢ã¯ã»ã¹ã®å ´åãä¸è¿°ãã表ã®ã¨ãããã±ããããªã·ã¼ or IAMããªã·ã¼ã©ã¡ããã§è¨±å¯ããã¦ããã°ãã®æä½ãå¯è½ã«ãªãã¾ãã 䏿¹ã§ãã¯ãã¹ã¢ã«ã¦ã³ãã§ã®ã¢ã¯ã»ã¹ã®å ´åã¯åæ¹ã§ã®è¨±å¯ãå¿ è¦ã«ãªãããè¨è¨ã«æ³¨æãå¿ è¦ã§ãã
æ¬é¡
ãã£ããæ¬é¡ã®ã·ããªãªã«ã¤ãã¦èãã¦ããã¾ããã¾ãä»åã¯Denyã¹ãã¼ãã¡ã³ããæ´»ç¨ããã¢ã¯ã»ã¹å¶éãã¡ã¤ã³ã«ç´¹ä»ãã¾ãã
ã¾ããä»åç´¹ä»ããä¾ã¯åºæ¬çã«IAMããªã·ã¼ã§ã®æ¨©éä»ä¸ãåæã¨ãã¦ç´¹ä»ãã¾ãã
ã·ããªãªâ ï¼ç¹å®ã®IAMãã¼ã«ä¸¦ã³ã«WEBãµã¼ãããã®ã¢ã¯ã»ã¹ã®ã¿è¨±å¯ããï¼VPCEndPointçµç±ï¼
æ§æã¤ã¡ã¼ã¸
WEBãµã¼ã並ã³ã«IAMãã¼ã«
å¿ è¦ãªæ¨©éãä»ä¸ããIAM Policyãã¢ã¿ãããã¦ãã
ãã±ããããªã·ã¼
{ "Version": "2012-10-17", "Id": "NetcomBlog-Policy", "Statement": [ { "Sid": "BaseDeny", "Effect": "Deny", "Principal": "*", "Action": "*", "Resource": "arn:aws:s3:::BucketName/*", "Condition": { "StringNotLike": { "aws:userid": [ "AROAXXXX(éç¨ãã¼ã«1ã®RoleID):*", "AROAXXXX(éç¨ãã¼ã«2ã®RoleID):*" ] }, "StringNotEquals": { "aws:SourceVpce": "vpce-xxxxxxxxxxxx" } } } ] }
ç¹å®ã®IAMãã¼ã«ä¸¦ã³ã«VPCEndpointããã®ã¢ã¯ã»ã¹ã¯Denyããªãããã«ããAllow権éã¯IAMãã¼ã«ã«ã¢ã¿ããããããªã·ã¼ã§ä»ä¸ãã
ã·ããªãªâ¡ï¼ã¢ã¯ã»ã¹å ãç¹å®ã®IPã®å ´åã®ã¿ãS3ãªãã¸ã§ã¯ããé ä¿¡ãã
æ§æã¤ã¡ã¼ã¸
IAMãã¼ã«
éç¨ã§ä½¿ç¨ããIAMãã¼ã«ã«ã¯å¿ è¦ãªæ¨©éãä¸ãã¦ãã
ãã±ããããªã·ã¼
{ "Version": "2012-10-17", "Id": "NetcomBlog-Policy", "Statement": [ { "Sid": "BaseDeny", "Effect": "Deny", "Principal": "*", "Action": "*", "Resource": "arn:aws:s3:::BucketName/*", "Condition": { "StringNotLike": { "aws:userid": [ "AROAXXXX(éç¨ãã¼ã«1ã®RoleID):*", "AROAXXXX(éç¨ãã¼ã«2ã®RoleID):*" ] }, "NotIpAddress": { "aws:SourceIp": [ "10.10.10.10/32", "11.11.11.11/32" ] } } }, { "Sid": "BaseAllow-IPRestrict", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::BucketName/*", "Condition": { "IpAddress": { "aws:SourceIp": [ "10.10.10.10/32", "11.11.11.11/32" ] } } } ] }
éç¨ã§ä½¿ç¨ããIAMãã¼ã«ããã®ã¢ã¯ã»ã¹ä¸¦ã³ã«ç¹å®IPããã®ã¢ã¯ã»ã¹ã¯Deny対象ããå¤ãã¦ãããç¹å®IPã«å¯¾ããGetObjectã許å¯ãã¦ããã°ãªãã¸ã§ã¯ãã®èªã¿åãã¯å¯è½ã§ãããã ããããã£ãã·ããªãªã§ã¯CloudFront + S3ã®æ§æãã¨ãæ¹ãå¤ããã¨æãã¾ãã
ã·ããªãªâ¢ï¼ç½²åä»ãURLã使ã£ã¦ãã¦ã¼ã¶ã¼ã«ãªãã¸ã§ã¯ããé ä¿¡ãã
æ§æã¤ã¡ã¼ã¸
IAMãã¼ã«
éç¨ã§ä½¿ç¨ããIAMãã¼ã«ã«ã¯å¿
è¦ãªæ¨©éãä¸ãã¦ãã
ã¾ããã³ã³ããã®ãã¼ã«ã«GetObjectçå¿
è¦ã«ãªã権éãä»ä¸
ãã±ããããªã·ã¼
{ "Version": "2012-10-17", "Id": "NetcomBlog-Policy", "Statement": [ { "Sid": "BaseDeny", "Effect": "Deny", "Principal": "*", "Action": "*", "Resource": "arn:aws:s3:::Bucketname/*", "Condition": { "StringNotLike": { "aws:userid": [ "AROAXXXX(éç¨ãã¼ã«1ã®RoleID):*", "AROAXXXX(ã³ã³ããç¨ãã¼ã«ã®RoleID):*" ] }, "StringNotEquals": { "aws:SourceVpce": "vpce-xxxxxxxxxxxxxx" } } } ] }
VPCEndpointããã®çµè·¯ãDenyããªãããã«ãã¦ãããããæ¬æ¥ã³ã³ããç¨ãã¼ã«ãDeny対象ããå¤ãå¿ è¦ããªãããã«è¦ãã¾ãããä¸è¨ã®éãã¢ã¯ã»ã¹çµè·¯ãå¤ããã¾ãã
ã»ç½²åä»ãURLã®çºè¡âVPCEndpointçµç±ã§ã®ã¢ã¯ã»ã¹
ã»ç½²åä»ãURLã¸ã®ã¢ã¯ã»ã¹âã³ã³ããç¨ãã¼ã«ã®æ¨©éã§ã®ã¢ã¯ã»ã¹
ãã®ãããã³ã³ããç¨ãã¼ã«ããã®ã¢ã¯ã»ã¹ãDeny対象ããå¤ãã¦ãããªãã¨ãç½²åä»ãURLã®çºè¡ã¯ã§ãããã¢ã¯ã»ã¹ãã§ããªãURLã¨ãªã£ã¦ãã¾ãã¾ã
ã·ããªãªâ£ï¼ãã±ããã¬ãã«ã§ã®Denyãæ´»ç¨ãã
ãã±ããããªã·ã¼
{ "Version": "2012-10-17", "Id": "NetcomBlog-Policy", "Statement": [ { "Sid": "BaseDeny", "Effect": "Deny", "Principal": "*", "Action": "*", "Resource": [ "arn:aws:s3:::BucketName/*", "arn:aws:s3:::BucketName" ], "Condition": { "StringNotLike": { "aws:userid": [ "AROAXXXX(éç¨ãã¼ã«ã®RoleID):*", "AROAXXXX(GuardDutyç¨ãã¼ã«ã®RoleID):*" ] }, "StringNotEquals": { "aws:SourceVpce": "vpce-xxxxxxxxxxxxxx" } } } ] }
S3ã®ã»ãã¥ãªãã£ãå¼·åããç®çã§ããã±ããã¬ãã«ã§ã®Denyãåãå
¥ãããã¨ããããã¨æãã¾ãã
注æç¹ã¨ãã¦ãGuardDutyãæå¹åãã¦ãããããªå ´åãGuardDutyãS3ã¸ã®ã¢ã¯ã»ã¹ã«å¤±æããã¨è¿ã£ã¦ã»ãã¥ãªãã£éåã«ãªã£ã¦ãã¾ããã¨ãããã¾ãããã®ãããGuardDutyã§ä½¿ç¨ãããIAMãã¼ã«ã¯Deny対象ããå¤ãã¦ãããªã©å·¥å¤«ãå¿
è¦ã§ãã
ã·ããªãªâ¤ï¼ã¯ãã¹ã¢ã«ã¦ã³ãã§S3ãªãã¸ã§ã¯ãã«ã¢ã¯ã»ã¹ãã(ã¤ã³ã¿ã¼ãããçµç±ã§ã®ã¢ã¯ã»ã¹)
æ§æã¤ã¡ã¼ã¸
IAMãã¼ã«
éç¨ã§ä½¿ç¨ããIAMãã¼ã«ã«ã¯å¿
è¦ãªæ¨©éãä¸ãã¦ãã
ã¾ããã¯ãã¹ã¢ã«ã¦ã³ãå
ã®ãã¼ã«ã«ãå¿
è¦ã«ãªã権éãä»ä¸
ãã±ããããªã·ã¼
{ "Version": "2012-10-17", "Id": "NetcomBlog-Policy", "Statement": [ { "Sid": "BaseDeny", "Effect": "Deny", "Principal": "*", "Action": "*", "Resource": "arn:aws:s3:::BucketName/*", "Condition": { "StringNotLike": { "aws:userid": [ "AROA(éç¨ãã¼ã«ã®RoleID):*", "AROA(ã¯ãã¹ã¢ã«ã¦ã³ãå ã®RoleID):*" ] } } }, { "Sid": "CrossAccountAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountID:role/ãã¼ã«å" }, "Action": [ "s3:ListBucket", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::BucketName/*", "arn:aws:s3:::BucketName" ] } ] }
ã¯ãã¹ã¢ã«ã¦ã³ãã§ã®ã¢ã¯ã»ã¹ã®å ´åã¯ãã±ããããªã·ã¼ã»IAMããªã·ã¼åæ¹ã§ã®è¨±å¯ãå¿ è¦ã«ãªãã®ã注æç¹ã§ãã
ã¾ã¨ã
ãã±ããããªã·ã¼ã¯ã»ãã¥ãªãã£è¦³ç¹ã§éè¦ãªè¨å®ã«ãªãã¾ãããæ£ããè¨å®ãã¦ããªãã¨æ³å®ãã¦ããªãã¢ã¯ã»ã¹ãå¯è½ã«ãªã£ã¦ãã¾ããªã©æ³¨æãå¿ è¦ã§ããç¹ã«å人æ å ±ãæ±ããããªS3ã«ã¤ãã¦ã¯ãKMSã§æå·åãããªã©ããå¼·åºãªæ§æãã¨ã£ã¦ãããæ¹ããããããªã±ã¼ã¹ãããã¾ããç¨éã«å¿ãã¦ãé©åãªè¨å®ãã§ãã¦ãããæ¹ãã¦ç¢ºèªãã¦ããã ããã°å¹¸ãã§ããèªãã§ããã ããããã¨ããããã¾ããï¼