JAWS DAYS 2017 Deep Dive IAM 権限をこえて 〜第三部 IAMの鼓動はログ〜
-
Upload
yasuaki-yoshimitsu -
Category
Technology
-
view
188 -
download
1
Transcript of JAWS DAYS 2017 Deep Dive IAM 権限をこえて 〜第三部 IAMの鼓動はログ〜
Deep Dive IAM 権限を超えて第三部 『 IAM の鼓動はログ』
2017/03/11
自己紹介
好光 泰章 ( よしみつ やすあき )NEC ソリューションイノベータ株式会社
HA クラスタ屋さん
Security-JAWS 3 バカトリオ #3JAWS-UG 横浜支部
2
NES:AWS のリセール提供
3
• AWS アカウントの不正利用 高額請求、ビジネスの停止
• 適切でない AWS アカウントの存在 おかしな初期設定のアカウント セキュリティの見直しされてないアカウント とりあえず作成したアカウント ずっと使ってないアカウント
IAM 界隈での出来事 IAM 権限を超えて 〜 第三部 IAM の鼓動はログ 〜
『そうだな… IAM の宿命だものな。IAM は事態の善悪など分からずに、
命令に従うんだものな。許してやるよ! 』
IAM 権限を超えて 〜 第三部 IAM の鼓動はログ 〜
5
IAM ベストプラクティス AWS アカウントのアクセスキーをロック 個々に IAM ユーザーを作成 ポリシーを使用して可能な限り権限を割り当てる アクセス許可を割り当てるためにグループを利用 最小限の特権 強度の高いパスワード 特権ユーザーには MFA を有効化 EC2 で作動するアプリケーションにはロールを使用 認証情報は共有せずにロールを使用 認証情報を定期的にローテーション 不要な認証情報の削除 追加セキュリティに対するポリシー条件を使用 AWS アカウントのアクティビティの監視 IAM ベストプラクティスについてのビデオ説明
IAM 権限を超えて 〜 第三部 IAM の鼓動はログ 〜
6
AWS アカウント監視
AWSCloudTrail
AWSConfig
AWS アカウントのすべての API 呼び出しをロギング
AWS リソースの変更履歴、構成変更をロギング
IAM 権限を超えて 〜 第三部 IAM の鼓動はログ 〜
7
AWS CloudTrail API Lookup IAM 権限を超えて 〜 第三部 IAM の鼓動はログ 〜
8
AWS CloudTrail API Lookup
・ S3 に保存される JSON ログの一部情報のみ・ 7 日間のみ保存・検索できる属性に制限あり
IAM 権限を超えて 〜 第三部 IAM の鼓動はログ 〜
9
サインイン成功{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": “xxx", "arn": "arn:aws:iam::xx:user/xxUser", "accountId": “111111111111, "userName": “xxUser" }, "eventTime": "2017-03-01T03:07:48Z", "eventSource": "signin.amazonaws.com", "eventName": "ConsoleLogin", "awsRegion": "ap-northeast-1", "sourceIPAddress": “11.22.33.44", "userAgent": "Mozilla/5.0 (Windows NT 6.1; rv:49.0) Gecko/20100101 Firefox/49.0", "requestParameters": null, "responseElements": { "ConsoleLogin": "Success" }, "additionalEventData": { "LoginTo": "https://ap-northeast-1.console.aws.amazon.com/xxx", "MobileVersion": "No", "MFAUsed": "No" }, "eventID": "1c6338ba-691a-488d-900c-c6d56d882f08", "eventType": "AwsConsoleSignIn", "recipientAccountId": “111111111111"}
誰が?
どのリソース?
何するの?
どやった?
IAM 権限を超えて 〜 第三部 IAM の鼓動はログ 〜
MFA 使ってない
10
存在しない IAM ユーザーでサインイン{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "accountId": " 111111111111", "accessKeyId": "", "userName": "HIDDEN_DUE_TO_SECURITY_REASONS" }, "eventTime": "2017-03-04T15:20:04Z", "eventSource": "signin.amazonaws.com", "eventName": "ConsoleLogin", "awsRegion": "us-east-1", "sourceIPAddress": "11.22.33.44", "userAgent": "Mozilla/5.0 (Windows NT 6.1; rv:49.0) Gecko/20100101 Firefox/49.0", "errorMessage": "No username found in supplied account", "requestParameters": null, "responseElements": { "ConsoleLogin": "Failure" }, "additionalEventData": { "LoginTo": "https://console.aws.amazon.com/xxx", "MobileVersion": "No", "MFAUsed": "No" }, "eventID": "fefabd18-1a2c-4035-b1a5-e0ef931a4fc7", "eventType": "AwsConsoleSignIn", "recipientAccountId": " 111111111111"}
誰が?
どのリソース?
何するの?
どやった?
なんで?
IAM 権限を超えて 〜 第三部 IAM の鼓動はログ 〜
11
ユーザー作成{ "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": “xx", "arn": "arn:aws:iam::xx:user/xxUser", "accountId": “111111111111 ", "accessKeyId": “xxx", "userName": "cxxUser", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2017-03-03T08:15:07Z" } }, "invokedBy": "signin.amazonaws.com" }, "eventTime": "2017-03-03T08:48:37Z", "eventSource": "iam.amazonaws.com", "eventName": "CreateUser", "awsRegion": "us-east-1", "sourceIPAddress": “11.22.33.44", "userAgent": "signin.amazonaws.com", "requestParameters": { "userName": “test" },
"responseElements": { "user": { "path": "/", "arn": "arn:aws:iam::xx:user/test", "userId": “xx", "createDate": "Mar 3, 2017 8:48:37 AM", "userName": "test" } }, "requestID": "315322f1-ffee-11e6-bbe5-3c435e", "eventID": "c4b98f5f-2911-4254-8c0c-1dcc9f8247", "eventType": "AwsApiCall", "recipientAccountId": “xxx"}
誰が?
どのリソース?
どやった?
何するの?
API 経由の操作
IAM 権限を超えて 〜 第三部 IAM の鼓動はログ 〜
12
その他 IAM 観点でみるべきところ root アカウントでのサインイン
eventName =“ConsoleLogin” && userIdentity.type = “Root”
サインイン失敗 eventName =“ConsoleLogin” && errorMessage = “Failed authentication”
MFA なしでのサインイン eventName =“ConsoleLogin” && additionalEventData.MFAUser = “No”
認証失敗 errorCode =“AccessDenied” || errorCode = “UnauthorizedOperaion”
IAM ポリシーの変更 eventName = “DeleteGroupPolicy” || eventName = “DeleteRolePolicy” ||
eventName = “DeleteUserPolicy” || eventName = “PutGroupPolicy” || eventName = “PutRolePolicy” || eventName = “PutUserPolicy” ||eventName = “CreatePolicy” || eventName = “DeletePolicy” ||eventName = “CreatePolicyVersion” || eventName = “DeletePolicyVersion” ||eventName = “AttatchRolePolicy” || eventName = “DetatchRolePolicy” ||eventName = “AttatchUserPolicy” || eventName = “DetatchUserPolicy” ||eventName = “AttatchGroupPolicy” || eventName = “DetatchGroupPolicy”
IAM 権限を超えて 〜 第三部 IAM の鼓動はログ 〜
13
S3 ログ
S3 に保存されるログを活用しましょう!
・複数アカウントのログを集約可能・暗号化して保存も可能・ Digest File を使った整合性の確認も可能
IAM 権限を超えて 〜 第三部 IAM の鼓動はログ 〜
14
S3 ログ
< 変換 >・ AWS CloudWatch Logs・ Amazon ElasticSearch + Kibana・ Amazon Athena・サードパーティツール
生ログ =JSON 形式
IAM 権限を超えて 〜 第三部 IAM の鼓動はログ 〜
15
生ログを Excel 形式に変換
eventTime awsRegion eventSource eventName userNamesourceIPAddress userAgent requestParameters2017- 03- 03T00:33:52Z ap- northeast- 1 ds.amazonaws.com DescribeDirectories hoge 10.143.35.20 signin.amazonaws.com {"includeIdentityPools":false}2017- 03- 03T00:32:57Z ap- northeast- 1 elasticloadbalancing.amazonaws.com DescribeLoadBalancers hoge 10.240.200.10 signin.amazonaws.com null2017- 03- 03T00:32:56Z ap- northeast- 1 signin.amazonaws.com CheckMfa hoge 10.143.35.20 Mozilla/ 5.0 (Windows2017- 03- 03T00:32:56Z ap- northeast- 1 signin.amazonaws.com ConsoleLogin hoge 10.143.35.20 Mozilla/ 5.0 (Windows2017- 03- 03T00:34:24Z ap- northeast- 1 elasticloadbalancing.amazonaws.com DescribeLoadBalancers hoge 10.143.35.20 signin.amazonaws.com {"pageSize":300}2017- 03- 03T00:33:09Z ap- northeast- 1 monitoring.amazonaws.com DescribeAlarms hoge 10.143.35.20 signin.amazonaws.com {"maxRecords":100}2017- 03- 03T06:28:50Z ap- northeast- 1 elasticloadbalancing.amazonaws.com DescribeLoadBalancers hoge 10.143.35.11 signin.amazonaws.com {"pageSize":300}2017- 03- 03T06:27:38Z ap- northeast- 1 monitoring.amazonaws.com DescribeAlarms hoge 10.143.35.11 signin.amazonaws.com {"maxRecords":100}2017- 03- 03T06:27:18Z ap- northeast- 1 elasticloadbalancing.amazonaws.com DescribeLoadBalancers hoge 10.240.200.201 signin.amazonaws.com null2017- 03- 03T06:50:06Z ap- northeast- 1 monitoring.amazonaws.com DescribeAlarms hoge 10.143.35.11 signin.amazonaws.com {"maxRecords":100}2017- 03- 03T06:50:37Z ap- northeast- 1 monitoring.amazonaws.com DescribeAlarms hoge 10.143.35.11 signin.amazonaws.com {"maxRecords":100}2017- 03- 03T06:51:40Z ap- northeast- 1 monitoring.amazonaws.com DescribeAlarms hoge 10.143.35.11 signin.amazonaws.com {"maxRecords":100}2017- 03- 03T06:49:03Z ap- northeast- 1 monitoring.amazonaws.com DescribeAlarms hoge 10.143.35.11 signin.amazonaws.com {"maxRecords":100}2017- 03- 03T06:49:34Z ap- northeast- 1 monitoring.amazonaws.com DescribeAlarms hoge 10.143.35.11 signin.amazonaws.com {"maxRecords":100}2017- 03- 03T06:52:11Z ap- northeast- 1 monitoring.amazonaws.com DescribeAlarms hoge 10.143.35.11 signin.amazonaws.com {"maxRecords":100}2017- 03- 03T06:51:09Z ap- northeast- 1 monitoring.amazonaws.com DescribeAlarms hoge 10.143.35.11 signin.amazonaws.com {"maxRecords":100}2017- 03- 03T06:52:42Z ap- northeast- 1 monitoring.amazonaws.com DescribeAlarms hoge 10.143.35.11 signin.amazonaws.com {"maxRecords":100}2017- 03- 03T06:50:45Z ap- northeast- 1 s3.amazonaws.com GetBucketVersioning hoge 10.143.35.20 signin.amazonaws.com {"bucketName":"guide- test","versioning":[""]}2017- 03- 03T06:49:02Z ap- northeast- 1 ec2.amazonaws.com StartInstances hoge 10.143.35.11 signin.amazonaws.com {"instancesSet":{"items":[{"instanceId":"i- b7021812"},{"instanceId":"i- 4cdfc5e9"}]}}2017- 03- 03T06:57:48Z ap- northeast- 1 monitoring.amazonaws.com DescribeAlarms hoge 10.143.35.11 signin.amazonaws.com {"maxRecords":100}2017- 03- 03T06:56:46Z ap- northeast- 1 monitoring.amazonaws.com DescribeAlarms hoge 10.143.35.11 signin.amazonaws.com {"maxRecords":100}2017- 03- 03T06:56:15Z ap- northeast- 1 monitoring.amazonaws.com DescribeAlarms hoge 10.143.35.11 signin.amazonaws.com {"maxRecords":100}2017- 03- 03T06:55:43Z ap- northeast- 1 ec2.amazonaws.com StartInstances hoge 10.143.35.11 signin.amazonaws.com {"instancesSet":{"items":[{"instanceId":"i- 0ce7b255859fce9b4"}]}}2017- 03- 03T06:55:44Z ap- northeast- 1 monitoring.amazonaws.com DescribeAlarms hoge 10.143.35.11 signin.amazonaws.com {"maxRecords":100}2017- 03- 03T06:57:17Z ap- northeast- 1 monitoring.amazonaws.com DescribeAlarms hoge 10.143.35.11 signin.amazonaws.com {"maxRecords":100}2017- 03- 03T06:58:18Z ap- northeast- 1 monitoring.amazonaws.com DescribeAlarms hoge 10.143.35.11 signin.amazonaws.com {"maxRecords":100}2017- 03- 03T06:58:50Z ap- northeast- 1 monitoring.amazonaws.com DescribeAlarms hoge 10.143.35.11 signin.amazonaws.com {"maxRecords":100}2017- 03- 03T07:05:14Z ap- northeast- 1 monitoring.amazonaws.com DescribeAlarms hoge 10.143.35.11 signin.amazonaws.com {"maxRecords":100}2017- 03- 03T07:04:43Z ap- northeast- 1 monitoring.amazonaws.com DescribeAlarms hoge 10.143.35.11 signin.amazonaws.com {"maxRecords":100}2017- 03- 03T07:27:26Z ap- northeast- 1 elasticloadbalancing.amazonaws.com DescribeLoadBalancers hoge 10.240.200.201 signin.amazonaws.com null
不正な IP ?繰り返し?
まさか root ?
IAM 権限を超えて 〜 第三部 IAM の鼓動はログ 〜
16
認証情報レポート (Credential Report)
user arn user_creation_time
password_enabled
password_last_used
password_last_changed
password_next_rotatio
nmfa_
activeaccess_key_
1_activeaccess_key_
1_last_rotatedaccess_key_1_last_used_date
<root_account>arn:aws:iam::825906717550:root2011- 11- 05T07:14:45+00:00not_supported 2017- 03- 03T02:57:30+00:00not_supported not_supported FALSE TRUE 2011- 11- 05T07:14:45+00:00N/ Aarn:aws:iam::825906717550:user/ clp- admin2011- 12- 26T13:32:48+00:00TRUE 2017- 03- 06T04:40:13+00:002014- 04- 07T10:01:07+00:00N/ A FALSE FALSE 2014- 06- 14T07:11:13+00:00N/ Aarn:aws:iam::825906717550:user/ clp- admin- gl2015- 02- 16T04:36:29+00:00TRUE 2015- 03- 11T01:00:32+00:002015- 02- 16T04:40:04+00:00N/ A FALSE TRUE 2015- 02- 16T04:36:29+00:00N/ Aarn:aws:iam::825906717550:user/ clp- admin- hs2014- 06- 24T09:47:40+00:00TRUE 2015- 05- 12T01:23:15+00:002014- 06- 24T09:49:14+00:00N/ A FALSE TRUE 2014- 06- 24T09:47:40+00:00N/ Aarn:aws:iam::825906717550:user/ clp- admin- kb2014- 09- 10T00:21:50+00:00TRUE 2017- 02- 20T01:26:07+00:002014- 09- 10T00:34:47+00:00N/ A FALSE TRUE 2014- 09- 10T00:21:50+00:002017- 03- 06T02:24:00+00:00arn:aws:iam::825906717550:user/ clp- awscli- kb2015- 10- 21T05:03:07+00:00FALSE N/ A N/ A N/ A FALSE TRUE 2015- 10- 21T05:03:07+00:002017- 03- 06T04:34:00+00:00arn:aws:iam::825906717550:user/ clp- user- license2014- 10- 29T04:42:19+00:00TRUE no_information 2014- 10- 29T05:35:32+00:00N/ A FALSE TRUE 2014- 10- 29T05:32:06+00:00N/ Aarn:aws:iam::825906717550:user/ clp- user- nintei2015- 02- 03T05:49:04+00:00TRUE 2015- 02- 04T02:45:04+00:002015- 02- 04T02:44:53+00:00N/ A FALSE TRUE 2015- 02- 04T06:51:06+00:002017- 02- 24T07:33:00+00:00arn:aws:iam::825906717550:user/ clp- user- saptest2015- 01- 14T02:39:46+00:00TRUE 2016- 06- 01T08:16:39+00:002015- 01- 14T02:41:41+00:00N/ A FALSE TRUE 2015- 01- 14T02:39:46+00:00N/ Aarn:aws:iam::825906717550:user/ clp- user- sol- dtest2017- 01- 12T00:47:04+00:00FALSE N/ A N/ A N/ A FALSE TRUE 2017- 01- 12T00:47:05+00:002017- 02- 01T09:36:00+00:00arn:aws:iam::825906717550:user/ clp- user- sol- test2015- 08- 26T07:09:36+00:00FALSE N/ A N/ A N/ A FALSE TRUE 2015- 08- 26T07:09:36+00:002015- 09- 02T03:01:00+00:00arn:aws:iam::825906717550:user/ AWS/ OpsWorks/ OpsWorks- opsworks_test_2- i- 583a96942015- 02- 03T09:34:31+00:00FALSE N/ A N/ A N/ A FALSE TRUE 2015- 02- 03T09:34:33+00:00N/ Aarn:aws:iam::825906717550:user/ AWS/ OpsWorks/ OpsWorks- opsworks_test_2- ip- 10- 0- 0- 2...te.internal2015- 02- 03T09:35:25+00:00FALSE N/ A N/ A N/ A FALSE TRUE 2015- 02- 03T09:35:27+00:00N/ Aarn:aws:iam::825906717550:user/ AWS/ OpsWorks/ OpsWorks- opsworks_test_2- ip- 10- 0- 0- 2...te.internal+12015- 02- 03T09:38:33+00:00FALSE N/ A N/ A N/ A FALSE TRUE 2015- 02- 03T09:38:34+00:00N/ Aarn:aws:iam::825906717550:user/ AWS/ OpsWorks/ OpsWorks- opsworks_test_2- ip- 10- 0- 0- 2...te.internal+22015- 02- 03T09:57:32+00:00FALSE N/ A N/ A N/ A FALSE TRUE 2015- 02- 03T09:57:33+00:00N/ Aarn:aws:iam::825906717550:user/ pie0012015- 08- 20T07:36:52+00:00FALSE N/ A N/ A N/ A FALSE TRUE 2015- 08- 20T07:36:52+00:002016- 07- 17T04:50:00+00:00arn:aws:iam::825906717550:user/ solution- pattern- eval2016- 03- 03T08:23:42+00:00FALSE N/ A N/ A N/ A FALSE TRUE 2016- 03- 03T08:23:42+00:002016- 03- 30T02:29:00+00:00
パスワード認証と
アクセスキー認証共に有効
パスワード認証と
アクセスキー認証共に有効
パスワード認証が有効なのに
パスワードが使われた形跡がな
い→ 必要なユーザー?アクセスキーのローテーション
はされているか?MFA は適切に設定されている?
未使用のアクセスキー?
IAM 権限を超えて 〜 第三部 IAM の鼓動はログ 〜
17
まとめ
① IAM ベストプラクティス、セキュリティホワイトペーパーは必読。
② まずはログ収集からCloudTrail 、 Config のログ出力はオンにしましょう。
③ 普段からログは見ておきましょう。いきなり見てもうろたえます。
④ ログの保全もお忘れなく。ログがなくなると途方にくれてしまいます。あと S3 の課金にも注意。
⑤ IAM は設定して終わりではありません。セキュリティ要件を明確にして、実運用にのっけるのが大変!
IAM 権限を超えて 〜 第三部 IAM の鼓動はログ 〜
Fin.
18
Enjoy IAM Life!Thank you.
『 IAM は、 IAM は権限なんだ。IAM は、この AWS( クラウド ) を
支えてるものなんだ!』