fu3ak1's tech days

何事もシンプルに。主にAWS関連の記事を書いています

AWS Organizationsを活用したマルチアカウントのセキュリティサービス使用方法 ~1. IAM、AWS SSO~

Organizationsを活用したセキュリティサービスの活用、第一弾は認証・認可にかかわるIAMとAWS SSOについて見ていきたいと思います。

Organizationsの紹介(はじめに編)はコチラ

シングルアカウントの場合

AWSアカウントを1つで運用する場合、ユーザーの認証・認可では以下の対応が必要になります。

  • ルートユーザの保護
  • 管理者および利用者のIAMユーザーの作成

それぞれマルチアカウントになるとどうするのが良いのか見ていきたいと思います。

ルートユーザの保護

ルートユーザとは、AWSアカウント作成時に設定したメールアドレスとパスワードでログインできるユーザのことを指します。Organizations経由でAWSアカウントを作成した場合も、ルートユーザは同じく存在します。

このルートユーザを保護するために、「強力なパスワードの設定」と「多要素認証(MFA)の有効化」を行いますが、現時点でOrganizationsから複数アカウント一括でこの設定をする方法はありません。そのため、各アカウントのルートユーザーでログインしてパスワードおよびMFAの設定を行う必要があります。

Organizationsからアカウントを作成した場合、AWS側でランダムにルートユーザーのパスワードが設定されます。利用者にこのパスワードは通知されないため、パスワードの初期化を行ってログインを行います。

ログイン後、MFAの有効化を行います。

f:id:fu3ak1:20201225100817p:plain

MFAの設定以外にもルートユーザのみ設定可能な以下のような項目は合わせて設定しておくと良いでしょう。

※追記:請求情報、Cost Exploerはマネジメントアカウント側で有効にすることで組織内のアカウント全てで有効になります。

  • IAMユーザーの請求情報アクセス許可 →マネジメント(親)アカウントのみでOK
  • Cost Explorerの有効化  →マネジメント(親)アカウントのみでOK
  • サポートプランの変更

ここまではシングルアカウントでやっていた作業を各アカウントそれぞれで実施するだけですね。

Organizationsを使用してルートユーザの保護方法として、Service Control Policy(SCP)を使用する方法もあります。

SCPは前回の記事でも記載のとおり、複数のアカウントにまとめてIAMポリシーのような形でポリシーを記載して、実行できる操作を制限できる機能です。

AWS公式ドキュメントにも以下のような例があり、この例ではルートユーザのEC2操作をDenyしています。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "RestrictEC2ForRoot",
      "Effect": "Deny",
      "Action": [
        "ec2:*"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringLike": {
          "aws:PrincipalArn": [
            "arn:aws:iam::*:root"
          ]
        }
      }
    }
  ]
}

ただし、すべてのルートユーザの操作を拒否できるわけではないため注意が必要です。拒否が効かない内容は以下のドキュメントに書いてあります。

docs.aws.amazon.com

ルートユーザの保護はここまでです。

IAMユーザの作成、管理

シングルアカウントの場合、アカウント内の利用用途に応じて、用途ごとにIAMグループを作成し、個人ごとのIAMユーザーをグループに適用していくのが良いかと思います。 複数アカウントになった場合、アカウントごとにIAMユーザーを作成していくと、認証情報(ID、パスワード、アクセスキー)が多くなり、管理も煩雑になります。 認証情報が多くの場所にできると、セキュリティリスクにもなります。

そこで認証情報の一元管理ができ、Organizationsとも連携できる機能がAWS SSOAWS Single Sign-On)です。概要と開始方法を書いていきます。

AWS SSOとは

AWS SSOは、複数AWSアカウントの認証情報を一元管理してシングルサインオンの機能を提供するサービスです。 ID、パスワードはもちろん、認可の情報(IAMポリシー、どのActionができるか)も合わせて一元管理できるすばらしいサービスです。

実際の設定と画面を見たほうがわかりやすいと思いますので、開始方法をまずは書いていきます。

AWS SSOの開始方法

以下のような構成で試していきます。マネジメント配下に2アカウントあり、それぞれ別のOU(組織単位)に属しています。 OUには複数アカウント所属することも可能です。

AWS SSOは、アカウントの委任には対応していないため、マネジメントアカウント上で設定する必要があります。

f:id:fu3ak1:20201225104833p:plain

なお、AWS SSOで管理するIDはMicrosoft Active Directoryなど、外部のIDプロバイダーを指定することも可能です。今回はAWS内でできる限り完結するために、AWS SSO内でIDの設定を行いたいと思います。

Azure ADでの設定方法は以下の記事で書いていますので、参考にしてもらえればと思います。(一部設定作業は今回と同様になります。)

fu3ak1.hatenablog.com

それでは設定していきます。 マネジメント(親)アカウントのIAMユーザーでログインします。

AWS SSO画面に遷移し、有効にします。

f:id:fu3ak1:20201219230930p:plain

Organizationsの組織が作成されていない場合は、以下のとおり表示されます。 AWS組織の作成を押すことで、組織が自動作成されます。

Organizations側から組織を作成済みであればこの画面は出ないかと思います。

f:id:fu3ak1:20201218225714p:plain

組織の新規作成時は、メールの検証が必要となるため、アカウントのメールアドレスに届いたメールを確認して青いボタンを押しておきます。

f:id:fu3ak1:20201218225915p:plain

30秒ほどでSSOの設定は完了すると思います。

ユーザー、グループの作成

ユーザー単独ではなくグループ単位で権限管理するため、まずはグループを作成します。

f:id:fu3ak1:20201225113313p:plain

管理者用にadminというグループを作成します。

f:id:fu3ak1:20201225113340p:plain

続いてはユーザーです。

f:id:fu3ak1:20201225113452p:plain

必須項目であるユーザー名、メールアドレス、氏名情報のみ入力します。

f:id:fu3ak1:20201225124704p:plain

先ほど作成したadminグループに所属させ、ユーザーを追加します。

f:id:fu3ak1:20201225125051p:plain

以下のように登録したメールアドレスにメールが届くので青いボタンを押しておきます。

f:id:fu3ak1:20201225125502p:plain

パスワードを設定してログインはできますが、まだAWSアカウントの設定をしていないためアプリケーションが無いと表示されます。

f:id:fu3ak1:20201225125618p:plain

f:id:fu3ak1:20201225125705p:plain

アクセス権限セットとアカウントの設定

AWSアカウントにログインできるよう設定していきます。まずは権限を設定するアクセス権限セットです。

f:id:fu3ak1:20201225125906p:plain

今回はAWS側で職務単位で用意されている職務機能ポリシーを使用します。

※本番運用時は、必要な権限を決めて最低限の権限となるように付与しましょう。

f:id:fu3ak1:20201225132327p:plain

管理者用にAdministratorAccessを付与します。

f:id:fu3ak1:20201225133058p:plain

タグは特に設定せず、内容確認して作成します。

f:id:fu3ak1:20201225134254p:plain

作成できました。

f:id:fu3ak1:20201225134334p:plain

続いてログインする対象のアカウントを選択します。 アカウント一覧はOU単位で表示されます。今回はsystem01アカウントとauditアカウントの2つを選択して、ユーザーを割当します。

f:id:fu3ak1:20201225140755p:plain

f:id:fu3ak1:20201225141508p:plain

作成しているグループadminに割当します。

f:id:fu3ak1:20201225142554p:plain

作成した権限セットを選択して完了します。

f:id:fu3ak1:20201225142530p:plain

しばらくするとアカウント側の設定が完了します。詳細を見ると、アカウント側でIAMロールが作成されていることがわかります。

f:id:fu3ak1:20201225142935p:plain

MFAの設定

ログイン時にMFAを強制するよう設定します。ここも一括でできるのがAWS SSOの魅力ですね。

f:id:fu3ak1:20201225144337p:plain

サインインのたびに要求し、登録がない場合は登録を要求するようにして保存します。

f:id:fu3ak1:20201225144458p:plain

ログイン確認

SSOの設定が完了したので、作成したユーザーでログインしてみます。 ログイン用のURLはAWS SSOのTopにも表示されています。

f:id:fu3ak1:20201225144650p:plain

ユーザー名、パスワードを入力すると以下のようにMFAを設定する画面が表示されます。 指紋認証も可能な「組み込みの認証アプリ」を使用しようとしたのですが、私のPCが対応してないようだったので、今回は認証アプリを使用します。

スマホでログイン画面を見た場合は、指紋認証も設定できそうでした。

f:id:fu3ak1:20201225150209p:plain

認証アプリでQRコードを読み取って、表示された番号を入力して設定します。

f:id:fu3ak1:20201225150609p:plain

f:id:fu3ak1:20201225150643p:plain

なお、私だけ、たまたまなのかもしれないですが、初回は以下のようにエラーとなりました。 再度ログインURLにアクセスすることでログインできました。

f:id:fu3ak1:20201225150828p:plain

ログインが完了すると、以下のようにアクセス可能なAWSアカウントが一覧で表示されます。 system01アカウントのマネジメントコンソールへアクセスします。

f:id:fu3ak1:20201225151636p:plain

ログインできました。

f:id:fu3ak1:20201225151244p:plain

AWS SSOの設定は以上です。

AWS SSOのポイント

利用方法が理解できたところで、あらためてAWS SSOのポイントです。

認証・認可の管理を一ヵ所で行える

これが一番大きなポイントかと思います。MFAの強制もAWS SSO1ヵ所で設定してすべてのSSOユーザーに有効にできるのはとても良いですね。

f:id:fu3ak1:20201225152549p:plain

CLIが使用できる

本記事の手順では紹介しませんでしたが、マネジメントコンソールへ入るときに、「Command Line or …」を選択すると一時的なアクセスキーを発行できます。 より安全な形でキーの発行、CLIの利用が可能になります。

f:id:fu3ak1:20201225153039p:plain

AWS以外のアプリも使用できる

AWSアカウントへのログインをメインとしてAWS SSOがよく利用されますが、他のアプリへのログインも可能です。随時使用できるアプリは増えているようです。設定はSSO>アプリケーションから可能です。

AWS SSOをIDのベースにして他アプリへのログインといった管理もできますね

f:id:fu3ak1:20201225153312p:plain

外部IDプロバイダとの連携も可能

設定手順の最初にも書きましたが、外部IDとの連携機能も嬉しいですね。たとえば普段の業務ではActive Directoryの認証を使用している場合、その認証でAWSへログインするといった運用も可能です。

さいごに

本記事ではマルチアカウントのセキュリティサービス紹介の第一弾としてAWS SSOをメインに紹介しました。

認証・認可のところはAWSの使用開始にも必要であり非常に重要な部分でありますので、できるだけ早く検討、設定することをおススメします。

次回はコスト管理のサービスをまとめていきたいと思います。

次回はコチラ