Upload
nobuhiro-nakayama
View
547
Download
1
Embed Size (px)
Citation preview
JAWS-UG CLI #27 LTActiveDirectoryのユーザとパスワードでManagement Consoleにログインする
2015/08/31 Mon
Nobuhiro Nakayama
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
はじめに
• 質問
• IDとパスワードをいくつ管理してますか?
2015/8/31 3
パスワード管理の限界
• 無理!
• 頻繁にパスワード忘れる
• 使い回されるパスワード
• 有効期限や複雑性の管理・・・
• 貧弱!貧弱ゥ!(セキュリティ的な意味で)
2015/8/31 4
認証連携
2015/8/31 5
認証連携の例
2015/8/31 6
IdP(Identity Provider)Ex) facebook
RP(Relying Party)Ex) niconico
ID/PASS
Token
Redirect/ Token
認証Tokenの検証・認可(IdPを事前に信頼していることが前提)
(ログイン成功)
User
AWSでも同じことできるよ!
2015/8/31 7
認証連携(ADFSと連携する場合の例)
2015/8/31 8
IdP(Identity Provider)→ADFS
RP(Relying Party)→AWS
ID/PASS
Token
Redirect/ Token
認証Tokenの検証・認可
(ログイン成功)
User
Identity Provider (IAM)
• AWS外のIdentity Providerを認証に利用することができる機能
• SAMLとOpen ID Connectによる認証連携をサポート
• IAMで(たぶん)一番利用されないやつ
2015/8/31 9
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
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
Demo
2015/8/31 12
構築手順(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
【参考】構築手順(SAMLで連携)
• セルフペースラボで手順を確認可能
• Microsoft ADFS and AWS IAM
• https://qwiklabs.com/focuses/1596?locale=ja
• 15クレジット
• 手順書(PDF)だけならクレジット無しで入手可能!
• クレジットである程度お膳立てされた環境を入手できる
• お布施はご自由に
2015/8/31 14
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
3.ADFSサーバのSAML Document Metadataを取得(@AD)
2015/8/31 16
4.IAMでIdentity Providerを作成(@AWS)
• SAML連携するIdPを登録
• Tokenを検証するためのSAML Document Metadataを設定
• SAML Document Metadataは手順3で取得したもの
• aws iam create-saml-providerコマンドで作成可能
2015/8/31 17
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
5.IAMでRoleを定義(@AWS)
• 手順4で作成したIdentity Providerがロールを引き受けることができるよう信頼関係を設定
2015/8/31 19
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
6.証明書利用者信頼(trusted relying party)を設定(@AD)
• ADFSにRPとしてAWSを登録
• 後述するクレームルールを定義
• どのような条件でトークンの発行を承認するか
• 発行するトークンをどのように変換するか
2015/8/31 21
6.証明書利用者信頼(trusted relying party)を設定(@AD)
2015/8/31 22
6.証明書利用者信頼(trusted relying party)を設定(@AD)
2015/8/31 23
6.証明書利用者信頼(trusted relying party)を設定(@AD)
2015/8/31 24
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
7.クレームルールを設定(@AD)
2015/8/31 26
受け付け変換規則 発行承認規則 発行変換規則
Token
ADDS ADFS Client RP
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
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
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
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
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
まとめ
• SAMLは敷居は高い(特にクレームルール)
• AWSを含む各種SaaSとActiveDirectoryなどのIdPを連携させることができる
• ユーザが管理するIDの統合とポリシーの集中管理、認証要素の追加などが実現できる
2015/8/31 32
参考情報
• 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