AWSの基礎 〜Part6: 権限管理サービス〜
AWS IAMはAWS環境内で「誰が何をできるのか」を制限するサービスです。独立なサービス間を分離させて、安全に扱うためにはこのサービスを適切に使用する必要があります。無料のサービスであり、AWSのサービスを使用する上で必ず使うことになるので使用頻度もかなり高いです。しっかり押さえておきましょう。
目次
はじめに
各ユーザーやリソースが「何にどれだけの権限を持ってアクセスできるのか」を制御することが権限管理であり、これをAWSの環境において担っているのがAWS IAM (Identity Access Management)になります。
この設定が不十分であると、環境の内部で本来アクセスするべきでないリソースやユーザーによるアクセスでデータが本来見ることの許されている範囲を超えて見れてしまったり、場合によってはデータが編集されてしまったりすることが考えられます。これらは、AWS環境内にマルウェア等に感染したリソースがある場合や攻撃者が侵入した場合など、悪意を持って行われるケースだけではなく、意図していない操作により悪意なく発生してしまうこともあるため、対外的なセキュリティを強化するだけでは防げません。
よって、AWSのサービスを利用する上ではそのデータにアクセスできる人間を最小限に絞り、最小限の権限を与えるように設定する必要があります。AWS IAMは無料のサービスで他のサービスを使用する際には必ず併用することになるかと思いますので、しっかりと理解しておきましょう。
IAM の基本概念
IAM は以下の主要なコンポーネントで構成されています。
1. IAMポリシー: IAMポリシーは、JSON 形式で記述される文書で、IAMユーザーやIAMロールに対する権限を定義します。ポリシーには許可されるアクションやアクセス可能なリソースが記載されています。
2. IAMユーザー: AWS リソースにアクセスする個々のエンティティ(実体)です。IAMユーザーは持っている(アタッチされた)ポリシーに応じて実行できることが変化し、アクセスキーやパスワードを通じて AWS にアクセスします。それぞれがAWSのリソースを操作する運用者や開発者にあたります。
3. IAMロール: ロールは、個人ではなくリソースに割り当てられる仮想的なエンティティです。AWSリソースに割り当てられ、リソース自体やアプリケーションが別のリソースにアクセスする際に使用されます。
4. IAMグループ: IAMグループは、IAMユーザーを論理的にまとめたもので、共通のポリシーを適用するために使用されます。ユーザーは複数のグループに所属できます。グループ単位でポリシーをアタッチし、ユーザーをそこに追加していくのが業界でのデファクトスタンダードです。
AWS IAMの権限管理方法
概念説明でも軽く触れましたが、権限制御は以下の手順で行います。
1. (管理する対象がAWS環境にアクセスするユーザーの場合)ユーザーの属するIAMグループを作成し、そのIAMユーザーを追加
2. IAMグループまたはIAMロールに与える権限をポリシーとして作成
3. 作ったIAMポリシーをIAMグループまたはIAMロールにアタッチ
このように作成することによって、ユーザーに与える権限の組織単位での取り扱いが楽になるほか、組織の階層構造などについても柔軟に表現できます。また、権限の与える対象と権限の強さが分離しているため、他方を意識することなく編集を行うことができます。
1,3の操作についてはコンソール上で操作をするだけになるので、ここでは2のIAMポリシーの作成について説明します。
ポリシーの作成
IAM ポリシーはJSON形式で記述されます。以下は S3 バケットに対するアクセスを許可するポリシーの例です。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET"],
"Condition": {"StringLike": {"s3:prefix": ["${aws:PrincipalTag/team}/*"]}}
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET/${aws:PrincipalTag/team}/*"]
}
]
}
jsonの各プロパティは以下の内容を示します。
・ Version: 書式バージョン。AWS公式ドキュメントの規定に基づいて指定。
・ Statement: ポリシーのメイン部分。中括弧1つが1つの制御する権限と条件を表しており、これらを複数記述することができる。
・ Effect: AllowかDenyのどちらかを記述し、その内容がどちらを指すのかを指定する。
・ Action: 許可または拒否する処理を指定します。処理内容はサービス名と操作名の組み合わせで表される。
・ Resource: アクセス対象のリソースを指定。リソースはARN (Amazon Resource Name) 形式で記述。
・ Condition: アクションが許可または拒否されるための追加条件を指定。条件はキーと値のペアで表され、複数の条件を組み合わせることが可能。
AWS リソースへのアクセスの仕組み
ユーザーがIAMを使用してAWS リソースにアクセスする際の基本的な仕組みは以下の通りです。ここまで説明してきた構造によって権限の認可を行い、認証はIAMユーザーに割り当てられたパスワードやアクセスキーを使用します。
1. 認証: ユーザーが AWS にログインする際、ユーザー名とパスワード、またはアクセスキーを使用して認証を行います。
2. 認可: 認証が成功すると、IAM ポリシーに基づいてユーザーが実行できるアクションとアクセスできるリソースが決定されます。
3. アクセス: ユーザーがリソースにアクセスする際、ポリシーで許可されたアクションのみが実行されます。
AWS STS (Security Token Service)
ここまでの話と関連して、一時的に使用可能な認証情報を提供するサービスであるAWS STSをご紹介します。
STS を使用することで、一時的なアクセスキー、シークレットアクセスキー、およびセッショントークンを取得できます。これを取得したIAMユーザーやIAMロールなどは、STSに割り当てられたIAMロールにアタッチされた権限に基づいて、特定の期間のみリソースへのアクセスが可能となります。このようにすることによって、IAMユーザーごとのアクセスキーを作成する必要がなくなり、認証情報の流出リスクを減らすことが可能です。
終わりに
第6回の今回はAWS環境内での認証認可を司るAWS IAMについてご紹介いたしました。ポリシー、ユーザー、ロール、グループを適切に使用することで、安全かつ効率的にリソースを管理できます。IAM の理解と適切な設定は、AWS 環境のセキュリティを強化するために不可欠です。IAM の機能を活用し、AWS 環境を安全に運用していきましょう。