jaws-ug cli #27 lt activedirectoryのユーザとパスワードでmanagement...

33
JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードで Management Consoleにログインする 2015/08/31 Mon Nobuhiro Nakayama

Upload: nobuhiro-nakayama

Post on 14-Apr-2017

547 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

JAWS-UG CLI #27 LTActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

2015/08/31 Mon

Nobuhiro Nakayama

Page 2: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

2

cat << EOF > me.json

{

“name” : “Nobuhiro Nakayama”,

“company” : “UCHIDAYOKO CO., LTD.”,

“favorite aws services” : [

“Directory Service”, “IAM”, “CLI”

],

“twitter” : ”@domokun70cm”,

“facebook” : ” nobuhiro.nakayama.12”,

“certifications” : [

“AWS Certified Solutions Architect-Professional”,

“AWS Certified SysOps Administrator-Associate”,

“Microsoft Certified Solutions Expert Server Infrastructure / SharePoint”,

“IPA Network Specialist”, “IPA Information Security Specialist”

]

}

EOF

Page 3: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

はじめに

• 質問

• IDとパスワードをいくつ管理してますか?

2015/8/31 3

Page 4: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

パスワード管理の限界

• 無理!

• 頻繁にパスワード忘れる

• 使い回されるパスワード

• 有効期限や複雑性の管理・・・

• 貧弱!貧弱ゥ!(セキュリティ的な意味で)

2015/8/31 4

Page 5: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

認証連携

2015/8/31 5

Page 6: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

認証連携の例

2015/8/31 6

IdP(Identity Provider)Ex) facebook

RP(Relying Party)Ex) niconico

ID/PASS

Token

Redirect/ Token

認証Tokenの検証・認可(IdPを事前に信頼していることが前提)

(ログイン成功)

User

Page 7: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

AWSでも同じことできるよ!

2015/8/31 7

Page 8: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

認証連携(ADFSと連携する場合の例)

2015/8/31 8

IdP(Identity Provider)→ADFS

RP(Relying Party)→AWS

ID/PASS

Token

Redirect/ Token

認証Tokenの検証・認可

(ログイン成功)

User

Page 9: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

Identity Provider (IAM)

• AWS外のIdentity Providerを認証に利用することができる機能

• SAMLとOpen ID Connectによる認証連携をサポート

• IAMで(たぶん)一番利用されないやつ

2015/8/31 9

Page 10: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

Active Directory Federation Service(ADFS)

• Active Directoryを構成する役割のひとつ

• Domain Controllerとは異なる役割

• 組織外のRPとの認証連携などが可能

• Domain Controllerは組織内での認証で利用

• Kerberos認証など

• (補足)次期Windows ServerのADFSではOpen ID Connectがサポートされる

• [AD FS]OpenID Connectに対応した次期AD FSを試す

• http://idmlab.eidentity.jp/2015/08/ad-fsopenid-connectad-fs.html

2015/8/31 10

Page 11: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

SAML(Security Assertion Markup Language)

• 「SAMLとは、Security Assertion Markup Languageの略称であり、OASISによって策定された異なるインターネットドメイン間でユーザー認証を行うための XML をベースにした標準規格です。2002年に策定され、2005年にはバージョン2.0となっています。」

• 「SAMLを利用することで企業の持つアイデンティティ情報、例えば、Active Directoryなどを利用して、複数のクラウドサービスへのシングルサインオンを実現します。つまり、ユーザーは認証サーバーに1回ログインするだけで、SAML対応しているクラウドサービスやWebアプリケーションを利用することができるようになるのです。」

• 「また、SAMLはユーザーの属性情報なども付与することができます。単純にユーザーの認証を行うだけでなく、ユーザーがクラウドサービス内のどの機能するなどの認可も行えるプロ トコルです。例えば、営業部や情報システム部といった属性情報をユーザー認証に付与することで、この機能は営業部にしか使わせないといったリソースへのアクセス制御が容易にできるようになります。」

• 引用元

• http://www.cybernet.co.jp/onelogin/function/saml.html

2015/8/31 11

Page 12: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

Demo

2015/8/31 12

Page 13: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

構築手順(SAMLで連携)

1. (本資料では省略)ドメインコントローラを構築(@AD)

• ログインに利用するユーザとセキュリティグループの作成

• (セキュリティグループ)

2. (本資料では省略) ADFSサーバを構築(@AD)

3. ADFSサーバのSAML Document Metadataを取得(@AD)

4. IAMでIdentity Providerを作成(@AWS)

5. IAMでRoleを定義(@AWS)

• ロールの名前とPath

6. 証明書利用者信頼(trusted relying party)を設定(@AD)

7. クレームルールを設定(@AD)

2015/8/31 13

Page 14: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

【参考】構築手順(SAMLで連携)

• セルフペースラボで手順を確認可能

• Microsoft ADFS and AWS IAM

• https://qwiklabs.com/focuses/1596?locale=ja

• 15クレジット

• 手順書(PDF)だけならクレジット無しで入手可能!

• クレジットである程度お膳立てされた環境を入手できる

• お布施はご自由に

2015/8/31 14

Page 15: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

3.ADFSサーバのSAML Document Metadataを取得(@AD)

• ADFSサーバから入手

• https://adfsserver.mydomain.local/FederationMetadata/2007-06/FederationMetadata.xml

• adfsserver.mydomain.localはADFSサーバ

• RPにおけるTokenの検証で必要

2015/8/31 15

Page 16: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

3.ADFSサーバのSAML Document Metadataを取得(@AD)

2015/8/31 16

Page 17: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

4.IAMでIdentity Providerを作成(@AWS)

• SAML連携するIdPを登録

• Tokenを検証するためのSAML Document Metadataを設定

• SAML Document Metadataは手順3で取得したもの

• aws iam create-saml-providerコマンドで作成可能

2015/8/31 17

Page 18: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

4.IAMでIdentity Providerを作成(@AWS)

コマンド

aws iam create-saml-provider

--saml-metadata-document file://FederationMetadata.xml

--name adfs

結果

{

"SAMLProviderArn": "arn:aws:iam::************:saml-provider/adfs"

}

2015/8/31 18

Page 19: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

5.IAMでRoleを定義(@AWS)

• 手順4で作成したIdentity Providerがロールを引き受けることができるよう信頼関係を設定

2015/8/31 19

Page 20: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

5.IAMでRoleを定義(@AWS)

{

"Version": "2012-10-17",

"Statement": [

{

"Sid": "",

"Effect": "Allow",

"Principal": {

“Federated”: “arn:aws:iam::************:saml-provider/ADFS“

},

"Action": "sts:AssumeRoleWithSAML",

"Condition": {

"StringEquals": {

"SAML:aud": https://signin.aws.amazon.com/saml

}

}

}

]

}

2015/8/31 20

Page 21: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

6.証明書利用者信頼(trusted relying party)を設定(@AD)

• ADFSにRPとしてAWSを登録

• 後述するクレームルールを定義

• どのような条件でトークンの発行を承認するか

• 発行するトークンをどのように変換するか

2015/8/31 21

Page 22: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

6.証明書利用者信頼(trusted relying party)を設定(@AD)

2015/8/31 22

Page 23: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

6.証明書利用者信頼(trusted relying party)を設定(@AD)

2015/8/31 23

Page 24: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

6.証明書利用者信頼(trusted relying party)を設定(@AD)

2015/8/31 24

Page 25: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

7.クレームルールを設定(@AD)

• 一番難しいやつ

• 「受け付け変換規則」「発行承認規則」「発行変換規則」として、発行されるTokenに含まれる属性情報やTokenを発行する条件を定義

• 詳細は以下の資料が参考になります

• AD FS deep dive - claim rule set

• http://www.slideshare.net/junichia/ad-fs-deep-dive-claim-rule-set

• ADFS クレームルール言語 Deep Dive

• http://www.slideshare.net/SuguruKunii/deep-dive-42147916

2015/8/31 25

Page 26: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

7.クレームルールを設定(@AD)

2015/8/31 26

受け付け変換規則 発行承認規則 発行変換規則

Token

ADDS ADFS Client RP

Page 27: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

7.クレームルールを設定(@AD)

• セルフペースラボでは以下の発行変換規則の設定を行っている

• Windowsアカウント名をユーザを一意に識別するためのIDとしてクレームを発行

• http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier

• Windowsアカウント名をセッション名としてクレームを発行

• https://aws.amazon.com/SAML/Attributes/RoleSessionName

• 所属するセキュリティグループが条件に合致する場合、Identity ProviderとIAM RoleのARNをロールとしてクレームを発行

• https://aws.amazon.com/SAML/Attributes/Role

2015/8/31 27

Page 28: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

7.クレームルールを設定(@AD)

c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"]

=> issue(Type = “http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier”,Issuer = c.Issuer,OriginalIssuer = c.OriginalIssuer,Value = c.Value,ValueType = c.ValueType,Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/format"]

= "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent");

----------

条件部

発行部

2015/8/31 28

Page 29: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

7.クレームルールを設定(@AD)

c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname",

Issuer == "AD AUTHORITY"]

=> issue(store = "Active Directory",types = ("https://aws.amazon.com/SAML/Attributes/RoleSessionName"),query = ";sAMAccountName;{0}",param = c.Value);

----------

条件部

発行部

2015/8/31 29

Page 30: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

7.クレームルールを設定(@AD)

c:[Type ==“http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname”,

Issuer == "AD AUTHORITY"]

=> add(store = "Active Directory",types = ("http://temp/variable"),query = ";tokenGroups;{0}",param = c.Value);

----------

条件部

Claim ProviderがActive Directoryであり、Windows Account Nameのクレームが発行されている

発行部

Active Directoryから属性を取得

Windows Account NameのtokenGroups(Windows Account Nameのユーザが所属するセキュリティグループのリスト)をクレームとして仮発行する

2015/8/31 30

Page 31: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

7.クレームルールを設定(@AD)

c:[Type == "http://temp/variable",Value =~ "(?i)^AWS-"]

=> issue(Type = "https://aws.amazon.com/SAML/Attributes/Role",Value = RegExReplace(c.Value, "AWS-",

"arn:aws:iam::999999999999:samlprovider/ADFS,arn:aws:iam::999999999999:role/AWS-"));

----------

条件部

(セキュリティグループが)「AWS-」で始まるものが含まれる場合、クレームを発行する

発行部

「AWS-」を「arn:aws:iam::999999999999:samlprovider/ADFS,arn:aws:iam::999999999999:role/AWS-」に置換し、「https://aws.amazon.com/SAML/Attributes/Role」に設定

2015/8/31 31

Page 32: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

まとめ

• SAMLは敷居は高い(特にクレームルール)

• AWSを含む各種SaaSとActiveDirectoryなどのIdPを連携させることができる

• ユーザが管理するIDの統合とポリシーの集中管理、認証要素の追加などが実現できる

2015/8/31 32

Page 33: JAWS-UG CLI #27 LT ActiveDirectoryのユーザとパスワードでManagement Consoleにログインする

参考情報

• ADFSを利用してAWSにシングルサインオンする方法

• http://azuread.net/2014/12/04/adfs%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6aws%E3%81%AB%E3%82%B7%E3%83%B3%E3%82%B0%E3%83%AB%E3%82%B5%E3%82%A4%E3%83%B3%E3%82%AA%E3%83%B3%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/

• Enabling Federation to AWS Using Windows Active Directory, ADFS, and SAML 2.0

• http://blogs.aws.amazon.com/security/post/Tx71TWXXJ3UI14/Enabling-Federation-to-AWS-using-Windows-Active-Directory-ADFS-and-SAML-2-0

• Token-Groups attribute

• https://msdn.microsoft.com/en-us/library/ms680275(v=vs.85).aspx

2015/8/31 33