ã¨ã³ã¿ã¼ãã©ã¤ãºã¯ã©ã¦ãé¨ã®å±±ä¸(ç¥)ã§ããä»åã¯ãIAM Access Analyzer ã®åæçµæããAWS CLI ã§CSVåºåãã¦ã¿ããã¨æãã¾ãã
- IAM Access Analyzer ã¨ã¯
- ããã¸ã¡ã³ãã³ã³ã½ã¼ã«ã®ã¨ã¯ã¹ãã¼ãã§ã¯ãJSONããã¨ã¯ã¹ãã¼ãã§ããªã
- å®è¡ã³ãã³ã
- ã³ãã³ããåå²ãã¦è§£èª¬
- ã¾ã¨ã
IAM Access Analyzer ã¨ã¯
IAM ã®æ©è½ã®ä¸ã¤ã§ãã¢ã«ã¦ã³ãå¤é¨ã¨å ±æããã¦ããAWSãªã½ã¼ã¹ããæªä½¿ç¨ã®IAMã¦ã¼ã¶ã¼ã»IAMãã¼ã«çãæ¤ç¥ãããã¨ãåºæ¥ã¾ãã詳細ã¯ä¸è¨å ¬å¼ããã¥ã¡ã³ããåç §ãã¦ãã ããã
ããã¸ã¡ã³ãã³ã³ã½ã¼ã«ã®ã¨ã¯ã¹ãã¼ãã§ã¯ãJSONããã¨ã¯ã¹ãã¼ãã§ããªã
ãã¦ãIAM Access Analyzer ã®ã³ã³ã½ã¼ã«ç»é¢ã«ã¯ãæ¤åºçµæãã¨ã¯ã¹ãã¼ããããã¿ã³ãããã®ã§ããã2024å¹´5æç¾å¨ãJSONå½¢å¼ã§ã®åºåã«ãã対å¿ãã¦ãã¾ããã
ããã§ã¯å°ã
è¦èªæ§ãæªãã§ãããåºåçµæãå¤ãå ´åã¯ç¢ºèªããã¥ãããã¨æãã¾ãã
ããã§ãAWS CLIãå©ç¨ããçµæãCSVåºåãã¦ã¿ã¾ããã
å®è¡ã³ãã³ã
ä»åã¯ã以ä¸ã®ã³ãã³ããå®è¡ãã¾ããã
aws accessanalyzer list-findings-v2 \ --analyzer-arn <IAM Access Analyzerã®ARN> \ --query 'findings[*].[resource,resourceOwnerAccount]' \ --filter '{"resourceType": {"eq": ["AWS::IAM::User"]}}' \ --output text | sed -e 's/arn:aws:iam::.*:user\/\(.*\)/\1/g' | tr "\t" "," | sort | uniq > ./sample.csv
åºåã¤ã¡ã¼ã¸ã¯ä»¥ä¸ã§ãã1ã¤ç®ã®å¤ãIAMã¦ã¼ã¶ã¼åã2ã¤ç®ã®å¤ãAWSã¢ã«ã¦ã³ãçªå·ã§ãã
[cloudshell-user@ip-10-134-21-218 ~]$ aws accessanalyzer list-findings-v2 \ > --analyzer-arn arn:aws:access-analyzer:ap-northeast-1:xxxxxxxxxxxx:analyzer/UnusedAccess-ConsoleAnalyzer-xxxxxxxxxxxxxx \ > --query 'findings[*].[resource,resourceOwnerAccount]' \ > --filter '{"resourceType": {"eq": ["AWS::IAM::User"]}}' \ > --output text | sed -e 's/arn:aws:iam::.*:user\/\(.*\)/\1/g' | tr "\t" "," | sort | uniq administrator,637xxxxxxxxx TestUser,211xxxxxxxxx TestUser-211xxxxxxxxx-01,211xxxxxxxxx TestUser-211xxxxxxxxx-02,211xxxxxxxxx TestUser-211xxxxxxxxx-03,211xxxxxxxxx TestUser-339xxxxxxxxx-01,339xxxxxxxxx TestUser-533xxxxxxxxx-01,533xxxxxxxxx TestUser-654xxxxxxxxx-01,654xxxxxxxxx [email protected],637xxxxxxxxx [cloudshell-user@ip-10-134-21-218 ~]$
ã³ãã³ããåå²ãã¦è§£èª¬
ã³ãã³ããå°ãåå²ãã¦è§£èª¬ãã¾ãã
aws accessanalyzer list-findings-v2
ã¾ãã¯æåã®2è¡ã§ãã
aws accessanalyzer list-findings-v2 \ > --analyzer-arn arn:aws:access-analyzer:ap-northeast-1:xxxxxxxxxxxx:analyzer/UnusedAccess-ConsoleAnalyzer-xxxxxxxxxxxxxx \
aws accessanalyzer list-findings-v2
ã³ãã³ãã¯ãIAM Access Analyzer ã®æ¤åºçµæã表示ããã³ãã³ãã§ãã
analyzer-arn
ã¯å¿
é ã®å¼æ°ã§ããããã¸ã¡ã³ãã³ã³ã½ã¼ã«ã§ã確èªã§ãã¾ãã
æ¬ã³ãã³ãã®åºåã¤ã¡ã¼ã¸ã§ããç¹ã«ãã£ã«ã¿ã¼ããªãå ´åãããã¸ã¡ã³ãã³ã³ã½ã¼ã«ã§ã¨ã¯ã¹ãã¼ãããæã¨ã»ã¨ãã©åãå
容ã¨ãªãã¾ãã
[cloudshell-user@ip-10-130-34-51 ~]$ aws accessanalyzer list-findings-v2 \ > --analyzer-arn arn:aws:access-analyzer:ap-northeast-1:xxxxxxxxxxx:analyzer/UnusedAccess-ConsoleAnalyzer-xxxxxxxxxxxxxx "findings": [ { "analyzedAt": "2024-05-15T20:20:30+00:00", "createdAt": "2024-04-25T02:24:46+00:00", "id": "xxxxxxxxxxxx", "resource": "arn:aws:iam::637xxxxxxxxx:role/SampleRole", "resourceType": "AWS::IAM::Role", "resourceOwnerAccount": "637xxxxxxxxx", "status": "ARCHIVED", "updatedAt": "2024-05-15T20:20:50+00:00", "findingType": "UnusedIAMRole" },
aws accessanalyzer list-findings-v2
ã³ãã³ãã®è©³ç´°ã¯ä»¥ä¸ã®å
¬å¼ããã¥ã¡ã³ããåç
§ãã ããã
query
ç¶ãã¦3è¡ç®ã®queryã§ããå ã»ã©ã®åºåçµæãããæ¬²ããé ç®ã ããåã£ã¦ãã¾ãã
--query 'findings[*].[resource,resourceOwnerAccount]'
ä»åã¯ãJSONã®ä¸ã®ãresourceãã¨ãresourceOwnerAccountãã®å¤ã®ã¿åãåºãã¾ããã
AWS CLIã® query ã®å®æ½æ¹æ³ã«ã¤ãã¦ã¯ã以ä¸ããåç §ãã ããã
filter
ç¶ãã¦4è¡ç®ã®filterã§ãã
--filter '{"resourceType": {"eq": ["AWS::IAM::User"]}}'
IAM Access Analyzer ã®ãæªä½¿ç¨ã®ã¢ã¯ã»ã¹ãã§ã¯ãIAMã¦ã¼ã¶ã¼ã ãã§ãªããæªä½¿ç¨ã®IAMãã¼ã«ãæ¤ç¥ãããã¨ãå¯è½ã§ããä»åã¯ãæ¤åºçµæãIAMã¦ã¼ã¶ã¼ã«çµãã¾ãããæ¤åºçµæãçµãå¿ è¦ããªãå ´åãfilterã¯ä¸è¦ã§ãã
output
5è¡ç®ã«ã¯è¤æ°ã®ã³ãã³ããå ¥ã£ã¦ãã¾ãããã¾ã㯠outputã§ãã
--output text
åºåãJSONå½¢å¼ã§ã¯ãªããããã¹ãå½¢å¼ã§åºåãã¾ãã
sed
ç¶ãã¦sedã³ãã³ãã§ãã
sed -e 's/arn:aws:iam::.*:user\/\(.*\)/\1/g'
ãresourceãã«ã¯IAMã¦ã¼ã¶ã¼ã®ARNãå ¥ã£ã¦ããã®ã§ãããã¦ã¼ã¶ã¼åã®åã®é¨åãarn:aws:iam::xxxxxxxxxxxx:user/ãã¯ä¸è¦ãªã®ã§ãã¦ã¼ã¶ã¼åã®é¨åã®ã¿åãåºãã¦ãã¾ãã
tr
ç¶ãã¦trã§ãã
tr "\t" ","
ããã§ã¯ãã¿ããã«ã³ãã«å¤æ´ãã¦ãã¾ããCSVãã¡ã¤ã«ã§ã¯ãªãTSVãã¡ã¤ã«ã§åé¡ãªããã°ããã®å¤æã¯ä¸è¦ã§ãã
sortãuniq
æå¾ã¯sortã¨uniqã§ãã
sort | uniq
åºåçµæãã½ã¼ãããéè¤è¡ãåé¤ãã¦ãã¾ãã
éè¤è¡ãçºçããçç±ã¯ãåãIAMã¦ã¼ã¶ã¼ããè¤æ°ã®æ¤åºã¿ã¤ãã§æ¤åºããããã¨ãããããã§ãã
ã¾ã¨ã
以ä¸ãIAM Access Analyzer ã®æ¤åºçµæãCSVãã¡ã¤ã«ã§åºåããæ¹æ³ã§ããã
æ®æ®µããã¸ã¡ã³ãã³ã³ã½ã¼ã«ãã¡ã¤ã³ã«å©ç¨ãã¦ããå ´åã§ããä½ãã®ä¸è¦§ããã¡ã¤ã«ã«ã¾ã¨ãããå ´åãªã©ã¯ãCLIã使ã£ãæ¹ãæ©ãã±ã¼ã¹ãããã¾ããããç¨åº¦æ
£ãã¦ããã¨ãéç¨ããã©ãã«ã·ã¥ã¼ãã®éã«ããã¨ç¢ºèªã§ãã¦ä½ãã¨ä¾¿å©ããããã¾ãããAWS CloudShellãå©ç¨ããã°ããã«ä½¿ããã¨ãåºæ¥ã¾ãããè¯ãã£ããCLIã使ã£ã¦ã¿ã¦ãã ããã
æå¾ã¾ã§ãèªã¿ããã ãããããã¨ããããã¾ããããã®ããã°ãå°ãã§ãåèã«ãªãã°å¹¸ãã§ãã
å±±ä¸ ç¥æ¨¹(å·çè¨äºã®ä¸è¦§)
2021å¹´11æä¸éå ¥ç¤¾ãåè·ã§ã¯æ ã·ã¹ã¨ãã¦ç¤¾å ãããã¯ã¼ã¯ã®æ´æ¹ãéç¨ã«æºãã£ã¦ãã¾ããã 2023 Japan AWS All Certifications Engineersã