自由気ままに書いちゃおう

好きなことをつらつらと・・・

【AWS】AWS Organizations(その3:SCP)

今回は、サービスコントロールポリシー(SCP)についてです。

www.guri2o1667.work

www.guri2o1667.work

 

■サービスコントロールポリシー(SCP)とは

IAMユーザにIAMポリシーを適用するように、
メンバーアカウントに対してポリシーを適用することができます。
メンバーアカウントに対するポリシーをSCPと呼びます。
※マスターアカウントにSCPは適用できません。

■SCP利用の前提

SCPを利用する際、AWS Organizationsの機能セットは「All Features」が選択されている必要があります。
機能セットが「一括請求」の場合にはSCPは利用できません。
組織の設定にて、現在の機能セットがどうなっているかを確認することができます。
下記の場合には「All Features」が有効化されています。

f:id:guri2o1667:20210808141838p:plain

■SCPの適用箇所について

SCPは以下の3つの箇所に適用することができます。
① 組織ルート
② OU
③ メンバーアカウント(念のためですがマスターアカウントは適用不可です。)

①の組織ルートですが、
これはOrganizationsの以下の「Root」というところを指します。

f:id:guri2o1667:20210808142116p:plain

②のOUは特に説明はありません。

③のメンバーアカウントですが、メンバーアカウント内のIAMユーザに対するSCPだけではなく、ルートアカウントに対してもSCPの対象とすることができます。
そのため、ルートアカウントを今まで制御できず管理に困っていた場合には、SCPを利用することが制御できるようになります。

■SCPの考え方

SCPは、AWSサービスやAWSAPIのアクションについて制御(Allow/Deny)することができます。
SCPによるポリシーの書き方はIAMポリシーと同じです。
ただし、EffectとActionのみ設定可能です。
Resourceは*固定であり、Principalは利用不可です。

よくあるのは、ホワイトリスト形式とブラックリスト形式のどちらかでSCPを利用するパターンです。
尚、SCPでは「暗黙的な拒否」がデフォルト設定です。
公式ページ: SCP を使用した戦略 - AWS Organizations

そのため、利用可能なアクションを明示的に許可する必要があります。

【ホワイトリスト形式】
指定したサービスやアクションを許可するポリシーのことです。
※指定外のものは拒否扱いになります。

【ブラックリスト形式】
指定したサービスやアクションのみを拒否するポリシーです。
※指定外のものは許可扱いになります。

■組織ルートに割り当てられたSCPとOUに割り当てられたOUについて

SCPは、組織ルート(Root)と各OUの両方に違ったSCPを適用することができます。
また、そこに対してIAMユーザのIAMポリシーも関わってきます。

SCPがホワイトリスト形式の場合には、以下のようなAND条件にて実行可能なアクションが決定されます。

f:id:guri2o1667:20210808143258p:plain
引用元:https://d1.awsstatic.com/webinars/jp/pdf/services/20180214_AWS-Blackbelt-Organizations.pdf


SCPがブラックリスト形式(デフォルト)では、SCPによる拒否が最強です。
仮にIAMポリシーで許可していた場合でも、SCPにより対象のアクションは拒否となります。

■SCPを設定する

それでは、実際にやってみます。
今回はアクションがEC2のものを全て拒否するSCPを作成します。

1.マスターアカウントにて「サービスコントロールポリシー」をクリックします。

f:id:guri2o1667:20210808143952p:plain


2.「サービスコントロールポリシーを有効にする」をクリックします。

f:id:guri2o1667:20210808144015p:plain

3.自動的に「FullAWSAccess」というSCPが作成されます。

f:id:guri2o1667:20210808144057p:plain

※当該SCPは修正することができません(AWSマネージドなSCPです。)

f:id:guri2o1667:20210808144207p:plain

尚、当該SCPは「サービスコントロールポリシー」を有効化した時点で作成されている組織ルート(Root)、OU、メンバーアカウントに自動的にアタッチされます。

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

f:id:guri2o1667:20210808144337p:plain


5.ポリシー作成画面が表示されるため、必要事項を入力し、画面右下の「ポリシー作成」をクリックします。
※JSON形式のウィザードおよび入力補助機能があります。

f:id:guri2o1667:20210808144721p:plain

f:id:guri2o1667:20210808144744p:plain


最終的なJSON形式のポリシーは以下のようになりました。

f:id:guri2o1667:20210808144945p:plain


6.作成されるとサービスコントロールポリシーの一覧に表示されます。

f:id:guri2o1667:20210808145022p:plain

7.作成したポリシーをクリックします。

8.「ターゲット」タブをクリックし、「アタッチ」をクリックします。

f:id:guri2o1667:20210808145327p:plain

9.アタッチ対象のラジオボタンを選択し、「ポリシーのアタッチ」をクリックします。

f:id:guri2o1667:20210808145444p:plain

10.アタッチに成功すると、以下のように「ターゲット」欄に表示されます。

f:id:guri2o1667:20210808145550p:plain

 

■SCPの挙動を確認する

それでは、dev1-memberにスイッチロールをし、
EC2へのアクションが拒否されるかどうかを確認してみます。

以下のようにEC2ダッシュボードではAPIエラーとなり、かつ「インスタンス」をクリックしても、「You are not authorized to perform this operation.」と表示されます。
期待通りの挙動になりました。

f:id:guri2o1667:20210808145816p:plain

f:id:guri2o1667:20210808145802p:plain

■SCPを削除

後始末をしておきます。
作成したSCPを削除します。

アタッチされているSCPは削除不可です。
そのためデタッチしてから削除する必要があります。

1.SCPをクリックし「ターゲット」欄から対象エントリを選択後、「デタッチ」をクリックします。

f:id:guri2o1667:20210808150201p:plain

2.「デタッチ」をクリックします。
f:id:guri2o1667:20210808150214p:plain


3.「削除」をクリックします。
f:id:guri2o1667:20210808150234p:plain

4.ポリシー名を入力し、「削除」をクリックします。
f:id:guri2o1667:20210808150243p:plain


以上です。

 

www.guri2o1667.work