みなさん、こんにちは。スカイゲートテクノロジズのサイバー事業部です。弊社のプロダクト開発では、AWSをはじめ、GCPやAzureをマルチクラウドで利用しています。また、弊社では、プロダクト開発の他にもお客様のクラウド環境のセキュリティハーデニングや運用支援などを実施しています。その中で真っ先にお勧めしているのが、外部IdPによるSSOの有効化です。今日は、Google WorkspaceをIDaaSライクに利用し、AWSへSAMLフェデレーションを用いてシングルサインオンするための設定を紹介します。今回の設計ID Provider Google Workspace ( Google Cloud Identity でも可)Service Provider Amazon Web ServicesそもそもSAMLフェデレーションって?SAMLは、サービス間で認証情報を連携させ、別のサービスで認証ずみのユーザを他のサービスでも認証済みユーザとして取り扱えるようにする仕組みのプロトコルです。AWSでは、外部のIDプロバイダで認証されたユーザーから、SAMLフェデレーションと呼ばれる仕組みを使って特定のロールでサインインできるようになっています。このあたりは厳密に説明すると大変ややこしいのですが、簡単に言うと、GoogleアカウントでAWSコンソールのサインインできる、といった感じです。できるようになることGoogleのメイン画面から、1クリックでログインできるようになります。画面右上のボタンから、アプリケーションメニューを開くと、中にAmazon Web Servicesが表示されるようになります。SSOにするメリットIAMユーザの新規作成をいちいちしなくて良くなる(Google Workspaceさえ設定すればOK)Google Workspaceから権限の調整やユーザーのロックができるようになる2要素認証などのポリシーをGoogle Workspaceに寄せることができるセキュリティについては、こちらの記事でも記載しています。%3Cdiv%20class%3D%22iframely-embed%22%3E%3Cdiv%20class%3D%22iframely-responsive%22%20style%3D%22height%3A%20140px%3B%20padding-bottom%3A%200%3B%22%3E%3Ca%20href%3D%22https%3A%2F%2Fwww.skygate-tech.com%2Fblog%2Fbasic-aws-security-setting-jp%22%20data-iframely-url%3D%22%2F%2Fiframely.net%2FZfdwshX%3Fcard%3Dsmall%22%3E%3C%2Fa%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3Cscript%20async%3D%22%22%20src%3D%22%2F%2Fiframely.net%2Fembed.js%22%3E%3C%2Fscript%3Eなお、既にOneLoginやOktaのようなIDaaSを利用している場合には、そちらに寄せてください。セットアップ方法2022年7月現在の方法です。Google Workspace側の準備その1:カスタム属性の設定Google WorkspaceのユーザーがAWS上のどのロールを使うのか、といった設定のため、ユーザープロファイルの「カスタム属性」を追加します。1. 管理コンソールの「ディレクトリ」から「ユーザー」を選択し、「その他のオプション」から「カスタム属性を管理します」を選択します。2. 開いた画面で「カスタム属性の追加」を押下すると、フィールドが追加できるようになります。3.カスタムフィールドを追加します。カテゴリと説明は、わかりやすいもので大丈夫です。Roleテキストユーザーと管理者が閲覧可能複数の値Session Duration整数ユーザーと管理者が閲覧可能単一の値この2つを設定します。Google Workspace側の準備その2:SAML設定1. Google Workspaceの管理コンソールにログインして、「アプリ」から「ウェブアプリとモバイルアプリ」をクリックします。「アプリを追加」をクリックして「カスタムSAMLアプリの追加」を選択します。2. SAMLアプリのセットアップウィザードが始まりますので、指示に従って入力します。Google プロバイダの詳細で「メタデータをダウンロード」をクリックします。これは、Google WorkspaceがIdPとして動作するための情報が含まれたファイルです。安全な場所にダウンロードしておきます。続いて、サービスプロバイダ=Google側の設定を入れます。 ACSのURLとエンティティIDに https://signin.aws.amazon.com/saml を入力しましょう。名前IDは、形式がUNSPECIFIED、名前IDがメインのメールアドレス(Primary Email)にしておきます。最後に、マッピング情報を入力します。Google Workspace側の情報とAWSにSSOした場合の情報をマッピングする設定です。AWS>Role:https://aws.amazon.com/SAML/Attributes/RoleAWS>SessionDuration:https://aws.amazon.com/SAML/Attributes/RoleSessionNameBasic Information>Primary Email: https://aws.amazon.com/SAML/Attributes/RoleSessionNameこれで「完了」を押せばSAMLアプリが作成されます。AWS側の準備:IdPの設定つづいて、AWS側にIdPの設定を入れていきます。1. AWSにルートユーザでサインインし、IAMを開きます。2. 画面左の「Identity Providers(IDプロバイダー)」を選択し、「Add Provider(プロバイダの作成)」ボタンを押すと、作成ウィザードに入ります。「SAML」を選択し、わかりやすいプロバイダ名(”Google Workspace”など)を入力し、「Metadata Document(メタデータドキュメント)」に先ほどダウンロードしたメタデータをアップロードしてください。3. 作成完了後、IdProviderのARNを控えるこんな感じでIDプロバイダが登録されています。あとで使うので、ProviderのARNを手元に控えておきます。AWS側の設定:ロールの作成1. 次にSAML可能なロールを作成します。IAMの画面から「Roles(ロール)」を選択し、「Create Role(ロールの作成)」を選択してください。「Trusted entity type(信頼されたエンティティの種類)」から「SAML 2.0 federation」を選びます。先ほど作成したIDプロバイダーを選択してください。AWS CLIからのアクセスのみに絞る場合には「Allow programmatic access only(プログラムによるアクセスのみを許可する)」を選択します。コンソールアクセスを使うこともある場合には、下の選択肢です。2. ポリシーをアタッチするこのロールに割り当てるロールを選択します。ここは皆さんの環境に合わせて設定してください。このあと、ロールはいくつでも追加できるので、「ReadOnlyAccess」や「PowerUser」など権限の強さ別に用意しておくと便利です。ここでは、請求関係だけが見れる「AWSBillingReadOnlyAccess」を割り当てています。ロール名や説明を追加したら、ロールの作成は完了です。こんな感じでロールが作成されています。あとで使うので、IAM RoleのARNを控えておきます。必要なロールの分だけ、この作業を繰り返します。Google Workspaceでのロールの割り当てGoogle Workspaceのそれぞれのユーザーにロールを割り当てていきます。1. Google Workspaceの管理コンソールを開き、ロールを割り当てたいユーザーを開き、「ユーザー情報」をクリックします。2. スクロールして、準備で設定したカスタム属性を開きますここに、ARNとSession Durationを入力していきます。Roleの入力は、RoleARNとプロバイダーARNをコンマ区切りで入れてください。こんな感じです。arn:aws:iam::123456789012:role/MySSORole,arn:aws:iam::123456789012:saml-provider/MyProviderRoleは複数行(複数値)入力することができ、SSOのときにロールを選ぶことができます。Session Durationにはセッションの有効時間を入力します。これば秒数を指定するもので、例では 43200 、つまり12時間分を指定しています。セッションの最大時間は12時間ですので、1日中使うエンジニア向けのロールは43200、機微な情報にアクセス可能なメンバーは1時間(3600秒)など柔軟に指定しておきましょう。この作業を、必要なユーザー分だけ行います。ちょっと大変ですが、一度入力すれば大丈夫なので頑張りましょう!SAMLアプリの有効化とテストいよいよSAMLフェデレーションを有効化します。1. Google Workspaceの管理コンソールで再び「アプリ」から「ウェブアプリとモバイルアプリ」を開き、準備で登録しておいたアプリを開きます。「サービスのステータス」から「オン」を選択すると、SAMLが有効になります。2. テストを行います。Googleのトップページに移動し、右上のアプリメニューから、登録しておいたAWSのアプリを選択します。すると・・・ついにSSO!おめでとうございます!これでGoogle WorkspaceからSAMLフェデレーションを経てAWSにサインインできるようになりました!実際にサインインすると、指定されたRoleが割り当てられたフェデレーションログインの状態でコンソールに入ることができます。Google Workspace側でユーザーを作成しカスタム属性を割り当てれば、もうIAMユーザーをいちいち作成する必要はありません。いかがだったでしょうか?実はIdPとしても機能するGoogle Workspaceを使ったAWSのミニマムなSAMLフェデレーションの例でした。意外と簡単にできたのではないでしょうか?小さなチームであれば、これでも十分ではないかと思います。一方で、より柔軟な権限管理や効率的な運用の場合には、Google Workspaceのみでは不足するかと思います。その場合には、OneLoginやOktaなどのIDaaSの利用、AWS Single Sign-On(AWS SSO)などの利用を検討してください。弊社では、AWSのみならず、クラウド環境のセキュリティハーデニングや運用支援も行っています。もしお困りのことがありましたら、 以下からお気軽にご相談ください!%3Cdiv%20class%3D%22iframely-embed%22%3E%3Cdiv%20class%3D%22iframely-responsive%22%20style%3D%22height%3A%20140px%3B%20padding-bottom%3A%200%3B%22%3E%3Ca%20href%3D%22https%3A%2F%2Fwww.skygate-tech.com%2Fprofessional-service%2Fsre-cloud-security-dev-sec-ops%22%20data-iframely-url%3D%22%2F%2Fiframely.net%2FRAJV0IR%3Fcard%3Dsmall%22%3E%3C%2Fa%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3Cscript%20async%3D%22%22%20src%3D%22%2F%2Fiframely.net%2Fembed.js%22%3E%3C%2Fscript%3E