☁️

AWS SSOを使う為の基礎知識をまとめてみた

2021/04/20に公開

AWS SSO とは?

AWS SSO(AWS Single Sign-On) とは、AWS Organizationsと連携し複数のAWSアカウントへのシングルサインオンを実現するサービスです。
管理者はOrganizationsに属するAWSアカウントに対するアクセスと認可を統合的に管理することができます。また利用者はAWS SSOサービスによって提供されるユーザポータル経由でマネジメントコンソールにアクセスしたり、awscli v2を使ってAWS APIにアクセスすることができます。

知っておくべき概念や知識

ここでは記事を読む上で必要となるAWS SSO特有の概念・知識について整理します。
詳細についてはAWS SSOの使い方は公式ドキュメントを参照してください。

一般的な用語

シングルサインオン

一度のユーザ認証処理によって、複数のシステムが利用可能になる仕組みのこと

IDフェデレーション

シングルサインオンを実現するための方式の一つ
一つの管理ドメインを超えて他の管理ドメインのサービスにもログインできるようにする処理のこと

SAML

IDフェデレーションを実現する為のプロトコル

AWS SSOで登場する概念

アクセス権限セット

  • AWS Organizationsのマネージドアカウントから、ユーザごとのアクセス権限を一括管理する仕組み
  • IAM Roleのようなもので、AWS SSOでIAMポリシーを一括管理している
  • アクセス権限セットに複数のIAMポリシーを割り当てる→そのアクセス権限セットをユーザ/グループとAWSアカウントに割り当てる→特定のユーザは、割り当てられたアクセス権限セットの権限で、アカウントに対してログインできる

AWS SSO ユーザポータル

  • AWS SSO でマネジメントコンソールにログインする為に開発者が参照する画面
  • アカウント及び認可されたアクセス権限セットの一覧が表示されている

ID ソース

AWS SSOでは、利用するユーザ/グループのIDソースを指定することができる

  • ビルトインのAWS SSO Directory
  • SAML 2.0 互換 ID プロバイダー (IdP)
  • Active Directory

仕組み

雰囲気で理解する

  • AWS SSOとOrganizationのメンバーアカウントを紐付ける
  • アクセス権限セットに登録されたポリシーを元に、メンバーアカウントにIAM Roleが自動生成される
  • ユーザは、この生成されたIAM Roleに基づいてSSOのコンソールからログインする
  • AWS SSO > AWSアカウントから対象のAWSアカウントを選択
  • ユーザの割り当てから対象ユーザ/グループとアクセス権限セットの組み合わせを割り当てる
    • 「このユーザはこのアクセス権限セットでAWS SSOを使ってアカウントにログインできるよ」

メンバーアカウントへのプロビジョニング

  • アクセス権限セットをアカウントに紐付けることで、メンバーアカウントにアクセス権限セットに基づいたIAMロール(AWSReservedSSO_XXX)が作成される

awscli v2 との統合

> aws sso login --profile test-hogehoge
Attempting to automatically open the SSO authorization page in your default browser.
If the browser does not open or you wish to use a different device to authorize this request, open the following URL:

https://device.sso.ap-northeast-1.amazonaws.com/

Then enter the code:

料金

AWS SSO自体に料金は発生しない
Ref:https://aws.amazon.com/jp/single-sign-on/faqs/

AWS SSO のTerraformリソース

Terraformで設定する時は次に挙げるようなリソースを使います。

Resource: aws_ssoadmin_permission_set

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ssoadmin_permission_set
Permission Setを作成するリソース

Resource: aws_ssoadmin_managed_policy_attachment

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ssoadmin_managed_policy_attachment
Permission SetにAWS管理ポリシー(Managed Policy)をアタッチする

Resource: aws_ssoadmin_account_assignment

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ssoadmin_account_assignment
AWSアカウント・ユーザ/グループ・Permission Setを紐付ける

Data Source: aws_identitystore_group

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/identitystore_group
AWSのIdentity Storeにおけるグループを取得するData Source
Azure ADなどの外部IdPによってプロビジョニングされたグループも取得できる

Data Source: aws_identitystore_user

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/identitystore_user
AWSのIdentity Storeにおけるユーザを取得するData Source
Azure ADなどの外部IdPによってプロビジョニングされたユーザも取得できる

まとめ

AWS SSO便利なので使っていきましょう

Discussion