タグとIAMポリシーを用いたAWSリソースへのアクセス制御
背景
今回は、タグとIAMポリシーを用いたAWSリソースのアクセス制御方法について学習したので、簡単にまとめてみました。
これからAWSリソースのアクセス制御について学習したいといった方の参考になれば幸いです。
タグ でアクセス制御 とは ?
AWSでは、「タグ」というキーとバリューのペア(例:環境(key) = 本番(value))を各AWSリソースに付与・設定することができます。このタグを使うと、誰がどのリソースにアクセスできるかを細かくコントロールすることができます。これを「ABAC(Attribute-Based Access Control:属性ベースのアクセス制御)」と呼びます。
タグ を使うとできること
IAMユーザーやロールにタグを付けておくと、「このタグを持った人だけが、このタグを持ったリソースにアクセスできる」といったルールをIAMポリシーで書けるようになります。
例
部署=開発 のタグがついたユーザーやロールだけが、部署=開発 のタグがついたS3バケットにアクセスできるようにする。
タグ でアクセスを制御できる対象
タグでアクセスを制御できる対象は以下の通りです。
- IAMユーザー / ロール
- カスタマー管理ポリシー
- IAM IDプロバイダー
- インスタンスプロファイル
- サーバー証明書
- 仮想MFAデバイス
AWSのアクセス制御の流れ(タグを使う前に知っておくべきこと)
タグを使用する前に、そもそものAWSリソースへのアクセス制御の流れを把握しておきたいと思います。
アクセス制御の流れのイメージは、下記の通りです。
- ユーザーがAWSに何か操作をリクエストする(例:S3にファイルをアップロード)。
- リクエストには以下の情報が含まれる
- 誰が(プリンシパル:ユーザーやロール)
- 何を(アクション)
- どこに(リソース)
- どんな条件で(タグなど)
- AWSはそのリクエストに対して有効なポリシーを調べ、「許可されているかどうか」を判断する。
上記のような流れで、リクエストに対して、AWSリソースへアクセス可能かどうかを判断・制御しています。
タグを使って制御する方法
タグを用いたAWSリソースへのアクセス制御は、IAMポリシーで「条件(Condition)」を指定することで様々な要件を満たすことができます。タグを用いたアクセス制御の方法としては、以下の3つの方法があります。
- リソースベースの条件
"Condition": {
"StringEquals": {
"aws:ResourceTag/部署": "開発"
}
}
上記のポリシーは、リソースに 部署=開発 のタグが付いているときだけ許可するという意味になります。
- リクエストに含めるタグの条件
"Condition": {
"StringEquals": {
"aws:RequestTag/プロジェクト": "Alpha"
}
}
上記のポリシーは、「タグ付きリソースを作成する」などのリクエストに プロジェクト=Alpha のタグが含まれていれば許可するという意味になります。
- タグキーそのものを制限
"Condition": {
"ForAllValues:StringEquals": {
"aws:TagKeys": ["プロジェクト", "部署"]
}
}
上記のポリシーは、プロジェクト や 部署 というタグキー以外は使えないようにするという意味になります。
※実際にタグベースのアクセス制御を使いたいときは、対象サービスがタグ制御をサポートしているかを確認しましょう(こちらの「ABAC」列が「はい」なら対象サービスがタグ制御をサポートしているということになります)。
まとめ
今回は、タグとIAMポリシーを用いたAWSリソースへのアクセス制御 について簡単に紹介してみました。
まだ、タグベースでAWSリソースへのアクセス制御を管理・設定したことがないので、今後は実務で使っていきたいと思います。
参考
Discussion