導入
「この社員にはS3だけ触らせたい」「このアプリにはDynamoDBへの書き込みだけ許可したい」——そんな細かい権限管理を実現するのがIAMです。
説明
**AWS IAM(Identity and Access Management)**は、「誰が(認証)」「何に対して(認可)」アクセスできるかを管理するサービスです。無料で利用でき、次の4つの要素で構成されます。
- ユーザー(User) … 人やアプリケーションを表す個別のID。サインイン用のパスワードや、プログラムから使うアクセスキーを持てる。
- グループ(Group) … ユーザーの集まり。「開発チーム」「経理チーム」のようにまとめておき、グループに権限を付与すれば所属ユーザー全員に一括で適用できる。
- ロール(Role) … 特定の作業のために一時的に引き受ける権限のセット。パスワードを持たず、EC2インスタンスやLambda関数、あるいは他のAWSアカウントのユーザーに「一時的に借りる」形で割り当てる。
- ポリシー(Policy) … 「何を許可・拒否するか」をJSON形式で定義したドキュメント。ユーザー・グループ・ロールに** アタッチ(関連付け)**することで実際の権限になる。
flowchart LR
U["IAMユーザー"] --> G["IAMグループ"]
G --> P1["ポリシー"]
U --> R["IAMロール<br/>(一時的な権限)"]
R --> P2["ポリシー"]
EC2["EC2インスタンス"] -.引き受け.-> R
ポリシーの実体は、次のようなJSONです。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::sample-bucket/*"
}
]
}
Effect(許可か拒否か)・Action(対象の操作)・Resource(対象のリソース)の3点セットで、「誰が」の部分はこのポリシーをアタッチされた側(ユーザーやロール)によって決まります。IAMの設計では、必要な権限だけを与える**最小権限の原則(Principle of Least Privilege)**が基本方針です。
読んでみよう
「人にはユーザー・グループ、モノや一時的な作業にはロール」という使い分けと、権限の実体はポリシー(JSON)である、という点はセットで覚えておきましょう。