TOP>コラム一覧>Permissions boundaryを使ってみた

Permissions boundaryを使ってみた

はじめに

こんにちは。CTCの朴木です。

みなさんPermissions Boundaryって利用されていますでしょうか。

私のPermissions boundaryの最初のイメージはIAMポリシーみたいなもの、IAMポリシーと合わせて権限を制御するものというふわっとした印象しかもっていませんでした。
IAMポリシーとどう使い分けたらいいのか自分の中で整理できていなかったため、この機会に知識を深めるべく、今回はこのポリシーについて記載していきます!
今後、IAMの管理を委任したいと考えているという方はご参考いただけると嬉しいです。

Permissions Boundaryとは

Permissions Boundaryは「アクセス許可の境界」として、IAMユーザやIAMロールに対して、IAMポリシーに加えて付与することができるポリシーです。Permissions Boundaryを設定することで、アイデンティティベースのポリシーとそのアクセス許可の境界の両方で許可されているアクションのみが実行可能となります。
IAMポリシーとPermissions BoundaryポリシーがIAMユーザに付与されている場合、そのIAMユーザは共通している権限の範囲までしかアクセスできず、下記のような例の場合はIAMとS3の読み取りアクセスしかできません。

IAMポリシーを2つ付与すればいいのでは?
と思うかもしれません。たしかに1つや2つのユーザを作成するだけであればIAMポリシーを付与するだけで事足りることでしょう。
しかし、AWS環境の規模が大きくなり、それにともない開発者や運用者などのユーザ増えたとき、IAMユーザやロールに付与すべき権限を管理しきれるでしょうか。制限すべき権限の付与に関してミスを防ぐためにもIAMの運用について見直しが必要になってきます。
Permissions Boundaryが利用される具体的なケースとしては、AWS環境の統括管理者がIAMユーザ・ロール等を発行する担当者に対して安全にIAM管理を委任するために利用されます。

Permissions Boundaryを用いるときは、制限したいアクセス権限の付与はもちろんですが、加えて、そのPermissions Boundaryポリシーが付与されていることを条件にIAMユーザやIAMロールを作成することをポリシーの権限内に組み込めば、制限したいアクセス権限を抜け漏れなく付与されたユーザ・ロールのみが作成されることになります。

今回は例として下記の要件があることを想定して権限を作成します。
AWS環境管理者はIAM関連(作成・変更・削除)の管理はIAM管理者に委任し、特定の証跡のみ設定変更をできないようにしたいと考えています。IAM管理者にはIAMフルアクセスを付与します。そして安全な委任(付与する権限のミスを最小限にする)のためにはPermissions boundaryを利用して、そのPermissions boundaryが付与されていない場合にはIAMユーザ・ロールの作成ができないようにしたいです。

  • AWS環境内全体の要件
    • 特定の証跡の変更削除不可
  • IAM管理の要件
    • 付与しているPermissions boundaryポリシーの変更削除
    • 作成するIAMユーザ・IAMロールにはPermissions boundaryを付与する

それでは上記の要件を踏まえてPermissions boundaryポリシーを作成してみましょう!

Permissions boundary ポリシー内容

下記内容でPermissions boundaryポリシーを作成します。

  • Permissions boundaryのポリシー名:TestPermissionsBoundary
  • Permissions boundaryの内容
    • 「test-cloudtrail」の証跡設定の変更・削除を禁止する
    • Permissions boundary(許可の境界)に「TestPermissionsBoundary」ポリシーが付与されていないIAMユーザ・IAMロールの作成を禁止する
    • 「TestPermissionsBoundary」ポリシーの変更・削除を禁止する

  {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AdministratorAccess",
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*"
        },
        {
            "Sid": "DenyCloudtrailModify",
            "Effect": "Deny",
            "Action": [
                "cloudtrail:DeleteTrail",
                "cloudtrail:PutEventSelectors",
                "cloudtrail:StopLogging",
                "cloudtrail:UpdateTrail"
            ],
            "Resource": "arn:aws:cloudtrail:ap-northeast-1:*:trail/test-cloudtrail"
        },
        {
            "Sid": "DenyBoundaryPolicyModify",
            "Effect": "Deny",
            "Action": [
                "iam:CreatePolicyVersion",
                "iam:DeletePolicy",
                "iam:DeletePolicyVersion",
                "iam:SetDefaultPolicyVersion"
            ],
            "Resource": [
                "arn:aws:iam::xxxxxxxxxxxx(アカウントID):policy/TestPermissionsBoundary"
            ]
        },
        {
           "Sid": "DenyWithoutBoundary",
          "Effect": "Deny",
          "Action": [
              "iam:CreateRole",
              "iam:PutRolePolicy",
              "iam:PutRolePermissionsBoundary",
              "iam:CreateUser",
              "iam:PutUserPolicy",
              "iam:PutUserPermissionsBoundary"
          ],
          "Resource": "*",
          "Condition": {
              "StringNotEquals": {
                  "iam:PermissionsBoundary": "arn:aws:iam::xxxxxxxxxxxx(アカウントID):policy/TestPermissionsBoundary"
              }
          }
        }
      ]
  }
    

このポリシーのポイントは「"Sid": "DenyWithoutBoundary"」と「"Sid": "DenyBoundaryPolicyModify"」の制限です。
"Sid": "DenyWithoutBoundary"に記載している権限より、「TestPermissionsBoundary」ポリシーがない場合にIAMユーザ・ロールの作成を制限し、"DenyBoundaryPolicyModify"に記載している権限より、このPermission Boundaryポリシーの変更・削除ができないようになっています。よって作成されるIAMユーザ・ロールは必ず本ポリシーが付与されるのに加え、Permission Boundaryポリシーの変更・削除もできないため、安全にIAM管理を委任することが可能になります。

Permissions boundaryの設定方法

それでは早速設定してみましょう!
AWSコンソールへログインし、検索画面からIAMサービスを検索してサービス画面へ遷移します。

左ペインの「ポリシー」を選択し「ポリシーの作成」ボタンをクリックします。

「JSON」ボタンをクリックします。上記にて記載した「TestPermissionsBoundary」ポリシーの内容を記載し、「次へ」ボタンをクリックします。

ポリシー名を入力し、「ポリシーの作成」ボタンをクリックします。

これでPermissions boundaryのポリシー作成が完了しました!
それではIAM管理者のユーザを作成し、Permissions boundaryを設定しましょう。IAM管理者にはIAMFullAccessの権限を付与します。

左ペインの「ユーザー」を選択し「ユーザーの作成」ボタンをクリックします。

ユーザー名を入力し、AWSマネジメントコンソールへのユーザーアクセスを可能にするようチェックをいれて「次へ」ボタンをクリックします。

許可ポリシーに「IAMFullAccess」を入力し、ポリシーにチェックをいれます。「許可の境界を設定 - オプション」のタブを開き、チェックボックスにチェックをいれ、先ほど作ったポリシー名を入力し、ポリシーを選択して「次へ」ボタンをクリックします。

内容を確認し、「ユーザーの作成」ボタンをクリックします。

これでIAM管理者のユーザ作成が完了しました!

検証

それでは試しにIAMユーザを払い出してみましょう。
さきほど作成したIAM管理者ユーザにてコンソールへログインし、ReadOnly権限を付与したIAMユーザを作成してみます。
まずはPermission Boundaryポリシーを設定せずに作成してみます。
下記の設定でユーザを作成してみます。

すると下記のエラーが表示され、Permission Boundaryが設定されていないため、やはり作成できませんでした。

では、Permission Boundaryポリシーを加えて作成してみましょう。

「TestPermissionsBoundary」ポリシーをPermission Boundaryに設定することで、作成が完了できました!

おわりに

いかがでしたでしょうか。
Permission Boundaryポリシー内に、アクセス制限したい内容に加え、そのポリシーの変更・削除を禁止することと、Permission Boundaryポリシーが設定されていないIAMユーザ・ロールの作成を禁止することについて権限を記述しておけば、IAM管理者は意図しない(アクセス制限ができていない)ユーザ・ロールの作成を未然に防ぐことが可能になります。
Permission Boundaryをうまく活用することによりIAMユーザ・ロール作成等で発生しうるリスクの回避につながるため、これからIAM管理の委任を考えている方はぜひ取り入れてみてください。

CTCは、AWSのビジネス利活用に向けて、お客様のステージに合わせた幅広い構築・運用支援サービスを提供しています。
経験豊富なエンジニアが、ワンストップかつ柔軟にご支援します。
ぜひ、お気軽にお問い合わせください。

お問い合わせ



【著者プロフィール】

朴木 瞳(ほうのき ひとみ)

伊藤忠テクノソリューションズ株式会社 クラウドエンジニア

AWSのインフラ構築や技術QAを経験し、現在はアカウント管理に従事。従量削減のためのRIのコストシミュレーションにおいてお客様を支援中。

TOP>コラム一覧>Permissions boundaryを使ってみた

pagetop