AWS Black Belt Techシリーズ  AWS IAM
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

AWS Black Belt Techシリーズ AWS IAM

on

  • 2,433 views

AWSマイスターシリーズ Black belt

AWSマイスターシリーズ Black belt
Identity and Access Management (IAM)

Statistics

Views

Total Views
2,433
Views on SlideShare
2,416
Embed Views
17

Actions

Likes
18
Downloads
49
Comments
0

3 Embeds 17

http://www.slideee.com 9
https://twitter.com 7
http://blog.hatena.ne.jp 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

AWS Black Belt Techシリーズ AWS IAM Presentation Transcript

  • 1. AWS Identity and Access Management AWS  Black  Belt  Tech  Webinar  2014  (旧マイスターシリーズ) アマゾンデータサービスジャパン株式会社 セキュリティコンサルタント  ⾼高⽥田  智⼰己
  • 2. アジェンダ •  IAMの概要 •  IAMポリシー •  IAMロール •  AWS  Security  Token  Service •  まとめ
  • 3. アジェンダ •  IAMの概要 •  IAMポリシー •  IAMロール •  AWS  Security  Token  Service •  まとめ
  • 4. AWS  Identity  and  Access  Management  (IAM) •  AWS操作をよりセキュアに⾏行行うための認証・認可の仕組み •  AWS利利⽤用者の認証と、アクセスポリシーを管理理 §  AWS操作のためのグループ・ユーザー・ロールの作成が可能 §  グループ、ユーザーごとに、実⾏行行出来る操作を規定できる §  ユーザーごとに認証情報の設定が可能 開発チーム 運用チーム
  • 5. IAM動作イメージ APIやマネジメントコンソールからの アクセスに対して、権限をチェック 全操作可能 S3はすべて 操作可能 S3参照だけ
  • 6. IAM  ユーザー •  AWS操作⽤用のユーザー –  1AWSアカウントで5000ユーザーまで作成可能 •  ユーザーごとに設定可能な情報 –  ユーザー名 •  IAMユーザーの識識別と、マネジメントコンソールへのログインに使⽤用 •  64⽂文字までのアルファベット、数字、+=,.@-‐‑‒_̲ –  パス(オプション) •  ユーザーにオプションとしてセットできる情報 •  パスを元にユーザーの検索索が可能 •  組織階層やプロジェクトなどをセット    例例)/aws/sa/   •  512⽂文字までのBasic  Latin⽂文字(アルファベット、数字、!"#$%&'()=~∼|-‐‑‒^@`̀{[}]*:+;?_̲) •  開始と終了了が/であること –  所属グループ •  10のグループまで設定可能 –  パーミッション •  AWSサービスへのアクセス権限 •  JSON形式でポリシーを記述 –  詳細は後述
  • 7. IAM  グループ •  IAMユーザーをまとめるグループ –  1AWSアカウントで100グループまで作成可能 •  グループに設定可能な情報 –  グループ名 •  グループの識識別に使⽤用 –  パス(オプション) •  組織階層などをセット    例例)/aws/   –  パーミッション •  グループに設定したパーミッションは、IAMユーザーに付与したパーミッションと同時に評価 •  評価⽅方法は後述 Group
  • 8. IAMで使⽤用する認証情報(1) §  アクセスキーID/シークレットアクセスキー §  REST,Query形式のAPI利利⽤用時の認証に使⽤用 §  2つまで⽣生成可能 §  Active/Inactiveの切切り替え §  情報の置き場には注意 §  GitHUB §  AMIの中への埋め込み §  ワード⽂文書等に記述 §  ⾮非暗号化メールの中に記述 §   X.509  Certificate §  SOAP形式のAPIリクエスト⽤用 §  OpenSSLなどで証明書を作りアップロード
  • 9. IAMで使⽤用する認証情報(2) §  AWSマネジメントコンソールへのログインパスワード §  デフォルトは未設定(ログインできない) §  128⽂文字までのBasic  Latin⽂文字 §  パスワード変更更時のポリシー設定が可能 §  AWSアカウントごとに設定 §  最低パスワード⻑⾧長、⼤大⽂文字⼩小⽂文字等 §  MFA(多要素認証) §  ハードウェアMFAと仮想MFAのいずれかを利利⽤用可能 §  ハードウェアMFA §  Gemalto社からAWS⽤用のデバイスを購⼊入 §  Tokenタイプ §  カードタイプ  (NEW!  2014/5/29) §  http://onlinenoram.gemalto.com/ §  仮想MFA §  スマートフォンやPCにインストール §  Google  Authenticatorなど、TOTP実装のソフトが利利⽤用可能 New!
  • 10. マネジメントコンソールへのログインについて •  IAMユーザーは、AWSアカウントごとに⽤用意された専⽤用URLからログイン •  デフォルトは、URLにAWSアカウント名を⼊入れたもの •  「Account  Alias」でユーザーフレンドリーな名前を指定可能 –  ただしS3と同様早い者勝ち
  • 11. AWSアカウントのシークレットアクセスキーについて •  セキュリティ強化の⼀一環として、2014年年4⽉月21⽇日をもって、AWS(ルート) アカウントの“既存の”シークレットアクセスキーを取得することができな くなりました。 •  もし現在利利⽤用中のAWSアカウントのシークレットアクセスキーを紛失した 場合は新しいアクセスキーを作成する必要があります。 •  ルートアカウントのアクセスキーを利利⽤用する代わりに、アクセスキーを 持ったIAMユーザーを作成するやり⽅方に変更更するようお勧め致します。
  • 12. アジェンダ •  IAMの概要 •  IAMポリシー •  IAMロール •  AWS  Security  Token  Service •  まとめ
  • 13. IAM  ポリシー •  AWSアクセスに対する権限設定 •  JSON形式のアクセスポリシー⾔言語でアクセス条件を記述 –  http://docs.aws.amazon.com/ja_̲jp/IAM/latest/UserGuide/AccessPolicyLanguage.html {    "Statement            {                "Effect":  "Allow",                "Action":  [                    "  s3:ListBuckets  ",                    "  s3:Get  *  "                ],                            "Resource":  [                    "  arn:aws:s3:::mybucket  "                ],                "Condition":  {                    "IpAddress":  {                        "aws:SourceIP":  [“176.32.92.49/32“]                    }                }            }    ] } このブロックを1条件として、 アクセス権限をチェック
  • 14. アクセス条件の記述            {                "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系 の操作を許可する」という意味
  • 15. Action •  「Action」は、操作⾃自体に対する設定 §  ec2:runInstances §  ec2:AttachVolume §  s3:CreateBucket §  s3:DeleteObject §  ワイルドカード指定可能 §  例例)ec2:Describe*   §  指定の操作以外の場合は「NotAction」を使⽤用 §  例例)“NotAction”:  “iam:*”    (IAMの操作以外を許可する)  "Action":  [                    "  s3:ListBuckets",                    "  s3:Get*"  ]          
  • 16. Resource •  「Resource」は操作対象を指定する設定 §  EC2インスタンス §  EBSボリューム §  S3バケット §  S3オブジェクト •  ARN(Amazon  Resource  Name)で記述 §  “arn:aws:”で始まる⽂文字列列 §  arn:aws:service:region:account:resource §  例例)  arn:aws:s3:::mybucket §  http://docs.aws.amazon.com/general/latest/gr/aws-‐‑‒arns-‐‑‒and-‐‑‒namespaces.html •  指定リソース以外の場合は「NotResource」を使⽤用 –  例例)  “NotResource”  :  “arn:aws:s3:::hoge”  "Resource":  [        "  arn:aws:s3:::mybucket"  ]
  • 17. Resourceが指定できるAWSサービス •  AWS  IAM •  Amazon  EC2 •  Amazon  RDS •  Amazon  Route53 –  Hostedzone,change •  Amazon  S3 –  bucket,object •  Amazon  Glacier –  vault •  AWS  Storage  Gateway –  gateway,volume,target •  AWS  CloudTrail http://docs.aws.amazon.com/IAM/latest/UserGuide/Using_SpecificProducts.html •  Amazon  SimpleDB –  domain •  Amazon  Redshift •  Amazon  Kinesis –  stream •  Amazon  SNS –  topic •  Amazon  SQS –  queue •  Amazon  DynamoDB –  Table,  index •  Amazon  SWF –  domain •  AWS  Elastic  Beanstalk •  AWS  CloudFomration •  AWS  OpsWorks •  Amazon  CloudSearch –  domain •  Amazon  Elastic  Transcoder •  AWS  Marketplace 2014/6現在
  • 18. Amazon  EC2のResource指定 •  以下のリソースの指定が可能 –  VPC –  VPC  Peering  connection –  インスタンスID –  イメージ –  Key  pair –  Network  Interface –  Subnet –  Route  table –  Placement  group •  リソース指定のできるActionに関してはマニュアルを参照 –  AcceptVpcPeeringConnection,  CreateVpcPeeringConnection,  DeleteVpcPeeringConnection –  RebootInstances,StartInstances,StopInstances,TerminateInstaces,  RunInstances –  AttachVolume,DeleteVolume,DetachVolume –  等々 •  より詳細な条件(特定のタグのインスタンス等)については、Conditionで指定(後述)  "Resource":  [        arn:aws:ec2:::instance/i-‐‑‒123abc"  ] http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-‐‑‒policies-‐‑‒for-‐‑‒amazon-‐‑‒ec2.html http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ec2-‐‑‒api-‐‑‒permissions.html –  Security  Group –  Network  ACL –  Customer  gateway –  Internet  gateway –  DHCP  Options  set –  インスタンスプロファイル名 –  プレースメントグループ名 –  スナップショットID –  EBSボリュームID NEW!  2013/11 2014/6現在
  • 19. Condition •  Resourceに対するActionを許可(もしくは拒否)するかどうかの 条件設定 •  ポリシー変数(条件キー)に対して、演算⼦子を⽤用いて条件を指定 http://docs.aws.amazon.com/ja_̲jp/IAM/latest/UserGuide/AccessPolicyLanguage_̲ElementDescriptions.html#Condition "Condition":  {              "IpAddress":  {"aws:SourceIP":  “176.32.92.49/32“    } } 演算⼦子 ポリシー変数 条件値
  • 20. Conditionの演算⼦子 •  ⽂文字列列 –  完全⼀一致、部分⼀一致など •  数値 –  ⼀一致、以上、以下など •  ⽇日付および時間 –  ⼀一致、⽇日付の後先など •  ブール •  IP  アドレス –  指定のアドレス、指定範囲など •  Amazon  リソース名 –  完全⼀一致、部分⼀一致など •  ...IfExists –  上記演算⼦子に付与。変数がない場合無視 •  条件キーの有無 http://docs.aws.amazon.com/ja_̲jp/IAM/latest/UserGuide/AccessPolicyLanguage_̲ElementDescriptions.html#Condition "Condition":  {              "StringEquals":         {"ec2:ResourceTag/stack": “prod"} } "Condition":  {              “streq":         {"ec2:ResourceTag/stack": “prod"} }
  • 21. ポリシー変数 •  全てのリクエストで利利⽤用できる変数 –  aws:CurrentTime –  aws:EpochTime –  aws:TokenIssueTime –  aws:principaltype –  aws:SecureTransport –  aws:SourceIp –  aws:UserAgent –  aws:userid –  aws:username •  AWSサービス固有の変数 –  s3:prefix –  sns:Protocol –  ec2:ResourceTag/tag名  など "Condition":  {              "IpAddress":         {"aws:SourceIP":             “176.32.92.49/32“} } 例例えば、API呼び出し/コンソール利利⽤用を指定 のIPアドレスだけに絞りたい場合に利利⽤用。 注)コンソールに関してはログインはできて も操作する権限がないという状態になります。
  • 22. EC2リソース⽤用のポリシー変数 •  ec2:AccepterVpc •  ec2:AvailabilityZone •  ec2:EbsOptimized •  ec2:ImageType •  ec2:InstanceProfile •  ec2:InstanceType •  ec2:Owner •  ec2:Public •  ec2:ParentSnapshot •  ec2:PlacementGroup •  ec2:PlacementGroupStrategy •  ec2:Region •  ec2:RequesterVpc •  ec2:ResourceTag/tag-‐‑‒key •  ec2:RootDeviceType •  ec2:Tenancy •  ec2:VolumeIops •  ec2:VolumeSize •  ec2:VolumeType http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-‐‑‒policies-‐‑‒for-‐‑‒amazon-‐‑‒ec2.html 2014/6現在 "Condition":  {              "StringEquals":         {“ec2:ResourceTag/Name":                         “webserver“} }
  • 23. 複数Conditionの”OR”と”AND” •  Condition下のブロックはAND、演算⼦子に対する値はOR •  この例例の場合、「2013/7/16の12:00から15:00の間に、ソース IP192.168.176.0/24もしくは192.168.143.0/24のネットワークからアクセス したリクエスト」を意味する "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"]            } } OR AND AND
  • 24. AWSサービス Action Resource tag IAM ○ ○ Amazon CloudFront ○ Amazon CloudWatch ○ AWS Data Pipeline ○ Amazon EC2 ○ ○ ○ Amazon ElastiCache ○ Amazon Elastic MapReduce ○ Amazon Elastic Transcoder ○ ○ Amazon RDS ○ ○ ○ Amazon Route 53 ○ ○ Amazon S3 / Glacier ○ ○ Amazon Redshift ○ ○ AWS OpsWorks ○ ○ AWS Storage Gateway ○ ○ Amazon SimpleDB ○ ○ Amazon SES ○ Amazon DynamoDB ○ ○ AWSサービス Action Resource tag Amazon SNS ○ ○ Amazon SQS ○ ○ Amazon VPC ○ ○ ○ Amazon Direct Connect ○ Auto Scaling ○ AWS CloudFormation ○ ○ AWS Elastic Beanstalk ○ ○ AWS CloudHSM Elastic Load Balancing ○ ○ Amazon WorkSpaces AWS Import/Export ○ Amazon Kinesis ○ ○ Amazon AppStream ○ Amazon CloudSearch ○ ○ Amazon SWF ○ ○ ○ Amazon CloudTrail ○ ○ IAMをサポートするAWSサービス http://docs.aws.amazon.com/ja_̲jp/IAM/latest/UserGuide/Using_̲SpecificProducts.html 2014/6現在
  • 25. IAMポリシージェネレーター •  IAMのウィザード内、もしくは単体のサイトで利利⽤用可能 –  http://awspolicygen.s3.amazonaws.com/policygen.html JSONの構⽂文チェックツールも利利⽤用すると便便利利です。 例例) http://pro.jsonlint.com/ https://github.com/zaach/jsonlint
  • 26. IAMポリシーのサンプル(1) {"Version":"2012-‐‑‒10-‐‑‒17",    "Statement":  [      {          "Action":  [  "ec2:CreateSnapshot",                                            "ec2:DeleteSnapshot",                                            "ec2:DescribeSnapshotAttribute",                                          "ec2:DescribeSnapshots"  ],          "Effect":  "Allow",          "Resource":  "*"      }  ]   } EBSバックアップのみ可能 Versionは付与しなければ、 2012-‐‑‒10-‐‑‒17が⾃自動的に追加 される
  • 27. IAMポリシーのサンプル(2) {    "Statement":  [        {                "Action":  [                "ec2:PurchaseReservedInstancesOffering"            ],            "Effect":  "Deny",            "Resource":  [                "*"            ]        }    ] } RI購⼊入を禁⽌止する
  • 28. {"Version":"2012-‐‑‒10-‐‑‒17",      "Statement":  [    {        "Sid":  "AllowGroupToSeeBucketListInTheConsole",        "Action":  ["s3:ListAllMyBuckets",  "s3:GetBucketLocation"],        "Effect":  "Allow",        "Resource":  ["arn:aws:s3:::*"]  },      {        "Sid":  "AllowRootAndHomeListingOfCompanyBucket",        "Action":  ["s3:ListBucket"],        "Effect":  "Allow",        "Resource":  ["arn:aws:s3:::my-‐‑‒company"],        "Condition":{"StringEquals":{"s3:prefix":["","home/"],"s3:delimiter":["/"]}}  },  {          "Sid":  "AllowListingOfUserFolder",        "Action":  ["s3:ListBucket"],        "Effect":  "Allow",        "Resource":  ["arn:aws:s3:::my-‐‑‒company"],        "Condition":{"StringLike":{"s3:prefix":["home/Bob/*"]}}  },  {          "Sid":  "AllowAllS3ActionsInUserFolder",          "Action":["s3:*"],          "Effect":"Allow",        "Resource":  ["arn:aws:s3:::my-‐‑‒company/home/Bob/*"]  }      ] } IAMポリシーのサンプル(3) “my-‐‑‒company”バケット以下 の”home/Bob”以下のみ操作可能 Statementの中で複 数ポリシーを書く場 合は、Sidを他とか ぶらないように設定
  • 29. IAMポリシーのサンプル(4) {"Version":"2012-‐‑‒10-‐‑‒17",      "Statement":  [    {        "Sid":  “StrictBucketLocation",        "Action":  ["s3:CreateBucket"],        "Condition":  {            "StringEquals":  {                    "s3:LocationConstraint":  "ap-‐‑‒northeast-‐‑‒1"                }        },        "Resource":  ["*"],        "Effect":  "Allow"    },    {        "Sid":  "AllowListBucket",        "Action":  ["s3:ListAllMyBuckets",  "s3:GetBucketLocation"],        "Effect":  "Allow",        "Resource":  ["arn:aws:s3:::*"]      }] } 指定のリージョン以外でバ ケットを作成できない
  • 30. IAMポリシーのサンプル(5) {"Version":  "2012-‐‑‒10-‐‑‒17",    "Statement":  [    {          "Action":  ["ec2:StartInstances“,"ec2:StopInstances"],          "Resource":  [                "arn:aws:ec2:*:*:instance/*"            ],            "Effect":  "Allow",            "Condition":{            "StringEquals":{                "ec2:ResourceTag/project":"myapp"          }  }] } 指定のタグ(キー:project,値:myapp)のついた インスタンスのみ起動/停⽌止可能
  • 31. IAMポリシーのサンプル(6) {  "Version":"2012-‐‑‒10-‐‑‒17",      "Statement":[      {          "Effect":"Allow",          "Action":  "rds:CreateDBInstance",          "Resource":"arn:aws:rds:us-‐‑‒east-‐‑‒1:1234567890:db:test*",          "Condition":{"streq":{"rds:DatabaseEngine":"mysql"}},          "Condition":{"streq":{"rds:DatabaseClass":  "db.t1.micro"}}        }] } Mysqlかつt1.microで、“test”で始まる名前のRDSのみ作成可能
  • 32. サポートと請求画⾯面へのアクセスポリシー •  AWSサポートおよび費⽤用請求画⾯面にも、IAMユーザーでアクセス可能 •  サポートは、”support”のアクションを許可 –  使えなくしたい場合は、Denyを使⽤用 •  費⽤用請求画⾯面は以下の⼿手順で設定 –  ルートアカウントでログインして、セキュリティ質問を設定 –  費⽤用請求画⾯面へのアクセスをアクティブ化 –  IAMユーザーに”aws-‐‑‒portal”のアクションを許可 https://aws.amazon.com/jp/premiumsupport/iam/ http://docs.aws.amazon.com/ja_̲jp/IAM/latest/UserGuide/ControllingAccessWebsite.html {“Statement”:  [{        “Action”:  [  “support:*”  ],        “Effect”:  “Allow”,        “Resource”:  “*”  }] }   {"Statement":[{    "Effect":"Allow",    "Action":          [  "aws-‐‑‒portal:ViewBilling",              "aws-‐‑‒portal:ViewUsage"]    "Resource":"*"  }] }
  • 33. ユーザーのStatementユーザーのStatement アクセス可否の決定ロジック •  アクセス制御の条件は複数設定可能 –  ユーザー・グループごとに複数。相反する条件の設定も可能 •  すべてのアクセスはデフォルトで拒否(デフォルトDeny) –  アクセス権限に“Allow”の条件があった場合、アクセス許可 –  ただしアクセス権限に1つでも“Deny”の条件があった場合、アクセス拒否(明⽰示的なDeny) –  デフォルトDeny  <  Allow  <  明⽰示的なDeny グループのStatement Allow 該当なし (デフォルトDeny) 結果:Allow Allow 結果:Deny グループのStatement Deny
  • 34. IAMポリシーシミュレーター •  IAMのウィザード内、IAMユーザーのPermission  tab、もしくは単 体のサイトで利利⽤用可能 https://policysim.aws.amazon.com/home/index.jsp? •  プロダクションへの実装前にポリシーをテスト可能 –  パーミッションのトラブルシューティング –  Conditionの条件を⼊入れたテスト –  ポリシー変数を⼊入れたテスト
  • 35. ユーザーベースとリソースベース •  ポリシーは、ユーザーやグループ以外に、リソースにも紐紐付け可能 •  S3バケット、SQSのキューなどに対してポリシーが適⽤用可能 –  「特定のIPアドレスからしかアクセスできないバケット」などの設定が可能 ユーザーベース リソースベース
  • 36. リソースベースのポリシーによるクロスアカウントアクセス •  AWSアカウントを超したアクセス許可 –  S3,SQS,SNSなどで利利⽤用可能 {      "Statement"  :  {            "Effect":"Allow",            "Principal"  :  {                    “AWS”:“arn:aws:iam::Account  Bの番号:root"            },            "Action":"s3:*",            "Resource":"arn:aws:s3:::mybucket/*"      } } 1.Account  Aのバケットに以下のポリシーを設定 2.Account  Bに、mybucketへアクセス権限付与 Principalは、実⾏行行を しているユーザーに 対する条件設定
  • 37. ポリシーの⽂文字数制限 •  IAMユーザー –  付与したすべてのポリシーの⽂文字数合計が2,048⽂文字以下 •  IAMグループ –  付与したすべてのポリシーの⽂文字数合計が5,120⽂文字以下 •  IAMロール –  付与したすべてのポリシーの⽂文字数合計が10,240⽂文字以下 http://docs.aws.amazon.com/IAM/latest/UserGuide/LimitationsOnEntities.html
  • 38. アジェンダ •  IAMの概要 •  IAMポリシー •  IAMロール •  AWS  Security  Token  Service •  まとめ
  • 39. IAMロールとは? •  AWSサービスやアプリケーション等、エンティティに対してAWS 操作権限を付与するための仕組み –  例例えば実⾏行行するアプリケーションにロールを付与する事で、そのアプリケーションから AWSを操作出来るようになる •  IAMユーザーやグループには紐紐付かない •  設定項⽬目は、ロール名とIAMポリシー –  最⼤大10,240⽂文字のポリシーが設定可能 •  EC2ほか、Beanstalk,Data  Pipelineなどでも利利⽤用
  • 40. ユースケース:  IAM  Role  for  EC2  instances プログラム "   EC2インスタンスに、指定のロールを付与する機能 §  EC2起動時にロールを指定すると、認証情報がメタデータに設定される §  認証情報はSTS(Security  Token  Service)で⽣生成 •  インスタンス毎に異異なるキー •  有効期限付きで、期限が来るとローテート §  アプリケーションから認証情報を取得し、AWSサービスへアクセス •  インスタンス内からメタデータにアクセス •  アクセスキーID、シークレットアクセスキー、セッショントークンを取得 •  3つの認証情報でAPI呼び出し IAM  Role メタデータ
  • 41. メタデータからの認証情報取得 curl  http://169.254.169.254/latest/meta-‐‑‒data/iam/security-‐‑‒credentials/EC2_̲Admin {    "Code"  :  "Success",    "LastUpdated"  :  "2014-‐‑‒06-‐‑‒08T01:51:52Z",    "Type"  :  "AWS-‐‑‒HMAC",    "AccessKeyId"  :  "ASIAJY2YJ5S2ZYK25BLQ",    "SecretAccessKey"  :  "Kp1NblZ7mov/4ln7GLu8dqvN5GztXXXXXXXXXXXXXX",    "Token"  :  "AQoDYXdzELP//////////wEa0ANmvPx2CpTfOWjuPSMQ+/XXXXXXXXXXXXXXXX",    "Expiration"  :  "2014-‐‑‒06-‐‑‒08T08:17:52Z" } Role名 STSのセッショントークン有効期限 "   IAM  Roleを設定したEC2インスタンス内から取得
  • 42. IAMユーザー利利⽤用との⽐比較 プログラム IAM  Role メタデータ プログラム メタデータ "   IAMロールを利利⽤用する事で、インスタンスと鍵管理理を分離離し、管理理の簡 素化とキーローテートによる、よりセキュアな運⽤用が可能に IAMユーザー利利⽤用 IAMロール利利⽤用 認証情報の 埋め込み
  • 43. AWSCredentials  credentials  =           new  BasicAWSCredentials(“アクセスキー”,”シークレットキーID”); AmazonEC2  ec2  =  new  AmazonEC2Client(credentials);” ec2.describeInstances(); •  AWS  SDKを利利⽤用する場合、認証情報取得と有効期限切切れ前の再取得 を⾃自動的に実施可能 "   AWS  CLIはIAM  Roleに対応済み •  http://aws.amazon.com/jp/cli/ AmazonEC2  ec2  =  new  AmazonEC2Client();” ec2.describeInstances(); IAM  Role利利⽤用後 IAM  Role適⽤用のインスタンス 上では、認証情報の設定が不不要
  • 44. ユースケース:  IAMロールによるクロスアカウントアクセス •  あるアカウントのユーザーに別のアカウントのIAMロールに紐紐づける機能 •  例例えば開発アカウントを使って、本番環境のS3データを更更新するようなケースで利利⽤用 http://docs.aws.amazon.com/IAM/latest/UserGuide/cross-‐‑‒acct-‐‑‒access.html 開発アカウント⽤用 ロール 本番アカウント開発アカウント AssumeRole 認証情報 開発者アカウント⽤用ロールの 権限でアクセス
  • 45. IAM Team Account Acct ID: 111122223333 s3-role {  "Statement":  [    {        "Effect":  "Allow",        "Action":  “s3:*",        "Resource":  "*"      }    ]   }   My AWS Account Acct ID: 123456789012 Jeffのアクセスキーによる認証 S3-roleを引き受け、一時的なアクセ スキーを取得 一時的なアクセスキーによる S3APIの呼び出し {  "Statement":  [{        "Effect":  "Allow",        "Action":  “sts:AssumeRole",        "Resource":  "arn:aws:iam::111122223333:role/s3-­‐role"      }    ]   }   {  "Statement":  [{        "Effect":"Allow",        "Principal":{"AWS":"arn:aws:iam::123456789012:root"},        "Action":"sts:AssumeRole"      }    ]   }   IAMロールによるクロスアカウントアクセスの動作 S3-roleを誰が引き受けられるか定義したポリシーをs3-roleに設定アカウントBのs3-roleを引き受けることを許可するポリシーをJeffに設定 Jeff (IAM User) s3-roleに付与されているポリシー STS
  • 46. Assumed-‐‑‒Role  Session  –  Code  Sample  public  static  Credentials  getAssumeRoleSession(String  AccessKey,  String  SecretKey  )                {                        Credentials  sessionCredentials;      AmazonSecurityTokenServiceClient  client  =  new  AmazonSecurityTokenServiceClient(                                                                                                                      Accesskey,  GetSecretkey,  new  AmazonSecurityTokenServiceConfig());                        //  Store  the  attributes  and  request  a  new  AssumeRole  session  (temporary  security  credentials)                        AssumeRoleRequest  request  =  new  AssumeRoleRequest                        {                                DurationSeconds  =  3600,                                RoleArn  =  "arn:aws:iam::111122223333:role/s3-‐‑‒role",                                RoleSessionName  =  "S3BucketBrowser"                        };                        AssumeRoleResponse  startSessionResponse  =  client.AssumeRole(request);                        if  (startSessionResponse  !=  null)  //  Check  for  valid  security  credentials  or  null                        {                                AssumeRoleResult  startSessionResult  =  startSessionResponse.AssumeRoleResult;                                sessionCredentials  =  startSessionResult.Credentials;                                return  sessionCredentials;                        }                        else                        {                                throw  new  Exception("S3  Browser  ::  Error  in  retrieving  temporary  security  creds,  received  NULL");                        }                }
  • 47. クロスアカウントアクセスのための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}}        }    ] } http://docs.aws.amazon.com/IAM/latest/UserGuide/MFAProtectedAPI.html
  • 48. アジェンダ •  IAMの概要 •  IAMポリシー •  IAMロール •  AWS  Security  Token  Service •  まとめ
  • 49. AWS  Security  Token  Service(STS)とは •  ⼀一時的に利利⽤用するトークンを発⾏行行するサービス •  動的にIAMユーザーを作成し、ポリシーを適⽤用できる –  STSはユーザー数制限なし •  IAM  Role  for  EC2は、このSTSを利利⽤用 –  Assume  Role
  • 50. Temporary  Security  Credentialsとは •  AWSに対する、⼀一時的な認証情報を作成する仕組み –  期限付きの認証情報(認証チケット) •  ユーザーに対して、以下の3つのキーを発⾏行行 §  アクセスキー(ASIAJTNDEWXXXXXXX) §  シークレットアクセスキー(HQUdrMFbMpOHJ3d+Y49SOXXXXXXX) §  セッショントークン(AQoDYXdzEHQakAOAEHxwpf/ozF73gmp9vZDWDPkgFnzwSG/ 3ztBw9Z4IUslNNn503+3SeN0nwI3wcdLR8y8Ulv9cnksMrBGjRVrJl2xg+/ CRnI9nJ1tteHp6yso3sP0BVvnxLpNwyIUpHrcTHt+8v2P6Y9/VX2zl8Hc/cy6La0r1/ GuiHb9NEwqt6VIgjPWCZzHXzX8XsUObKhMnAUkY2IdTMrNKXcqVk8VbC6BNTqWsMIIfQPz 9fDjKK1ifAFmHVSWvUxio94n+ebXXpy1NuHnt5JEGV34VPLMsrpZ86b +eulKNE1suoQ8TM5E1O66rYwizkq6w+cJovUnMxg6ESASBvolsrEioLiP+SE7cX1i8gRrSG9/ KT59GYTlhTzStjjFroCAqZu4KYplGUMCDl1g0twrdXeymsu3GG70Qwu0wSi3WjkW8VPiajahJ XCEgp6gIgXElwkrBO01H5Y9NNDEyQaq8ocOGBPVRu+DS9LMs9SHASXimnnVeIN +1FVkXXXXXXXXXXXXXXXXXXXXXXXX)
  • 51. 認証情報を取得する⽅方法 •  Self-‐‑‒sessions  (GetSessionToken) •  Federated  sessions  (GetFederationToken) •  Assumed-‐‑‒role  sessions   •  AssumeRole •  AssumeRoleWithWebIdentity •  AssumeRoleWithSAML Session Access  Key  Id Secret  Access  Key Expiration Session  Token Temporary   Security   Credentials
  • 52. 認証情報取得のためのAPI STSで利利⽤用できるAPI  Action 概要 GetSessionToken ⾃自⾝身で利利⽤用するIAMユーザーのtemporary  security   credentialsを取得するためのアクション。 GetFederationToken 認証を受けたFederatedユーザーのtemporary  security   credentialsを取得するためのアクション。 AssumeRole 既存のIAMユーザーの認証情報を⽤用いて、IAM  Roleの temporary  security  credentialsを取得するためのアクショ ン。 AssumeRoleWithWebIdentity AmazonやFacebook、Googleによる承認情報を使⽤用して ロールを引き受け、temporary  security  credentialsを取得 するためのアクション。 AssumeRoleWithSAML idPによる認証とSAMLのアサーションをAWSにポストする ことでロールを引き受けtemporary  security  credentialsを 取得するためのアクション。 http://docs.aws.amazon.com/STS/latest/UsingSTS/Welcome.html
  • 53. 認証情報の有効期限 •  トークンのタイプにより有効期限は様々[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ロールの権限を変更更する Session Access  Key  Id Secret  Access  Key Expiration Session  Token
  • 54. IAMユーザーAWS  Accountʼ’s Access  Key  ID Temporary   Security   Credentials ホテルに例例えると・・・
  • 55. AWS  アカウント IAMユーザー Temporary Security Credentials IAMの権限階層 Permissions Example すべての操作が可能 Action:  * Effect:  Allow Resource:  * (implicit) ユーザーやグループに対し て割り当てられた権限 Action:  [ʻ‘s3:*ʼ’,  ʻ‘sts:Get*ʼ’] Effect:  Allow Resource:  *   トークン作成時に決定され る Action:  [  ʻ‘s3:Get*ʼ’  ] Effect:  Allow Resource:  ʻ‘arn:aws:s3:::mybucket/*ʼ’
  • 56. Identity  Federation(ID連携)とは •  企業・組織の認証機能と、AWSの認証を紐紐づける機能 •  例例えばLDAP認証したユーザーに対してS3のアクセス権 をつける、といった連携が可能 •  認証したユーザーごとにTemporary  Security   Credentials(⼀一時的なアクセスキー)を発⾏行行
  • 57. ユースケースの代表例例 •  ⼀一時的なアクセス権限の譲渡 –  ⼀一時的にS3へアップロード出来るようなアプリケーションの作成 –  ⼀一時的にEC2を起動できるような仕組みの構築 •  組織ユーザー毎のアクセス制御 –  ユーザーごとに利利⽤用できるS3バケットの作成 •  ユーザーごとにIAMユーザーを作る必要がない –  組織のグループに紐紐づけてアクセス制御を実施 •  モバイルアプリケーション –  システムログインしたモバイルアプリユーザーごとにテンポラリの認証情報を作成 –  モバイルから直接S3にアップロード可能 –  有効期限があるため、セキュア –  数千数万のユーザーに対応
  • 58. ユースケース:    API  FederationによるS3アクセス (Sample  -‐‑‒  http://aws.amazon.com/code/1288653099190193) •  Identity  provider –  Windows  Active  Directory –  ADグループメンバーシップに応じた権限付与 •  AWS  API  (S3*)へのアクセスを付与 •  GetFederationToken  APIの利利⽤用
  • 59. •  Access  Key •  Secret  Key •  Session  Token Get  Federation  Token Response AWS  API  Federationの動作 Customer  (Identity  Provider) AWS  Cloud  (Relying  Party) AWS  Resources User   Application Active   Directory Federation   Proxy Get  Federation Token  Request エンタイトル メントの決定 ユーザーの認証 S3  Bucket   with  Objects Amazon   DynamoDB Amazon   EC2 認証情報の リクエスト 認証情報の 受け取り APP Federation   Proxy •  GetFederationTokenRequest()の利利⽤用には Proxy上のIAMユーザーのクレデンシャルを 利利⽤用 •  そのIAMユーザーの権限はフェデレーション ユーザーの権限をカバーしている必要がある •  Proxyはこの特権的なクレデンシャルをセ キュアに保管する必要がある AWS  APIの 呼び出し http://aws.typepad.com/aws_̲japan/2011/08/aws-‐‑‒identity-‐‑‒and-‐‑‒access-‐‑‒management-‐‑‒now-‐‑‒with-‐‑‒identity-‐‑‒federation.html
  • 60. ユースケース:    Console  Federation (Sample  -‐‑‒  http://aws.amazon.com/code/4001165270590826) •  Identity  provider –  Windows  Active  Directory –  ADグループメンバーシップに応じた権限付与 –  ADグループに応じたIAMロールの選択 •  AWS  管理理コンソールへのシングルサインオン •  AssumeRole  APIの利利⽤用
  • 61. Console  Federationの動作 Customer  (IdP) AWS  Cloud  (Relying  Party) AWS   Management   Console Browser   interface Corporate   directory Federation   proxy URLにアクセス ADグループ の提⽰示 ユーザーの認証 コンソールへのリ ダイレクト 10 ログインURLの作成 List  RolesRequest Assume  Role  Response Temp  Credentials •  Access  Key •  Secret  Key •  Session  Token AssumeRole  Request ロールを選択でき るcombo Boxの作成 Federation   proxy •  AssumeRoleRequest()を利利⽤用するため Proxy上のIAMユーザーのクレデンシャ ルを利利⽤用 •  IAMユーザーの権限はListRolesと assume  roleを⾏行行えるものが必要 •  Proxyはこのクレデンシャルをセキュア に保管する必要がある List  RolesResponse
  • 62. SAML  2.0によるSSO  Federation •  Security  Token  Service  (STS)がSecurity  Assertion  Markup  Language   (SAML)をサポートしました。 •  AWSリソースへのアクセスに既存のID管理理ソフトウェアを利利⽤用できます。 •  AWS管理理コンソールへのSSOにも利利⽤用。 •  新しいassumeRoleWithSAML  APIによりAPIフェデレーションを⾏行行えます。 New 2013/11/11
  • 63. SAMLによるConsole  Federationの動作 Enterprise  (Identity  Provider) AWS  (Service  Provider) AWS  Sign-‐‑‒in Browser   interface Corporate   identity   store Identity   provider 内部ポータルへのアクセス ポータルはIdPとしても機能 認証応答 の受け取り AWS管理理コンソールへ のリダイレクト 新しいAWSのサインイン・ エンドポイントに対して SAMLアサーションをポスト http://aws.typepad.com/aws_̲japan/2013/11/aws-‐‑‒identity-‐‑‒and-‐‑‒access-‐‑‒management-‐‑‒using-‐‑‒saml.html
  • 64. ユースケース:  Web  Identity  Federation •  AssumeRoleWithWebIdentityの利利⽤用 –  ソーシャルサービスの認証を元に、AWSへのアクセスキーを発⾏行行するサービス •  ソーシャルサービス認証を確認するサーバが不不要 –  例例えばスマートフォンアプリとS3だけでシステムが作成可能 •  現在Google,Facebook,Amazon(Login  with  Amazon)に対応 •  IAM  Roleを使⽤用して実現
  • 65. Web  Identity  Federationの動作 AWS  Cloud US-‐‑‒EAST-‐‑‒1 EU-‐‑‒WEST-‐‑‒1 AP-‐‑‒SOUTHEAST-‐‑‒1 AWS  Services Amazon   DynamoDB S3 ユーザー認証 AWSサービス へのアクセス IAM EC2   Instances Tokenの 検証 Web  identity Provider ポリシー の確認 Id  Token の取得 Mobile  App http://aws.typepad.com/aws_̲japan/2013/05/aws-‐‑‒iam-‐‑‒now-‐‑‒supports-‐‑‒amazon-‐‑‒facebook-‐‑‒and-‐‑‒google-‐‑‒identity-‐‑‒federation.html
  • 66. STS対応サービス 2014/06現在 AWS  Products AWS  Billing  and  Cost  Management Yes Amazon  AppStream Yes Auto  Scaling Yes AWS  CloudFormation Yes Amazon  CloudFront Yes AWS  CloudHSM No Amazon  CloudSearch Yes AWS  CloudTrail Yes Amazon  CloudWatch Yes AWS  Data  Pipeline Yes AWS  Direct  Connect Yes Amazon  DynamoDB   Yes AWS  Elastic  Beanstalk No Amazon  Elastic  Compute  Cloud   Yes AWS  Products Elastic  Load  Balancing Yes Amazon  Elastic  MapReduce   No Amazon  Elastic  Transcoder Yes Amazon  ElastiCache Yes Amazon  Flexible  Payments  Service   No Amazon  Fulfillment  Web  Service   No Amazon  Glacier Yes AWS  Identity  and  Access  Management   Yes AWS  Import/Export Yes Amazon  Kinesis Yes AWS  Marketplace Yes AWS  Marketplace  Management  Portal No Amazon  Mechanical  Turk No AWS  OpsWorks Yes AWS  Products Amazon  Redshift Yes Amazon  Relational  Database  Service   Yes Amazon  Route  53 Yes AWS  Security  Token  Service Yes Amazon  Simple  Email  Service   Yes Amazon  Simple  Notification  Service   Yes Amazon  Simple  Queue  Service   Yes Amazon  Simple  Storage  Service   Yes Amazon  Simple  Workflow  Service   Yes Amazon  SimpleDB Yes AWS  Storage  Gateway Yes AWS  Support Yes Amazon  Virtual  Private  Cloud   Yes Amazon  WorkSpaces No http://docs.aws.amazon.com/STS/latest/UsingSTS/UsingTokens.html
  • 67. Federation/SSOを提供するパートナーソリューション http://www.xceedium.com/xsuite/xsuite-‐‑‒for-‐‑‒amazon-‐‑‒web-‐‑‒services   http://www.okta.com/aws/   http://www.symplified.com/solutions/single-‐‑‒sign-‐‑‒on-‐‑‒sso   https://www.pingidentity.com/products/pingfederate/ http://www.cloudberrylab.com/ad-‐‑‒bridge.aspx http://aws.amazon.com/jp/iam/partners/
  • 68. アジェンダ •  IAMの概要 •  IAMポリシー •  IAMロール •  AWS  Security  Token  Service •  まとめ
  • 69. IAMのベストプラクティス(1) §  利利⽤用者に対して個別のIAMユーザーを作成する §  パーミッションの管理理はグループに対して⾏行行う §  最⼩小権限の原則に従う §  強度度の⾼高いパスワードポリシーを設定する §  特権を持つIAMユーザーアカウントにはMFAを利利⽤用する
  • 70. IAMのベストプラクティス(2) §  EC2インスタンスにはIAM  Roleを利利⽤用する §  アクセス権の共有にはIAM  Roleを利利⽤用する §  認証情報は定期的に更更新する §  Conditionを利利⽤用して特権アクセスに対してきめ細かい制限を⾏行行う §  AWSアカウントは極⼒力力使⽤用しない
  • 71. まとめ •  IAMを利利⽤用することで、よりセキュアで安全にAWSサービス群を利利⽤用で きます –  制限をかけることで、セキュリティだけでなく、オペレーションミスも低減できます •  STSをうまく利利⽤用すると、AWSサービスをアプリケーションやモバイル から直接扱えます –  サーバコストの削減が可能 •  IAM⾃自体には利利⽤用料料が必要ありません –  積極的に活⽤用を!
  • 72. 追加のリソース •  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/
  • 73. Webinar資料料の配置場所 •  AWS  クラウドサービス活⽤用資料料集 –  http://aws.amazon.com/jp/aws-‐‑‒jp-‐‑‒introduction/