はじめに
今回は、昨年12月に開催されたAWS re:Invent 2024付近で発表されたアップデートのうち、AWS Organizations関連で注目すべき内容を紹介します。実のところ、re:Inventでは、注目すべきアップデートは発表されず、その直前に以下の2つの大きな機能アップデートの発表がありました。
これらはいずれもAWS OrganizationsレベルでAWS利用者の操作制限を行うための機能です。これまでもサービスコントロールポリシー(SCP)で操作制限が可能でしたが、新たにリソースコントロールポリシーと宣言型ポリシーが選択することが可能となりました。似たような機能であることから、AWSの公式ドキュメントにも使い分けに関する説明がされております。わかりやすく違いがまとまっているため、一部抜粋を本稿でも引用します。
サービスコントロールポリシー | リソースコントロールポリシー | 宣言型ポリシー | |
---|---|---|---|
なぜ使うか? | IAMレベルに基づく一貫した中央集権的なアクセスコントロールを実現するため | リソースポリシーに基づく一貫した中央集権的なアクセスコントロールを実現するため | 特定のAWSサービスに基づく一貫した中央集権的なベースライン設定を強制するため |
どのように実現するか? | APIレベルで操作権限を制限 | APIレベルで操作権限を制限 | APIを介さずAWSサービスの望ましい設定を強制 |
拒否時の挙動 | 拒否時のカスタムエラーはなし | 拒否時のカスタムエラーはなし | 拒否時のカスタムエラーはあり |
ユースケースが少々イメージしにくいと思うので、よくありうると考えられるユースケースも補足します。
サービスコントロールポリシーのユースケース
利用可能なリージョンを限定する、利用可能なサービスを限定する
リソースコントロールポリシーのユースケース
S3へのアクセスはVPCエンドポイント経由に制限する、(対応済みの)AWSサービスへのアクセスはHTTPSに限定する
宣言型ポリシーのユースケース
VPC内からのインターネット接続を禁止する、AMIのパブリックアクセスを禁止する
本稿では、新たな機能であるリソースコントロールポリシーと宣言型ポリシーの具体的な利用方法を詳しく紹介します。
Organizationsのポリシー
初めに、Organizationsレベルで利用可能な7つのポリシーを紹介します。
ポリシー | 概要 | 管理アカウントへの有効性 | アタッチ最大数 | 最大サイズ | 委任管理 |
---|---|---|---|---|---|
AIサービスのオプトアウトポリシー | AWS AIサービスの利用者のコンテンツを保存および使用を目的としたデータ収集を制限 | 有効 | 5 | 2,500文字 | 未対応 |
バックアップポリシー | AWSリソースに適用するバックアッププランを一元管理 | 有効 | 10 | 10,000文字 | 対応済み |
チャットボットポリシー | Slack等チャットアプリケーションへのアクセスを制限 | 有効 | 5 | 10,000文字 | 未対応 |
タグポリシー | AWSリソースに付与されるタグの一元管理を実現 | 有効 | 10 | 10,000文字 | 対応済み |
サービスコントロールポリシー | IAMレベルに基づく一貫した中央集権的なアクセスコントロールを実現 | 無効 | 5 | 5,120文字 | 対応済み |
リソースコントロールポリシー | リソースポリシーに基づく一貫した中央集権的なアクセスコントロールを実現 | 無効 | 5 | 5,120文字 | 未対応 |
宣言型ポリシー | 特定のAWSサービスに基づく一貫した中央集権的なベースライン設定を強制 | 有効 | 10 | 10,000文字 | 未対応 |
個人的に注目した個所を太字にしました。まず、宣言型ポリシーが管理アカウントへも有効であることは1つ注目です。これまではこうしたアクセス制限に関するポリシーは誤設定への対応のためか、管理アカウントに対する制限は無効化されていました。しかし宣言型ポリシーは管理アカウントにも適用されるため、注意が必要です。
またリリースしたばかりであるからか、リソースコントロールポリシーと宣言型ポリシーはまだ委任管理には対応していません。そのため、利用時には管理アカウントでの操作が必要となってしまいます。こちらも注意が必要な点でしょう。
リソースコントロールポリシー
それでは、リソースコントロールポリシーと宣言型ポリシーの具体的な利用方法について紹介していきましょう。
リソースコントロールポリシーの有効化
前述の通り、リソースコントロールポリシーは委任管理に対応していないため、以下の操作を管理アカウントで行います。
(1)Organizationsの画面へ遷移します。
(2)サイドメニューの「ポリシー」をクリックします。
(3)「RCPを有効にする」ボタンをクリックします。
(4)正常に有効化され、下記画面が表示されることを確認します。
リソースコントロールポリシーの具体的な設定
本稿執筆時点で、リソースコントロールポリシーで制御可能なAWSサービスは以下の5つです。
- Amazon S3
- AWS Security Token Service
- AWS Key Management Service
- Amazon SQS
- AWS Secrets Manager
上記のAWSサービスの場合、まずはS3での利用を検討することが多いと思います。本稿ではエンタープライズでのセキュリティ対策の一つとして実施されることが多い「S3へのアクセスはVPCエンドポイントに限定する」という制御を行う例を説明します。
これまで、このような制御をする際には、AWS Configのカスタムルールを実装して対処することが多かったと思います。ですが、その場合はアクセスを強制的にDenyすることはできず、あくまでルールを逸脱しているS3バケットを見つける受け身的なチェックとなってしまっていました。
リソースコントロールポリシーを利用することで、S3バケットのバケットポリシーがどのような状態であっても、VPCエンドポイント経由以外のアクセスをDenyすることが可能になります。
以下が具合的な設定手順です。
(1)リソースコントロールポリシーの画面で「ポリシーを作成」ボタンをクリックします。
(2)ポリシー名と説明を入力し、以下のjsonを入力し、「ポリシーを作成」ボタンをクリックします。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "*",
"Condition": {
"StringNotLike": {
"aws:SourceVpce": "vpce-*"
},
"ArnNotLike": {
"aws:PrincipalArn": "arn:aws:iam::*:role/aws-reserved/sso.amazonaws.com/ap-northeast-1/AWSReservedSSO_AdministratorAccess_*"
},
"BoolIfExists": {
"aws:PrincipalIsAWSService": "false"
}
}
}
]
}
上記のコードはVPCエンドポイント経由での接続以外を全て拒否する設定としており、IAM Identity CenterのAdministratorAcessの権限セットを付与されているユーザとAWSサービス内の処理は例外として除外しています。
(3)サイドメニューのAWSアカウントをクリックします。
(4)今回は以下のようなOU構造の組織に対して適用を行うこととします。この中からSystemsManagerというOUを選択します。
(5)「ポリシー」タブを開き、リソースコントロールポリシーの「アタッチ」ボタンをクリックします。
(6)先ほど作成したリソースコントロールポリシーを選択し、「ポリシーのアタッチ」ボタンをクリックします。
リソースコントロールポリシーの動作確認
上記で設定は完了です。それでは実際の動作について確認していきましょう。まずはテスト用のS3バケットを作成します。初期状態は下記のようにバケットポリシーを何も記載していません。
例外で許可されているIAM Identity CenterのAdministratorAccessの権限セットのユーザでログインすると以下のようにS3バケットの中身が表示できます。
しかし、AmazonSSMRoleForInstancesQuickSetupがインスタンスプロファイルとして設定しているEC2インスタンスから以下のコマンドを叩くと、アクセス拒否のエラーが表示されており、正しくアクセス制御ができていることが確認できました。 ※AmazonSSMRoleForInstancesQuickSetupにはS3の操作権限も事前に付与してある前提です。
aws s3 ls s3://テスト用のバケット
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: User: arn:aws:sts::アカウントID:assumed-role/AmazonSSMRoleForInstancesQuickSetup/i-0e7096f9ee1701187 is not authorized to perform: s3:ListBucket on resource: "arn:aws:s3:::テスト用のバケット" with an explicit deny in a resource control policy
では、続いてVPCエンドポイント経由でのアクセスを確認します。 EC2が存在するVPCのS3のインタフェースエンドポイントを作成し、再び以下のコマンドを実行します。
aws s3 ls s3://テスト用のバケット --endpoint-url https://bucket.vpce-aaaaaaaa-xxxxxxx.s3.ap-northeast-1.vpce.amazonaws.com --region ap-northeast-1
2025-01-05 14:39:32 18828 template.yaml
正常にオブジェクトの一覧を取得できました。リソースコントロールポリシーによるアクセス制御が問題なく動作していることが確認できました。