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}/*"]
}
]
}

