AWS Black Belt Online Seminar AWS Identity and Access Management (AWS IAM) 1 アマゾンウェブサービスジャパン株式会社 プロフェッショナルサービス本部 高 田智 己 2016.09.21
内容についての注意点 本資料料では 2016 年年 9 月 21 日時点のサービス内容および価格についてご説明しています 最新の情報は AWS 公式ウェブサイト (http://aws.amazon.com) にてご確認ください 資料料作成には 十分注意しておりますが 資料料内の価格と AWS 公式ウェブサイト記載の価格に相違があった場合 AWS 公式ウェブサイトの価格を優先とさせていただきます 価格は税抜表記となっています 日本居住者のお客様が東京リージョンを使 用する場合 別途消費税をご請求させていただきます AWS does not offer binding price quotes. AWS pricing is publicly available and is subject to change in accordance with the AWS Customer Agreement available at http://aws.amazon.com/agreement/. Any pricing information included in this document is provided only as an estimate of usage charges for AWS services based on certain information that you have provided. Monthly charges will be based on your actual use of AWS services, and may vary from the estimates provided. 2
アジェンダ IAMの概要 IAMによる認証 (Authentication) IAMによる権限設定 (Authorization) IAMによる監査 (Audit) AWS Security Token ServiceとIAMロール IAMによるFederation まとめ 3
アジェンダ IAMの概要 IAMによる認証 (Authentication) IAMによる権限設定 (Authorization) IAMによる監査 (Audit) AWS Security Token ServiceとIAMロール IAMによるFederation まとめ 4
AWS Identity and Access Management (IAM) AWS 操作をよりセキュアに 行行うための認証 認可の仕組み AWS 利利 用者の認証と アクセスポリシーを管理理 AWS 操作のためのグループ ユーザー ロールの作成が可能 グループ ユーザーごとに 実 行行出来る操作を規定できる ユーザーごとに認証情報の設定が可能 開発チーム 運 用チーム 5
IAM 動作イメージ API やマネジメントコンソールからの アクセスに対して 権限をチェック 全操作可能 S3 はすべて操作可能 S3 参照だけ 6
AWS アカウント (root) ユーザー AWS アカウント作成時の ID アカウントの全ての AWS サービスとリソースへの完全なアクセス権限を持つ アカウントの作成に使 用したメールアドレスとパスワードでサインイン 日常的なタスクには それが管理理者タスクであっても root ユーザーを使 用しないことを強く推奨 7
AWS の root 権限が必要な操作の例例 以下の操作には AWS のルート権限が必要となります (2016 年年 9 月現在 ) AWS ルートアカウントのメールアドレスやパスワードの変更更 IAM ユーザーの課 金金情報へのアクセスに関する activate/deactivate 他の AWS アカウントへの Route53 のドメイン登録の移 行行 CloudFront のキーペアの作成 AWS サービス ( サポート等 ) のキャンセル AWS アカウントの停 止 コンソリデイテッドビリングの設定 脆弱性診断フォームの提出 逆引き DNS 申請 8
IAM ユーザー AWS 操作 用のユーザー 1AWS アカウントで 5000 ユーザーまで作成可能 ユーザーごとに設定可能な情報 ユーザー名 IAM ユーザーの識識別と マネジメントコンソールへのログインに使 用 64 文字までのアルファベット 数字 +=,.@- _ パス ( オプション ) ユーザーにオプションとしてセットできる情報 パスを元にユーザーの検索索が可能 組織階層やプロジェクトなどをセット例例 )/aws/sa/ 512 文字までの Basic Latin 文字 ( アルファベット 数字!"#$%&'()=~ - ^\@` {[}]*:+;?_ ) 開始と終了了が / であること 所属グループ 10 のグループまで設定可能 パーミッション AWS サービスへのアクセス権限 JSON 形式でポリシーを記述 9
IAM グループ Group IAM ユーザーをまとめるグループ 1AWS アカウントで 100 グループまで作成可能 グループに設定可能な情報 グループ名 グループの識識別に使 用 最 大 128 文字 パス ( オプション ) 組織階層などをセット例例 )/aws/ パーミッション グループに設定したパーミッションは IAM ユーザーに付与したパーミッションと同時に評価 評価 方法は後述 10
アジェンダ IAMの概要 IAMによる認証 (Authentication) IAMによる権限設定 (Authorization) IAMによる監査 (Audit) AWS Security Token ServiceとIAMロール IAMによるFederation まとめ 11
IAM で使 用する認証情報 アクセスキー ID/ シークレットアクセスキー REST,Query 形式の API 利利 用時の認証に使 用 12 2 つまで 生成可能 Active/Inactive の切切り替え 情報の置き場には注意 GitHUB AMI の中への埋め込み ワード 文書等に記述 非暗号化メールの中に記述 コードの中への直接書き込み AWS 認証情報ファイル 環境変数 X.509 Certificate SOAP 形式の API リクエスト 用 OpenSSL などで証明書を作りアップロード
13 IAM で使 用する認証情報 AWS マネジメントコンソールへのログインパスワード デフォルトは未設定 ( ログインできない ) 128 文字までの Basic Latin 文字 パスワード変更更時のポリシー設定が可能 AWS アカウントごとに設定 最低パスワード 長 大 文字 小 文字等 MFA( 多要素認証 ) ハードウェア MFA 仮想 MFA SMS MFA より選択 ハードウェア MFA Gemalto 社から AWS 用のデバイスを購 入 Token タイプ カードタイプ (2016 年年 9 月現在利利 用できません ) 仮想 MFA スマートフォンや PC にインストール Google Authenticator など TOTP 実装のソフトが利利 用可能 SMS MFA( プレビュー ) モバイルデバイスの SMS を利利 用
強度度の強いパスワードポリシーの利利 用 AWS の管理理コンソールにログインするために必要となる IAM ユーザーのパスワードには以下のようなパスワードポリシーを持たせることが可能 パスワードの最 小 文字数 大 文字英字の要求 小 文字英字の要求 数字を含めることの要求 特殊 文字の要求 ユーザー 自 身によるパスワード変更更の許可 パスワードの有効期限の設定 パスワードの再利利 用の制限 パスワードが期限切切れになった場合管理理者によるリセットの有無 AWS ルートアカウントには適 用されないことに注意 14
AWS ルートアカウントは極 力力利利 用しない AWSルートアカウントはIAMで設定するアクセスポリシーが適 用されない強 力力なアカウント 十分に強度度の強いパスワードを設定した上 通常は極 力力利利 用しないような運 用を Security CredentialのページからAccess Keyの削除 ( ただしAccess Keyを使 用していないか確認が必要 ) 15
MFA によるアカウントの保護 多要素認証 (MFA) によるなりすましの防 止 AWSルートアカウントはMFAで保護し通常利利 用しない運 用に 2016 年年 9 月現在カード型のハードウェア MFA は利利 用できません ハードウェア ソフトウェア ( 認証情報コピー不不可 ) ソフトウェア ( 認証情報コピー可能 ) SMS( プレビュー ) 製品 Gemalto Google Authenticator Authy N/A 形式 トークン型 /( カード型 ) スマホアプリ スマホアプリ モバイルデバイスの SMS コスト 有料料 (2,000 円程度度 ) 無料料 無料料 SMS 料料 金金 / データ料料 金金 保管 持ち歩くことも可能だし 金金庫などに厳重に保管も可能 常に持ち歩く 常に持ち歩く 常に持ち歩く 交換 紛失 / 故障時は 再登録 交換時のために予備の準備が必要 紛失 / 機種変更更時は 再登録 機種交換時に認証情報を引き継げる 同じ電話番号を持つ新しいモバイルフォンを取得する場合 支障なし ルート アカウント IAM ユーザー サポート サポート サポート サポートしていない サポート サポート サポート サポート 16
認証情報の定期的なローテーション IAM ユーザーのパスワードや Access Key/ Secret Access Key は定期的にローテーションすることを推奨 認証情報の利利 用状況はIAMのCredential Report 機能で確認可能 ユーザーの作成 日時 最後にパスワードが使われた 日時 最後にパスワードが変更更された 日時 MFAを利利 用しているか Access KeyがActiveか Access Keyのローテートした 日時 Access Keyを最後に使 用した 日時 Access Keyを最後に利利 用したAWSサービス 証明書はActiveか 証明書のローテートした 日時 17
IAM 認証情報レポート (Credential Report) パスワードやアクセスキーのローテーションなど 認証情報ライフサイクルの要件の結果を監査可能 認証情報レポートは カンマ区切切り値 (CSV) ファイルとしてダウンロード可能 使 用していない認証情報は削除! Credential Report レポートは 4 時間毎に 一回 生成可能 18 https://blogs.aws.amazon.com/security/post/tx1gzchqc7lr3ut/new- in- IAM- Quickly- Identify- When- an- Access- Key- Was- Last- Used
IAM ユーザーのパスワードローテーション IAM のパスワードポリシーでユーザーがパスワードを変更更できるように設定 パスワードに有効期限を設けることで利利 用者が 自分で定期的にパスワードをローテーションできるようにする 19
アクセスキーのローテーション IAMユーザーの 認証情報 の アクセスキー から アクセスキーの管理理 を選択 アクセスキーの作成 で新しい認証情報の作成 (2つまで) 新しい認証情報でテストを 行行い 古いAccess KeyはInactiveにする 万が 一問題が起きた時は再び Activateすることが可能 20 http://docs.aws.amazon.com/ja_ jp/iam/latest/userguide/using_ RotatingCredentials.html
アジェンダ IAMの概要 IAMによる認証 (Authentication) IAMによる権限設定 (Authorization) IAMによる監査 (Audit) AWS Security Token ServiceとIAMロール IAMによるFederation まとめ 21
IAM ポリシー AWS アクセスに対する権限設定 JSON 形式のアクセスポリシー 言語でアクセス条件を記述 http://docs.aws.amazon.com/ja_ jp/iam/latest/userguide/policy- reference.html このブロックを 1 条件として アクセス権限をチェック 22 { "Statement { "Effect": "Allow", "Action": [ " s3:listbuckets ", " s3:get * " ], "Resource": [ " arn:aws:s3:::mybucket " ], "Condition": { "IpAddress": { "aws:sourceip": [ 176.32.92.49/32 ] } } } ] }
管理理ポリシーとインラインポリシー 2015 年年より従来からのインラインポリシーに加え管理理ポリシーが IAM ポリシーの分類として追加 管理理ポリシーは独 立立したポリシーであり複数のユーザーやグループ等にアタッチして利利 用することが可能 分類 管理理ポリシー : AWS 管理理ポリシー : AWS アカウント内の複数のユーザー グループ AWS が作成および管理理する管理理ポリシー およびロールに最 大10 個までアタッチできるスタンドアロンポリシー 5 世代まで変更更を保管カスタム管理理ポリシー : でき ロールバックも可能 AWS アカウントで作成および管理理する管理理ポリシー 詳細 インラインポリシー : 従来の IAM ポリシーと同じ内容 自 身で作成および管理理するポリシーで 単 一のユーザー グループ またはロールに直接埋め込まれる http://docs.aws.amazon.com/ja_ jp/iam/latest/userguide/policies- managed- vs- inline.html 23
AWS 管理理ポリシー AWS 管理理ポリシーは AWS が作成および管理理するスタンドアロンポリシー 一般的なユースケースに基づいた AWS 管理理ポリシーが 用意されており 利利 用者は事前に定義された AWS 管理理ポリシーを選択して利利 用することが可能 24 AWS アカウント 1 Group Admins User Dave Role EC2- App User Susan User Alice AWS 管理理ポリシー Policy AdministratorAccess Policy PowerUserAccess Policy AWSCloudTrailRead OnlyAccess AWS アカウント 2 User John User Mike 管理理者 用 ( すべてのアクセス ) パワーユーザー 用 (IAM を除くすべてのアクセス ) および AWS サービスへのその他のさまざまなレベルアクセス 用の 一般的なアクセス権限を定義 新しい AWS サービスがリリースされたり 既存のサービスで新しい API が利利 用できるようになったり ポリシーに新しいサービスまたは API のアクセス権限を含める必要が発 生した場合に AWS 管理理ポリシーが対応 事前定義されているものなので 1 つの AWS 管理理ポリシーを複数の AWS アカウントの IAM エンティティに また 1 つの AWS アカウントの複数の IAM エンティティにアタッチ可能
カスタマー管理理ポリシー カスタマー管理理ポリシーは 自 身の AWS アカウントで管理理できるスタンドアロンポリシー AWS アカウントの複数の IAM エンティティにカスタマー管理理ポリシーをアタッチすることが可能 カスタマー管理理ポリシー AWS アカウント 利利 用者がカスタム可能な管理理ポリシー Group Admins User Dave User Susan User Alice Policy Account- admins Policy Limited- admins 同じポリシーを複数の IAM エンティティにアタッチできる 用意されているポリシーでは要件を満たせない場合等にカスタマー管理理ポリシーを適 用 Role EC2- App Policy EC2- access 25
インラインポリシー インラインポリシーは 1 つの IAM エンティティ ( ユーザー グループ またはロール ) に埋め込まれたポリシー IAM エンティティの 一部であり IAM エンティティの作成時 またはそれ以降降に ポリシーを作成して IAM エンティティに埋め込まれる AWS アカウント インラインポリシー ユーザー グループ またはロールの 一部 Group Admins Policy Account- admins 一つのポリシーを共有することはできない User Susan User Alice ポリシーの変更更に関して 該当するインラインポリシー全てを個々に変更更する必要がある Role EC2- App Policy EC2- access Policy Dynamo- access 26
管理理ポリシーの使い分け 管理理ポリシーのメリット 再利利 用性 変更更管理理の 一元化 バージョニングとロールバック AWS 管理理ポリシーの 自動更更新 管理理ポリシーの制限 AWS アカウントあたりのカスタマー管理理ポリシー数 : 1000 管理理ポリシーあたりのバージョン数 : 5 IAM のユーザー グループ ロールごとにアタッチされる管理理ポリシー数 : 10 管理理ポリシーに関する留留意点 管理理ポリシーの制限が問題となるケース 意図しない IAM エンティティに管理理ポリシーが誤ってアタッチされるリスクを許容できないケース AWS 管理理ポリシーに関しては AWS による変更更が問題となるケース 27 http://docs.aws.amazon.com/ja_ jp/iam/latest/userguide/policies- managed- vs- inline.html
管理理ポリシーの使 用例例 ( アクセス権限管理理の委任 ) AWS Account カスタマー管理理ポリシー AWS 管理理ポリシー ユーザーの作成や削除等 IAM の運 用 管理理の 一部を委任する場合 制限付き IAM 管理理者 限定された IAM の運 用権限 ベースラインになる IAM の Read Only 権限は事前定義されている AWS 管理理ポリシーを利利 用 IAM ユーザーの作成 削除等 特定の管理理ポリシーのアタッチやデタッチ IAM の Read Only 権限 委譲したい特定業務はカスタマー管理理ポリシーを作成 開発者 S3 の特定バケットへの権限 DynamoDB への Full Access 権限 どの管理理ポリシーを操作できるといった細かいアクセスコントロールも可能 28 http://aws.typepad.com/sajp/2015/04/how- to- create- a- limited- iam- administrator- by- using- managed- policies.html
29 アクセス条件の記述 { "Effect": "Allow", "Action": [ " s3:listbuckets ", " s3:get * " ], "Resource": [ "arn:aws:s3:::mybucket" ], "Condition": { "IpAddress": { "aws:sourceip": [ 176.32.92.49/32 ] } } } Effect: 許可の設定なら Allow 拒否の設定なら Deny Action: 対象となる AWS 操作を指定 Resource: 対象となる AWS リソースを指定 Condition: このアクセス制御が有効になる 条件の設定 この例例の場合 アクセス元 IP が 176.32.92.49 だったら S3 の ListBuckets と Get 系の操作を許可する という意味
Action Action は 操作 自体に対する設定 ec2:runinstances ec2:attachvolume s3:createbucket s3:deleteobject ワイルドカード指定可能 例例 )ec2:describe* 指定の操作以外の場合は NotAction を使 用 例例 ) NotAction : iam:* (IAM の操作以外を許可する ) "Action": [ " s3:listbuckets", " s3:get*" ] 30
Resource Resource は操作対象を指定する設定 EC2 インスタンス EBS ボリューム S3 バケット S3 オブジェクト ARN(Amazon Resource Name) で記述 arn:aws: で始まる 文字列列 arn:aws:service:region:account:resource 例例 ) arn:aws:s3:::mybucket 指定リソース以外の場合は NotResource を使 用 例例 ) NotResource : arn:aws:s3:::hoge http://docs.aws.amazon.com/ja_ jp/general/latest/gr/aws- arns- and- namespaces.html "Resource": [ " arn:aws:s3:::mybucket" ] 31
Condition Resource に対する Action を許可 ( もしくは拒否 ) するかどうかの条件設定 ポリシー変数 ( 条件キー ) に対して 演算 子を 用いて条件を指定 "Condition": { "IpAddress": {"aws:sourceip": 176.32.92.49/32 } } 演算 子 ポリシー変数 条件値 32 http://docs.aws.amazon.com/ja_ jp/iam/latest/userguide/accesspolicylanguage_ ElementDescriptions.html#Condition
ポリシー変数 全てのリクエストで利利 用できるキー ポリシー変数 用途 aws:currenttime 日時の確認 aws:epochtime エポック (UNIX) 時間で表した 日付 aws:tokenissuetime 一時的認証情報が発 行行された 日付 aws:multifactorauthpresent MFAの確認 aws:multifactorauthage MFA 認証済み認証が発 行行された時間 aws:principaltype プリンシパルタイプの確認 aws:referer クライアントブラウザーの確認 aws:securetransport SSLによるリクエストの確認 aws:sourceip 接続元 IPの確認 aws:sourcearn ソースのARNの確認 aws:sourcevpc ソースのVPCの確認 aws:useragent クライアントアプリケーション aws:userid ユーザー ID aws:username ユーザー名 AWS サービス固有のキーの例例 ポリシー変数 s3:prefix sns:protocol ec2:resourcetag/tag 名 用途 Prefix の確認 配信プロトコルの確認 タグ名の確認 "Condition": { "IpAddress": {"aws:sourceip": 176.32.92.49/32 } } 例例えば API 呼び出し / コンソール利利 用を指定の IP アドレスだけに絞りたい場合に利利 用 注 ) コンソールに関してはログインはできても操作する権限がないという状態になります 33 https://docs.aws.amazon.com/ja_ jp/iam/latest/userguide/reference_ policies_ variables.html
Condition の演算 子 文字列列 完全 一致 部分 一致など 数値 一致 以上 以下など 日付および時間 一致 日付の後先など Boolean バイナリ IP アドレス 指定のアドレス 指定範囲など Amazon リソース名 完全 一致 部分 一致など...IfExists 上記演算 子に付与 変数がない場合無視 条件キーの有無 "Condition": { "StringEquals": {"ec2:resourcetag/stack": prod"} } "Condition": { streq": {"ec2:resourcetag/stack": prod"} } 34 https://docs.aws.amazon.com/ja_ jp/iam/latest/userguide/reference_ policies_ elements.html#condition
35 複数 Condition の OR と AND AND AND "Condition" : { "DateGreaterThan" : { "aws:currenttime" : "2013-07- 16T12:00:00Z" }, "DateLessThan": { "aws:currenttime" : "2013-07- 16T15:00:00Z" }, "IpAddress" : { "aws:sourceip" : ["192.168.176.0/24","192.168.143.0/24"] } } Condition 下のブロックは AND 演算 子に対する値は OR この例例の場合 2013/7/16 の 12:00 から 15:00 の間に ソース IP192.168.176.0/24 もしくは 192.168.143.0/24 のネットワークからアクセスしたリクエスト を意味する OR
アクセス可否の決定ロジック アクセス制御の条件は複数設定可能 ユーザー グループごとに複数 相反する条件の設定も可能 すべてのアクセスはデフォルトで拒否 ( デフォルト Deny) アクセス権限に Allow の条件があった場合 アクセス許可 ただしアクセス権限に 1 つでも Deny の条件があった場合 アクセス拒否 ( 明 示的な Deny) デフォルト Deny < Allow < 明 示的な Deny グループの Statement Allow ユーザーのStatement 該当なし ( デフォルトDeny) 結果 :Allow グループの Statement Deny ユーザーの Statement Allow 結果 :Deny 36
IAM と連携する AWS サービス 連携のカテゴリ アクションレベルの アクセス許可 リソースレベルの アクセス許可 リソースベースの アクセス許可 タグベースの アクセス許可 一時的なセキュリティ 認証のサポート 内容 ポリシーの Action エレメントでの個別のアクションの指定をサポート ポリシーの Resource 要素での個別のリソースの指定 (ARN を使 用 ) をサポートする 1 つ以上の API がある IAM ユーザー グループ ロールに加えて サービスのリソースにもポリシーをアタッチ可能 Condition エレメントのリソースタグのテストをサポート ユーザーは AssumeRole または GetFederationToken などの AWS STS API を呼び出して取得した 一時的なセキュリティ認証情報を使 用してリクエストを作成 37 http://docs.aws.amazon.com/ja_ jp/iam/latest/userguide/using_ SpecificProducts.html
IAM と連携する AWS サービス サポートされるアクセス権限のカテゴリは各 AWS サービスによって異異なるため ドキュメントにて最新の状況を確認するようにして下さい コンピューティングサービスの例例 (2016 年年 9 月現在 ) サービスおよび関連する IAM 情報 次のアクセス権限をサポートします アクションレベル リソースレベル リソースベース タグベース 一時認証情報 Amazon Elastic Compute Cloud (Amazon EC2) Yes Yes¹ No はい ¹ Yes Amazon EC2 Container Service (Amazon ECS) Yes Yes² No No Yes Auto Scaling Yes No No No Yes Elastic Load Balancing Yes Yes³ No No Yes AWS Lambda Yes Yes⁴ Yes No Yes 38 http://docs.aws.amazon.com/ja_ jp/iam/latest/userguide/using_ SpecificProducts.html
IAM と連携する AWS サービス リソースレベルやタグベースのアクセス許可は 各 AWS サービスのアクションによりサポート状況が異異なるためドキュメントでの確認を 行行ってください Amazon EC2 API アクションでサポートされるリソースレベルのアクセス許可の例例 (2016 年年 9 月現在 ) Stopinstance がサポートするリソースと条件キー 39 https://docs.aws.amazon.com/ja_ jp/awsec2/latest/userguide/ec2- supported- iam- actions- resources.html
ユーザーベースとリソースベース ポリシーは ユーザーやグループ以外に リソースにも紐紐付け可能 S3 バケット SQS のキューなどに対してポリシーが適 用可能 特定の IP アドレスからしかアクセスできないバケット などの設定が可能 ユーザーベース リソースベース 40
リソースベースのポリシーによるクロスアカウントアクセス AWS アカウントを超したアクセス許可 S3,SQS,SNSなどで利利 用可能 1.Account Aのバケットに以下のポリシーを設定 { } "Statement" : { "Effect":"Allow", "Principal" : { AWS : arn:aws:iam::account B の番号 :root" }, "Action":"s3:*", "Resource":"arn:aws:s3:::mybucket/*" } Principal は 実 行行をしているユーザーに対する条件設定 2.Account B に mybucket へアクセス権限付与 http://docs.aws.amazon.com/ja_ jp/iam/latest/userguide/roles- resourcebasedpolicies- compare.html 41
IAM ポリシーの作成を 支援するツール群 AWS Policy Generator:http://awspolicygen.s3.amazonaws.com/policygen.html AWS のサービスについて 必要情報を 入 力力するとポリシー 文書を 自動作成してくれるツール ポリシー 言語の 文法チェック機能 ポリシー保管時にポリシー 言語の 文法チェック 自動フォーマットを実施 Validate Policy により明 示的な確認が可能 IAM Policy Validator 自動的に既存の IAM ポリシーを調べ IAM ポリシーの 文法に準拠しているか確認 ポリシーに対する推奨の変更更を提 示 Policy Validator を使 用できるのは 準拠していないポリシーがある場合のみ IAM Policy Simulator:https://policysim.aws.amazon.com/home/index.jsp 42 プロダクションへの実装前にポリシーをテスト可能 パーミッションのトラブルシューティング Condition ポリシー変数 リソースベースのポリシーを 入れたテスト
アジェンダ IAMの概要 IAMによる認証 (Authentication) IAMによる権限設定 (Authorization) IAMによる監査 (Audit) AWS Security Token ServiceとIAMロール Federation まとめ 43
ユーザーのアクティビティの記録 AWS CloudTrail は AWS アカウントで利利 用された API Call を記録し S3 上にログを保存するサービス AWS のリソースにどのような操作が加えられたか記録に残す機能であり全リージョンでの有効化を推奨 適切切なユーザーが与えられた権限で環境を操作しているかの確認と記録に使 用 記録される情報には以下のようなものが含まれる API を呼び出した 身元 (Who) API を呼び出した時間 (When) API 呼び出し元の Source IP(Where) 呼び出された API(What) API の対象となる AWS リソース (What) 管理理コンソールへのログインの成功 失敗 (root アカウントの失敗は 2016 年年 9 月現在未サポート ) 44
Access Advisor と Service Last Accessed Data IAM エンティティ ( ユーザー グループ ロール ) が 最後に AWS サービスにアクセスした 日付と時刻を表 示する機能 IAM の最 小限の特権に関する設定に利利 用 IAM ポリシー内で未使 用または最近使 用されていないアクセス許可を識識別 未使 用のサービスに関するアクセス許可を削除したり 類似の使 用パターンを持つユーザーをグループに再編成 アカウントのセキュリティを改善 Service Last Accessed Data は下記のリージョンでは 2016 年年 9 月現在提供されていません 中国 ( 北北京 ) (cn- north- 1) AWS GovCloud (US) (region- gov- us- west- 1) 45
Service Last Accessed Data の利利 用例例 ユーザーや グループ ロールに与えられた権限で利利 用されていないものを発 見見 IAM ポリシーの利利 用状況と利利 用しているエンティティの識識別 46 IAM ポリシーを利利 用しているのが誰で最後にアクセスしたのがいつか容易易に識識別可能
IAM 認証情報レポート (Credential Report) ユーザーの作成 日時 最後にパスワードが使われた 日時 最後にパスワードが変更更された 日時 MFA を利利 用しているか Access Key が Active か Access Key のローテートした 日時 Access Key を最後に使 用した 日時 Access Key を最後に利利 用した AWS サービス 証明書は Active か 証明書のローテートした 日時 47
AWS Config の IAM サポート IAM の User Group Role Policy に関して変更更履履歴 構成変更更を管理理 確認することが可能 The image cannot be displayed. Your computer may not have enough memory to open the image, or the image may have been corrupted. Restart your computer, and then open the file again. If the red x still appears, you may have to delete the image and then insert it again. 48
アジェンダ IAMの概要 IAMによる認証 (Authentication) IAMによる権限設定 (Authorization) IAMによる監査 (Audit) AWS Security Token ServiceとIAMロール IAMによるFederation まとめ 49
IAM ロールとは? AWS サービスやアプリケーション等 エンティティに対して AWS 操作権限を付与するための仕組み 例例えば実 行行するアプリケーションにロールを付与する事で そのアプリケーションから AWS を操作出来るようになる IAM ユーザーやグループには紐紐付かない 設定項 目は ロール名と IAM ポリシー EC2 ほか Beanstalk,Data Pipeline などでも利利 用 50
EC2 には IAM ロールを利利 用 EC2 のような AWS サービスに対して AWS 操作権限を付与するための仕組み IAM ユーザーの認証情報のようなものを OS/ アプリケーション側に持たせる必要がなく 認証情報の漏漏えいリスクを低減可能 IAM ロールによる認証情報は AWS が 自動的にローテーション IAM ロール利利 用の利利点 EC2 上のアクセスキーの管理理が容易易 認証情報は STS(Security Token Service) で 生成 自動的に認証情報のローテーションが 行行われる EC2 上のアプリケーションに最低権限を与えることに適している AWS SDK 及び AWS CLI のサポート IAM ユーザーの認証情報を外部に漏漏えいしてしまうリスクを低減させる IAM Role IAM ユーザー利利 用 プログラム IAM ロール利利 用 プログラム 認証情報を EC2 内に持たせる 認証情報の保管 ローテーション等の検討が必要 IAM ロールによる権限は EC2 上に恒久的に保管されるものではなくテンポラリ ローテーション等は 自動で 行行われる メタデータ 51 http://docs.aws.amazon.com/ja_ jp/iam/latest/userguide/roles- resourcebasedpolicies- compare.html
メタデータからの認証情報取得 IAM Role を設定した EC2 インスタンス内から取得 curl http://169.254.169.254/latest/meta- data/iam/security- credentials/ec2_ Admin { "Code" : "Success", "LastUpdated" : "2016-09- 18T05:15:39Z", "Type" : "AWS- HMAC", "AccessKeyId" : "ASIAJY2YJ5S2ZYK25BLQ", "SecretAccessKey" : "Kp1NblZ7mov/4ln7GLu8dqvN5GztXXXXXXXXXXXXXX", Role 名 "Token" : "AQoDYXdzELP//////////wEa0ANmvPx2CpTfOWjuPSMQ+/XXXXXXXXXXXXXXXX", "Expiration" : "Expiration" : "2016-09- 18T11:27:40Z" } 有効期限 STS のセッショントークン 52
AWS SDK を利利 用する場合 認証情報取得と有効期限切切れ前の再取得を 自動的に実施可能 AWSCredentials credentials = new BasicAWSCredentials( アクセスキー, シークレットキー ID ); AmazonEC2 ec2 = new AmazonEC2Client(credentials); ec2.describeinstances(); AmazonEC2 ec2 = new AmazonEC2Client(); ec2.describeinstances(); IAM Role 利利 用後 AWS CLI は IAM Role に対応済み http://aws.amazon.com/jp/cli/ IAM Role 適 用のインスタンス上では 認証情報の設定が不不要 53
AWS Security Token Service(STS) とは 一時的に利利 用するトークンを発 行行するサービス 動的に IAM ユーザーを作成し ポリシーを適 用できる IAM Role for EC2 は この STS を利利 用 54
Temporary Security Credentials とは AWS に対する 一時的な認証情報を作成する仕組み 期限付きの認証情報 ( 認証チケット ) ユーザーに対して 以下の 3 つのキーを発 行行 アクセスキー :(ASIAJTNDEWXXXXXXX) シークレットアクセスキー :(HQUdrMFbMpOHJ3d+Y49SOXXXXXXX) セッショントークン (AQoDYXdzEHQakAOAEHxwpf/ozF73gmp9vZDWDPkgFnzwSG/ 3ztBw9Z4IUslNNn503+3SeN0nwI3wcdLR8y8Ulv9cnksMrBGjRVrJl2xg+/ CRnI9nJ1tteHp6yso3sP0BVvnxLpNwyIUpHrcTHt+8v2P6Y9/VX2zl8Hc/cy6La0r1/ GuiHb9NEwqt6VIgjPWCZzHXzX8XsUObKhMnAUkY2IdTMrNKXcqVk8VbC6BNTqWsMIIfQPz9fDjKK1ifA FmHVSWvUxio94n+ebXXpy1NuHnt5JEGV34VPLMsrpZ86b+eulKNE1suoQ8TM5E1O66rYwizkq6w +cjovunmxg6esasbvolsreiolip+se7cx1i8grrsg9/ KT59GYTlhTzStjjFroCAqZu4KYplGUMCDl1g0twrdXeymsu3GG70Qwu0wSi3WjkW8VPiajahJXCEgp6gI gxelwkrbo01h5y9nndeyqaq8ocogbpvru+ds9lms9shasximnnvein +1FVkXXXXXXXXXXXXXXXXXXXXXXXX) 55
IAM の権限階層 AWS アカウント 全てのサービスへのアクセス 課 金金設定へのアクセス 管理理コンソールおよび API へのアクセス カスタマーサポートへのアクセス IAM ユーザー 許可されたサービスへのアクセス 管理理コンソールおよび API へのアクセス カスタマーサポートへのアクセス DO NOT USE after initial set- up ドアキー 従業員 バッジ Temporary Security Credentials / IAM Roles 許可されたサービスへの 一時的なアクセス 管理理コンソールおよび API へのアクセス ホテルキー 56
認証情報を取得する 方法 Session Access Key Id Secret Access Key Session Token Expiration Temporary Security Credentials Self- sessions (GetSessionToken) Federated sessions (GetFederationToken) Assumed- role sessions AssumeRole AssumeRoleWithWebIdentity AssumeRoleWithSAML 57
認証情報取得のための API STS で利利 用できる API Action 概要 GetSessionToken GetFederationToken AssumeRole AssumeRoleWithWebIdentity AssumeRoleWithSAML 自 身で利利 用する IAM ユーザーの temporary security credentials を取得するためのアクション 認証を受けた Federated ユーザーの temporary security credentials を取得するためのアクション 既存の IAM ユーザーの認証情報を 用いて IAM Role の temporary security credentials を取得するためのアクション Amazon や Facebook Google による承認情報を使 用してロールを引き受け temporary security credentials を取得するためのアクション idp による認証と SAML のアサーションを AWS にポストすることでロールを引き受け temporary security credentials を取得するためのアクション 58 http://docs.aws.amazon.com/sts/latest/usingsts/welcome.html
認証情報の有効期限 Session Access Key Id Secret Access Key Session Token Expiration トークンのタイプにより有効期限は様々 [Min/Max/Default] Self (Account) [15 min / 60 min / 60 min] Self (IAM User) [15 min / 36 hrs / 12 hrs] Federated [15 min / 36 hrs / 12 hrs] Assumed- role [15 min / 60 min / 60 min] 発 行行したチケットは延 長や期間短縮は出来ない 即座にアクセス制御したい場合は 発 行行に使 用した IAM ユーザーや IAM ロールの権限を変更更する 59
AWS STS in all AWS regions STS のエンドポイントが全リージョンに拡張 デフォルトでは STS はグローバルサービスとして利利 用 単 一エンドポイント :https://sts.amazonaws.com IAM の Account Settings より各リージョンで STS 機能をアクティベート可能 レイテンシーの低減 冗 長性の構築 有効化したリージョンでの CloudTrail の使 用を忘れない 60 http://docs.aws.amazon.com/ja_ jp/sts/latest/usingsts/sts- enableregions.html
ユースケース : IAM ロールによるクロスアカウントアクセス あるアカウントのユーザーに別のアカウントの IAM ロールに紐紐づける機能 例例えば開発アカウントを使って 本番環境の S3 データを更更新するようなケースで利利 用 開発アカウント 本番アカウント AssumeRole 認証情報 開発アカウント 用 ロール 開発者アカウント 用ロールの 権限でアクセス 61 http://docs.aws.amazon.com/ja_ jp/iam/latest/userguide/roles- walkthrough- crossacct.html
IAM ロールによるクロスアカウントアクセスの動作 開発アカウント Acct ID: 123456789012 開発者 A(IAM User) 開発者 A のアクセスキーによる認証 S3- role を引き受け 一時的なアクセスキーを取得 本番アカウント Acct ID: 111122223333 STS s3- role s3- role に付与されているポリシー { "Statement": [ { "Effect": "Allow", "Action": s3:*", "Resource": "*" } ] } 一時的なアクセスキーによる S3API の呼び出し { "Statement": [{ "Effect": "Allow", "Action": sts:assumerole", "Resource": "arn:aws:iam::111122223333:role/s3- role" } ] } 本番アカウントの s3- role の引き受けを許可するポリシーを開発者 A に設定 { "Statement": [{ "Effect":"Allow", "Principal":{"AWS":"arn:aws:iam::123456789012:root"}, "Action":"sts:AssumeRole" } ] } S3- role を誰が引き受けられるか定義したポリシーを s3- role に設定 62
クロスアカウントアクセスのための MFA 保護 AWS アカウント間でのアクセスのための MFA 保護を追加する機能 AWS マネージメントコンソールで role を作成する際に Require MFA のチェックボックスを選択することで設定可能 MFA 認証されたユーザーのみが認証情報を受けとることが可能に AssumeRole GetSessionToken { "Version": "2012-10- 17", "Statement": [ { "Effect": "Allow", "Principal": {"AWS": "Parent- Account- ID"}, "Action": "sts:assumerole", "Condition": {"Null": {"aws:multifactorauthage": false}} } ] } 63 http://docs.aws.amazon.com/iam/latest/userguide/mfaprotectedapi.html
Switch Role IAM ユーザーからクロスアカウントアクセス 用 IAM ロールにコンソールから切切替が可能 必ずしも別アカウントである必要はなく 同じアカウントでも OK 必要な時のみ IAM ユーザーの権限を 昇格 させる IAM ユーザーには読み取り権限のみを付与 IAM ロールには更更新権限を付与 https://aws.amazon.com/blogs/aws/new- cross- account- access- in- the- aws- management- console/ 64
アジェンダ IAMの概要 IAMによる認証 (Authentication) IAMによる権限設定 (Authorization) IAMによる監査 (Audit) AWS Security Token ServiceとIAMロール IAMによるFederation まとめ 65
Identity Federation(ID 連携 ) とは 企業 組織の認証機能と AWS の認証を紐紐づける機能 例例えば LDAP 認証したユーザーに対して S3 のアクセス権をつける といった連携が可能 認証したユーザーごとに Temporary Security Credentials( 一時的なアクセスキー ) を発 行行 IAM は OpenID Connect または SAML 2.0 (Security Assertion Markup Language 2.0) と互換性のある IdP をサポート 66
ユースケース : SAML2.0 ベースの Federation SAML2.0 を使 用した ID フェデレーション 組織内の全員について IAM ユーザーを作成しなくても ユーザーは AWS を利利 用可能 組織で 生成した SAML アサーションを認証レスポンスの 一部として使 用し 一時的セキュリティ認証情報を取得 ユーザーは 一時的セキュリティ認証情報で AWS のリソースにアクセス 67
SAML2.0 ベースの Federation 動作例例 Enterprise (Identity Provider) AWS (Service Provider) ユーザーの認証 Identity provider AssumeRoleWithSAML の呼び出し S3 Bucket with Objects Amazon DynamoDB Amazon EC2 Active Directory IdP に認証情報の リクエスト 認証応答 の受け取り 一時的な認証情報の受け渡し AWS Resources Client Application APP 認証情報を 用いた API の呼び出し 68 https://docs.aws.amazon.com/ja_ jp/iam/latest/userguide/id_ roles_ providers_ saml.html
ユースケース : SAML2.0 による SSO Federation SAML 2.0 互換 IdP および IAM ロールを使 用した管理理コンソールへのフェデレーションアクセス AssumeRoleWithSAML API を直接呼び出す代わりに AWS SSO エンドポイントを使 用 エンドポイントはユーザーの代わりに API を呼び出し URL を返すと それによってユーザーのブラウザーが AWS マネジメントコンソールへ 自動的にリダイレクト 69
SAML による Console Federation の動作例例 Enterprise (Identity Provider) AWS (Service Provider) Identity provider 認証応答 の受け取り 新しい AWS のサインイン エンドポイントに対して SAML アサーションをポスト AWS SSO Endpoint STS エンドポイントが 一時的な認証情報をリクエストしサインイン URL を作成 Corporate identity store サインイン URL をクライアントにリダイレクトとして送信 内部ポータルへのアクセス ポータルは IdP としても機能 70 Browser Interface ブラウザが AWS 管理理コンソールへリダイレクト 認証レスポンスの 一部として コンソールが使 用される時間を制限する時間枠 およびユーザーが認証情報を更更新する前にコンソールにアクセスできる最 大時間 ( 最 大 12 時間 ) を指定することができます https://docs.aws.amazon.com/ja_ jp/iam/latest/userguide/id_ roles_ providers_ enable- console- saml.html
ユースケース : Console Federation (Sample - http://aws.amazon.com/code/4001165270590826) 既存の IdP による管理理コンソールへのシングルサインオン STS より 一時的な認証情報を取得するためのカスタムフェデレーションブローカーを利利 用 AssumeRole API の利利 用 71
Console Federation の動作例例 Customer (IdP) List RolesResponse AWS (Relying Party) ユーザーの認証 Federation ロールを選択でき proxy るcombo Boxの作成 List RolesRequest AssumeRole Request Assume Role Response Temp Credentials Access Key Secret Key Session Token 72 Corporate directory Browser Interface AD グループの提 示 ログインURLの作成 コンソールへのリダイレクト 10 URL にアクセス Federation proxy AWS Management Console AssumeRoleRequest() を利利 用するため Proxy 上の IAM ユーザーのクレデンシャルを利利 用 IAM ユーザーの権限は ListRoles と assume role を 行行えるものが必要 Proxy はこのクレデンシャルをセキュアに保管する必要がある
Console Federation のメリット アカウント管理理が統合され リスクが低減する 既存のユーザ情報をそのまま利利 用 既存の権限ベースでの管理理が可能 既存と同様のポリシーの利利 用が可能 アカウントロックポリシーや パスワード管理理ポリシー 入退社など 一元的な管理理が可能 イントラネットからのみアクセス可能なログイン画 面 73
ユースケース: Web Identity Federation モバイルアプリから 一時的なAWSセキュリティ認証情報を必要に 応じて動的にリクエスト 認証を確認するサーバが不不要 74 例例えばスマートフォンアプリとS3だけでシステムが作成可能 現在Google,Facebook,Amazon(Login with Amazon), twitter, Amazon Cognito及びOIDC準拠のIdPに対応
モバイルアプリへの Amazon Cognito の使 用例例 エンドユーザー アプリケーションの利利 用 ID Token から Cognito token の取得 リダイレクトして認証の実施 ID Token の取得 アプリケーション Cognito token を 用い STS より認証情報の取得 Security Token Service Cognito STS の認証情報を 用いて AWS サービスにアクセス DynamoDB OpenID Connect 準拠の IdP us- east- 1 Developerʼ s AWS Account https://docs.aws.amazon.com/ja_ jp/iam/latest/userguide/id_ roles_ providers_ oidc_ cognito.html 75
Federation/SSO を提供するパートナーソリューション http://aws.amazon.com/jp/iam/partners/ 76
アジェンダ IAMの概要 IAMによる認証 (Authentication) IAMによる権限設定 (Authorization) IAMによる監査 (Audit) AWS Security Token ServiceとIAMロール IAMによるFederation まとめ 77
IAM のベストプラクティス 1. AWS アカウント ( ルート ) のアクセスキーをロックする 2. 個々の IAM ユーザーを作成する 3. IAM ユーザーへのアクセス許可を割り当てるためにグループを使います 4. 最 小限の特権を認める 5. ユーザーのために強度度の 高いパスワードポリシーを設定する 6. 特権ユーザーに対して MFA を有効化する 7. Amazon EC2 インスタンスで作動するアプリケーションに対し ロールを使 用する 8. 認証情報を共有するのではなく ロールを使って委託する 9. 認証情報を定期的にローテーションする 10. 不不要な認証情報の削除 11. 追加セキュリティに対するポリシー条件を使 用する 12. AWS アカウントのアクティビティの監視 13. IAM ベストプラクティスについてのビデオ説明 78 http://docs.aws.amazon.com/ja_ jp/iam/latest/userguide/iambestpractices.html
まとめ IAM を利利 用することで よりセキュアに AWS サービスを利利 用できます 権限を適切切に設定することで セキュリティが向上し オペレーションミスも低減できます STS をうまく利利 用すると AWS サービスをアプリケーションやモバイルから直接扱えます サーバコストの削減が可能 IAM 自体には利利 用料料が必要ありません 積極的に活 用を! 79
追加のリソース IAM ドキュメント群 http://aws.amazon.com/jp/documentation/iam/ IAM ベストプラクティス http://docs.aws.amazon.com/iam/latest/userguide/iambestpractices.html AWS Security Blog http://blogs.aws.amazon.com/security/ 80
オンラインセミナー資料料の配置場所 AWS クラウドサービス活 用資料料集 http://aws.amazon.com/jp/aws- jp- introduction/ 81 AWS Solutions Architect ブログ 最新の情報 セミナー中の Q&A 等が掲載されています http://aws.typepad.com/sajp/
公式 Twitter/Facebook AWS の最新情報をお届けします @awscloud_ jp 検索索 もしくは http://on.fb.me/1vr8ywm 最新技術情報 イベント情報 お役 立立ち情報 お得なキャンペーン情報などを 日々更更新しています! 82
AWS の導 入 お問い合わせのご相談 AWS クラウド導 入に関するご質問 お 見見積り 資料料請求をご希望のお客様は 以下のリンクよりお気軽にご相談ください https://aws.amazon.com/jp/contact- us/aws- sales/ 83 AWS 問い合わせ で検索索してください