SCP を活用してマネジメントコンソールにログイン可能な IAM ユーザの作成を禁止する

記事タイトルとURLをコピーする

CI部 佐竹です。
本日は AWS Organizations の SCP を活用し、ジャンプアカウントを除いたその他の AWS アカウントで「マネジメントコンソールにログイン可能な IAM ユーザ」の作成を組織レベルで禁止してみます。

はじめに

AWS Organizations の SCP を活用することで、組織単位で制御を行うことが可能です。以下のブログはその一例です。

blog.serverworks.co.jp

本日は IAM のジャンプアカウント(踏み台アカウント)に関連する制御になります。

ジャンプアカウントとは

f:id:swx-satake:20210816135139p:plain

ジャンプアカウントとは、上図における「IAM Management Account」である 111122223333 のことを指しています。ここでは 111122223333 を「IAM管理アカウント」と呼ぶことにします。

「IAM管理アカウント」は、マネジメントコンソールにログインする IAM ユーザの管理を司るアカウントです。つまり、 111122223333 にのみマネジメントコンソールにログインすることが可能な IAM ユーザを作成します。

f:id:swx-satake:20210816140154p:plain
AWS マネジメントコンソールにログインする時はジャンプアカウントを経由する

このような組織構成においては、AWS マネジメントコンソールにログインする場合は、常にジャンプアカウント(IAM管理アカウント)を経由することになります。

f:id:swx-satake:20210816140259p:plain
その他のアカウントを利用する場合は、スイッチロールを行い権限とアカウントをセットで切り替える

ジャンプアカウント(IAM管理アカウント)以外にアクセスする必要がある場合は、スイッチロールを行い権限とアカウントをセットで切り替えてログインします。

スイッチロールについては以下を参考ください。

blog.serverworks.co.jp

IAM ユーザに許可できるアクセスタイプは2種

IAM ユーザに許可できるアクセスタイプは2種あり、プログラムによるアクセスと、AWS マネジメントコンソールへのアクセスです。

今回「マネジメントコンソールにログインする IAM ユーザ」と記載しているのは、後者のAWS マネジメントコンソールへのアクセスについて記載しているためです。プログラムによるアクセス、つまり Credentials 払い出しの必要性から各 AWS アカウント(メンバーアカウント)には IAM ユーザが払い出されることがありますので、そのような払い出しは許可することを想定する必要があります。

しかし「マネジメントコンソールにログインする IAM ユーザ」を各 AWS アカウントに作成されてしまっては、ジャンプアカウント(IAM管理アカウント)で IAM ユーザを管理している意味がなくなってしまいます

他にも、ジャンプアカウント(IAM管理アカウント)では IAM パスワードポリシーを厳しく設定しているとしても、他のアカウントではされておらず初期設定のままということもあります。

f:id:swx-satake:20210816141733p:plain
マネジメントコンソールへのログインを禁止したい

このような背景から、マネジメントコンソールにログインすることが可能な IAM ユーザを各 AWS アカウントで作成できないように制御したいという要望が生まれます。

3種の API を理解する

CreateUser

1つ目は CreateUser です。これは IAM ユーザを払い出す API 操作です。

docs.aws.amazon.com

注意したいのが、マネジメントコンソールで IAM ユーザを作成すると、プログラムによるアクセスと、AWS マネジメントコンソールへのアクセスが同時に付与されるためこの CreateUser 1つで全てが完了しているように見えるのですが、裏では次の2つの API がコールされます。

CreateAccessKey, CreateLoginProfile

コールされるのは CreateAccessKeyCreateLoginProfile です。

docs.aws.amazon.com

docs.aws.amazon.com

このうち、マネジメントコンソールにログイン可能とする API が CreateLoginProfile です。つまり CreateLoginProfile を実行させないようにすれば、IAM ユーザの作成は許可するもののマネジメントコンソールにログインするユーザを作成させない、というきめ細やかな制御ができるとなります。

作成したSCP

実際に作成した SCP(サービスコントロールポリシー)は以下の通りです。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Statement1",
      "Effect": "Deny",
      "Action": [
        "iam:CreateLoginProfile"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "ForAllValues:StringNotLike": {
          "aws:PrincipalArn": [
            "arn:aws:iam::*:root",
            "arn:aws:iam::111122223333:*"
          ]
        }
      }
    }
  ]
}

Condition において "arn:aws:iam::111122223333:*" を例外(StringNotLike)として指定しています。このため、この SCP を Root に紐づけることで全アカウントに継承されるとしても 111122223333 のアカウントでは IAM ユーザに対して「マネジメントコンソールにログインする権限」を付与可能となります。

※緊急回避が可能なように、各 AWS アカウントの root では作成可能としています

動作確認

実際にこの SCP を Root に紐づけた状態で動作確認を行いました。

IAM ユーザをコンソールアクセスありで新規に作成した場合

f:id:swx-satake:20210816151018p:plain

IAM ユーザをマネジメントコンソールから作成した場合、エラーが発生します。

Could not create login profile for user test1-satake@serverworks.co.jp:
User: arn:aws:sts::444455556666:assumed-role/ServerworksControlRolePU/satake@serverworks.co.jp is not authorized to perform: iam:CreateLoginProfile on resource: user test1-satake@serverworks.co.jp with an explicit deny

これは CreateUser 自体は成功し、IAM ユーザは作成されるものの CreateLoginProfile には失敗したというエラーになります。

f:id:swx-satake:20210816151331p:plain

ユーザの詳細を確認すると、マネジメントコンソールログインに必要なパスワードの設定が行われていないことが確認できました。

f:id:swx-satake:20210816151658p:plain

この状況で、コンソールのパスワードを有効化するとどうなるか見てみます。つまり作成済の IAM ユーザに対してのパスワード有効化のアップデートができないことを確認します。

f:id:swx-satake:20210816152026p:plain

この画面でも同様にパスワードの設定ができないことが確認できました。期待通りの動作です。

まとめ

f:id:swx-satake:20200818185726p:plain:w150

本日は AWS Organizations の SCP を活用し、ジャンプアカウントを除いたその他の AWS アカウントで「マネジメントコンソールにログイン可能な IAM ユーザ」の作成を組織レベルで禁止する設定を行い、実際に動作検証も行いました。

iam:CreateUser ではなく iam:CreateLoginProfile を特定のアカウント以外で禁止することで、ジャンプアカウント(IAM管理アカウント)を正しく運用できるようになります。ジャンプアカウント(IAM管理アカウント)以外に直接マネジメントコンソールにログインさせたくないという運用をされてる方は参考にしてみてください。

それではまたお会いしましょう。

佐竹 陽一 (Yoichi Satake) 記事一覧はコチラ

SRE3課所属。2010年1月からAWSを利用してきました。
2021 Japan APN Ambassador /2020-2021 APN ALL AWS Certifications Engineer。AWSのコスト削減、最適化を得意としています。