📝

サービスコントロールポリシー (SCP)の継承を試してみた!

6 min read

以前、
サービスコントロールポリシー (SCP)ってなんだろ?
という記事を書いたときに、SCPには継承の仕組みがあることを知りました。
SCP自体設定したことがなかったので、まずは
サービスコントロールポリシー (SCP)を試してみた
という記事で、実際にSCPを設定してみました。
初歩的なSCPの設定ができたところで、今回は継承について試してみます。

参考手順

[Organizations] SCP(サービスコントロールポリシー)の継承の仕組みを学ぼう | DevelopersIO

SCP継承を考える際のポイント

  • 「暗黙のDeny」を把握する

暗黙のDeny < 明示的なAllow < 明示的なDeny

何かのサービスに関する許可または拒否を設定したポリシーのみをアタッチした場合、指定したサービス以外は暗黙的にアクセスが拒否されるという内容ですね。

  • SCP継承は「フィルター」である

SCPの継承は 許可を通すフィルター です。 「フィルター」がポイントです。 フィルター は 許可を通しますが、許可は与えません 。
image.png

前提

前提として、AWS Organizationsでマスターアカウントの設定と別アカウントの追加は済んでいるものとします。
以下のような組織構造をあらかじめ作成しておきました。
image.png

Root直下にTestOU、その下にTestOUChild、その中にアカウントがあるという状態です。

拒否リスト形式のアクセス権限

今回はIAMとEC2へのアクセスを拒否するよう設定します。
image.png

今回の場合、TestOUにIAMへのDeny、TestOUChildにEC2へのDenyを設定することになります。

ポリシーの作成

IAMとEC2の拒否用ポリシーを作成します。
AWS Organizationsコンソールの左側から「ポリシー」をクリックします。
image.png

「サービスコントロールポリシー」をクリックします。
image.png

「ポリシーを作成」をクリックします。
image.png

ポリシー名と説明を入力します。
image.png

サービスからIAMを選択します。
image.png

All actionsを選択し、IAMのすべてのアクションを拒否します。
image.png

「2.リソースを追加する」をクリックします。
image.png

AWSサービスはIAM、Resource typeはAll Resourcesを選択し、「リソースの追加」をクリックします。
image.png

右下の「ポリシーの作成」をクリックします。
image.png

このようなポリシーが作成されました。
image.png

続けてEC2の拒否用ポリシーも作成しますが、ポリシー名、説明、サービスの選択部分以外は同じ手順なのでできあがったポリシーだけご覧ください。
image.png

ポリシーのアタッチ

作成したポリシーを各OUにアタッチします。
まずはIAM拒否用のポリシーを親OUにアタッチするため、「アクション」から「ポリシーのアタッチ」をクリックします。
image.png

親OUであるTestOUを選択し、「ポリシーのアタッチ」をクリックします。
image.png

同様の手順でEC2拒否用のポリシーを子OUにアタッチします。
image.png

image.png

これで各OUにポリシーがアタッチされました。
各OUのポリシー状況は以下の通りです。

image.png

image.png

動作確認

今回はTestOUChildに存在するアカウントのIAMユーザーで試してみます。
まずはIAMコンソールです。アクセスが拒否されています。
image.png

続いてEC2コンソールです。こちらも拒否されています。
image.png

ロードバランサーのみエラーが出ないのは、ロードバランサー関連のアクセス権限がEC2のサービス単位ではなく、Auto Scalingのサービス単位だからです。ここからわかる通り、親OUと子OUにアタッチしたポリシーによりIAMとEC2は明示的な拒否となり、ロードバランサーなどのその他のサービスについてはフィルターで除外されていないのでフルアクセスが可能となっています。
許可フィルターによってIAMとEC2だけ弾かれたというかんじです。

許可リスト形式のアクセス権限

今度は許可リスト形式で明示的な許可を与えてみます。
細かいコンソールでの設定方法は大体先ほどと同じなので、各OUのアクセス権限だけご覧ください。

親OU

親OUにはS3、Lambda、IAMのすべてのリソースへのアクセスを許可し、デフォルトのAWSFullAccessはデタッチしました。
image.png

子OU

子OUにはS3とLambdaのすべてのリソースへのアクセスを許可し、デフォルトのAWSFullAccessはデタッチしました。
image.png

動作確認

S3とLambdaにはアクセスできて、IAMとその他サービスでは拒否されればOKです。

S3
image.png

Lambda
image.png

IAM
image.png

EC2
image.png

明示的に許可したサービスのうち、親でも子でも許可されたS3とLambda以外は暗黙のDenyによって弾かれることが確認できました。

まとめ

今回はSCPの継承について試してみました。
「暗黙のDeny」と「フィルター」が実際に設定してみてよくわかりました。これらを理解できると、ブログでも紹介されている「ダメな例」も理解できると思いますので、そちらもぜひご覧ください。
どなたかの参考になれば幸いです。

Discussion

ログインするとコメントできます