「AWS IAM」の「ABAC」で、ポリシーを変更せずにユーザー/リソース数の多いプロジェクトに対応する:AWSチートシート
「Amazon Web Services」(AWS)活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回は、「AWS IAM」の「属性ベースアクセスコントロール」(ABAC)について解説する。
「Amazon Web Services」(AWS)活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。
AWSを利用する多くの方にとってなじみのある「AWS Identity and Access Management」(IAM)の一歩踏み込んだポリシー管理の手法として、記事『AWS活用のガードレール「IAM」の「Permissions Boundary」でアクセス境界を設定するには』ではPermissions Boundaryを利用したアクセス許可の境界を設定する方法を紹介しました。
今回の記事では「IAMエンティティ」(IAMユーザーまたはIAMロール)やAWSリソースにタグを付与することで行う属性ベースのアクセスコントロール「ABAC」(Attribute Based Access Control)について解説します。
「ABAC」とは?
ABACとは「属性ベースのアクセスコントロール」という名前の通り、ユーザーやリソースの属性に応じたアクセス制御によって、実行できる機能やアクセスできるサービスを限定する手法です。
AWSの場合、この「属性」としてIAMエンティティやAWSリソースの「タグ」を用いることができます。
また、ABACと対比されるアクセス制御の手法に「役割ベースのアクセスコントロール」(RBAC)があります。RBACも名前の通り、管理者や開発者といった役割ごとに異なるアクセス権限を付与する方法です。
ABACを利用するメリット
ロールベースでのアクセス制御は比較的作業が簡単ですが、兼務などの場合にはユーザーやロールがどんどん増えていったり、アクセス許可を最小にするには新しいリソースを作成するたびにポリシーの修正が必要(動的に権限を付与することはできない)になったりといったデメリットが存在します。
タグを利用したABACによるアクセス制御のメリットは、新しいリソースの作成時にポリシーを修正しない最小アクセスの実現(動的な権限付与ができる)ことです。また、職務機能ごとに異なるポリシーを作成する必要がないので、作成しなければならないポリシーの数も減らすことができます。
タグを利用したABACの設定手順
ABACを利用する方法を確認していきましょう。今回は下記の手順で作業します。
- テスト用の「Amazon EC2」インスタンスを2台起動
- テスト用のIAMユーザーを作成
- ABACの条件を満たす場合のみEC2インスタンスを操作できることを確認
1.テスト用のEC2インスタンスを2台起動
まずABACを利用したIAMユーザーからの操作を検証するためのリソースとしてEC2インスタンスを作成します。
今回はプロジェクト名を「Apple」「Banana」として、下記のような名前でインスタンスを作成しました(図1)。
- Project Apple Instance
- Project Banana Instance
また、各インスタンスには下記のようにタグを付与しておきます。
インスタンス名 | タグキー | タグ値 |
---|---|---|
Project Apple Instance | Project | Apple |
Project Banana Instance | Project | Banana |
2.テスト用のIAMユーザーを作成
続いてEC2インスタンスを操作するためのIAMユーザーを作成します。今回は「abac-user-apple」という名前でIAMユーザーを作成しました(図2)。
また、今回ユーザーへ付与するIAMポリシーは下記の通りです。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:StartInstances", "ec2:StopInstances", "ec2:DescribeTags" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/Project": "xxxxx", "aws:PrincipalTag/Team": "Teamxxxxx" } } }, { "Effect": "Allow", "Action": "ec2:DescribeInstances", "Resource": "*" } ] }
1つ目のポリシーでは全てのリソースを対象にEC2インスタンスの起動と停止、タグの読み取り権限を付与していますが、「Condition」でタグを指定することで、対象となるリソースやリソースに対するアクションをリクエストできるプリンシパルを限定しています。
また、作成したIAMユーザーには下記のようにタグを割り当てておきましょう。
IAMユーザー | タグキー | タグ値 |
---|---|---|
abac-user-apple | Team | TeamApple |
abac-user-banana | Team | TeamBanana |
3.ABACの条件を満たす場合のみEC2インスタンスを操作できることを確認
「abac-user-apple」からEC2インスタンスを操作してみましょう。
ご覧の通りEC2インスタンスにタグ付けしているプロジェクト名とIAMユーザーにタグ付けしているのとチーム名が一致している場合のみインスタンスが操作できることを確認できました。
終わりに
今回はIAMエンティティとAWSリソースにタグを付与することで行うABACを紹介しました。
ABACを採用することでポリシーを変更することなく利用するリソースのスケールに対応できるので、ユーザー数やリソース数の多い煩雑なプロジェクトで有効なアクセス制御方式として覚えておいてください。
筆者紹介
天野盛介(あまのせいすけ)
マルチクラウドへの閉域接続サービスのサービスマネジメント業務に従事した後、AWS案件での基盤構築支援などを担当。社内では、検証・学習用にAWSを完全定額で利用できるサービス「安心サンドボックス」の立ち上げや東京ITスクールのAWS研修におけるコンテンツ開発、Java・AWS研修の講師などを歴任。
- 著書『AWSを好きになる本 ゼロから始めるクラウドジャーニー』(インプレスR&D)
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- クラウド全面移行目前、DeNAが324のセキュリティ監査項目を8割減できた理由
DeNAは各種サービスのインフラ基盤のクラウド移行を進めており、クラウドセキュリティの対策が重要になってきていた。オンプレミス時代から実施している社内のセキュリティ監査の取り組みを、クラウドに適用した方法と、そこで見えてきた課題などが明かされた。 - AWSのロードバランサー「ALB Ingress Controller」で公開アプリのルーティング
本連載では、AWSが提供するマネージドKubernetesサービスの「EKS」を用いてアプリを公開する方法を紹介している。第4回は、ロードバランサー「ALB Ingress Controller」について。 - クラウドセキュリティの強化には、IAMとCASBの組み合わせが必要
アイデンティティー管理は今後の企業におけるクラウドセキュリティの要といえる。だが、カバーできない部分もある。これを補完するために検討したいのが、クラウドアクセスセキュリティブローカーの活用だ。