JAWS DAYS 2017 Deep Dive IAM 権限をこえて 〜第三部 IAMの鼓動はログ〜

18
Deep Dive IAM 権権権権権権 権権権 IAM 権権権権権権2017/03/11

Transcript of JAWS DAYS 2017 Deep Dive IAM 権限をこえて 〜第三部 IAMの鼓動はログ〜

Page 1: JAWS DAYS 2017 Deep Dive IAM 権限をこえて 〜第三部 IAMの鼓動はログ〜

Deep Dive IAM 権限を超えて第三部 『 IAM の鼓動はログ』

2017/03/11

Page 2: JAWS DAYS 2017 Deep Dive IAM 権限をこえて 〜第三部 IAMの鼓動はログ〜

自己紹介

好光 泰章 ( よしみつ やすあき )NEC ソリューションイノベータ株式会社

HA クラスタ屋さん

Security-JAWS 3 バカトリオ #3JAWS-UG 横浜支部

2

NES:AWS のリセール提供

Page 3: JAWS DAYS 2017 Deep Dive IAM 権限をこえて 〜第三部 IAMの鼓動はログ〜

3

• AWS アカウントの不正利用 高額請求、ビジネスの停止

• 適切でない AWS アカウントの存在 おかしな初期設定のアカウント セキュリティの見直しされてないアカウント とりあえず作成したアカウント ずっと使ってないアカウント

IAM 界隈での出来事 IAM 権限を超えて 〜 第三部 IAM の鼓動はログ 〜

Page 4: JAWS DAYS 2017 Deep Dive IAM 権限をこえて 〜第三部 IAMの鼓動はログ〜

『そうだな… IAM の宿命だものな。IAM は事態の善悪など分からずに、

命令に従うんだものな。許してやるよ! 』

IAM 権限を超えて 〜 第三部 IAM の鼓動はログ 〜

Page 5: JAWS DAYS 2017 Deep Dive IAM 権限をこえて 〜第三部 IAMの鼓動はログ〜

5

IAM ベストプラクティス AWS アカウントのアクセスキーをロック 個々に IAM ユーザーを作成 ポリシーを使用して可能な限り権限を割り当てる アクセス許可を割り当てるためにグループを利用 最小限の特権 強度の高いパスワード 特権ユーザーには MFA を有効化 EC2 で作動するアプリケーションにはロールを使用 認証情報は共有せずにロールを使用 認証情報を定期的にローテーション 不要な認証情報の削除 追加セキュリティに対するポリシー条件を使用 AWS アカウントのアクティビティの監視 IAM ベストプラクティスについてのビデオ説明

IAM 権限を超えて 〜 第三部 IAM の鼓動はログ 〜

Page 6: JAWS DAYS 2017 Deep Dive IAM 権限をこえて 〜第三部 IAMの鼓動はログ〜

6

AWS アカウント監視

AWSCloudTrail

AWSConfig

AWS アカウントのすべての API 呼び出しをロギング

AWS リソースの変更履歴、構成変更をロギング

IAM 権限を超えて 〜 第三部 IAM の鼓動はログ 〜

Page 7: JAWS DAYS 2017 Deep Dive IAM 権限をこえて 〜第三部 IAMの鼓動はログ〜

7

AWS CloudTrail API Lookup IAM 権限を超えて 〜 第三部 IAM の鼓動はログ 〜

Page 8: JAWS DAYS 2017 Deep Dive IAM 権限をこえて 〜第三部 IAMの鼓動はログ〜

8

AWS CloudTrail API Lookup

・ S3 に保存される JSON ログの一部情報のみ・ 7 日間のみ保存・検索できる属性に制限あり

IAM 権限を超えて 〜 第三部 IAM の鼓動はログ 〜

Page 9: JAWS DAYS 2017 Deep Dive 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 使ってない

Page 10: JAWS DAYS 2017 Deep Dive IAM 権限をこえて 〜第三部 IAMの鼓動はログ〜

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 の鼓動はログ 〜

Page 11: JAWS DAYS 2017 Deep Dive 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 の鼓動はログ 〜

Page 12: JAWS DAYS 2017 Deep Dive 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 の鼓動はログ 〜

Page 13: JAWS DAYS 2017 Deep Dive IAM 権限をこえて 〜第三部 IAMの鼓動はログ〜

13

S3 ログ

S3 に保存されるログを活用しましょう!

・複数アカウントのログを集約可能・暗号化して保存も可能・ Digest File を使った整合性の確認も可能

IAM 権限を超えて 〜 第三部 IAM の鼓動はログ 〜

Page 14: JAWS DAYS 2017 Deep Dive IAM 権限をこえて 〜第三部 IAMの鼓動はログ〜

14

S3 ログ

< 変換 >・ AWS CloudWatch Logs・ Amazon ElasticSearch + Kibana・ Amazon Athena・サードパーティツール

生ログ =JSON 形式

IAM 権限を超えて 〜 第三部 IAM の鼓動はログ 〜

Page 15: JAWS DAYS 2017 Deep Dive 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 の鼓動はログ 〜

Page 16: JAWS DAYS 2017 Deep Dive 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 の鼓動はログ 〜

Page 17: JAWS DAYS 2017 Deep Dive IAM 権限をこえて 〜第三部 IAMの鼓動はログ〜

17

まとめ

① IAM ベストプラクティス、セキュリティホワイトペーパーは必読。

② まずはログ収集からCloudTrail 、 Config のログ出力はオンにしましょう。

③ 普段からログは見ておきましょう。いきなり見てもうろたえます。

④ ログの保全もお忘れなく。ログがなくなると途方にくれてしまいます。あと S3 の課金にも注意。

⑤ IAM は設定して終わりではありません。セキュリティ要件を明確にして、実運用にのっけるのが大変!

IAM 権限を超えて 〜 第三部 IAM の鼓動はログ 〜

Fin.

Page 18: JAWS DAYS 2017 Deep Dive IAM 権限をこえて 〜第三部 IAMの鼓動はログ〜

18

Enjoy IAM Life!Thank you.

『 IAM は、 IAM は権限なんだ。IAM は、この AWS( クラウド ) を

支えてるものなんだ!』