AWS IAMポリシーのJSONで細かくアクセス制御する方法を初心者向けに完全解説
生徒
「AWSでユーザーごとに操作できる範囲を変えたいんですが、どうやって設定するんですか?」
先生
「AWSではIAMポリシーという仕組みを使って、誰が・どのサービスに・どんな操作ができるかを細かく制御できます。」
生徒
「IAMポリシーってJSONって聞いたんですが、難しそうで不安です…」
先生
「大丈夫です。JSONは決まった形を覚えれば、パズルのように組み立てるだけです。順番に見ていきましょう。」
1. AWS IAMポリシーとは何か
AWS IAMポリシーとは、AWSのリソースに対するアクセス権限を定義するルール集です。IAMは「Identity and Access Management」の略で、ユーザーやロール、グループの権限管理を行うサービスです。
IAMポリシーを使うことで、「誰が」「どのAWSサービスに」「どんな操作を」「どの範囲で」実行できるかを制御できます。セキュリティ対策として非常に重要で、AWS運用の基本中の基本です。
2. JSON形式で書かれる理由
IAMポリシーはJSON形式で記述されます。JSONは設定内容を人間にもコンピュータにも読みやすく表現できる形式です。AWSでは多くの設定がJSONで統一されており、IAMポリシーもその一つです。
最初はカッコやコロンが多くて戸惑いますが、「項目名」と「内容」がセットになっているだけなので、構造を理解すれば難しくありません。
3. IAMポリシーJSONの基本構造
IAMポリシーには決まった構造があります。まずは全体像を見てみましょう。
{
"Version": "2012-10-17",
"Statement": []
}
Versionはポリシーの仕様バージョンです。現在はこの値を指定しておけば問題ありません。Statementの中に、実際のアクセス制御ルールを書いていきます。
4. Statementでアクセス権限を定義する
Statementは配列になっており、複数のルールを記述できます。1つのルールには、Effect、Action、Resourceなどの要素があります。
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "*"
}
Effectは許可か拒否かを表します。Actionは実行できる操作、Resourceは対象となるAWSリソースです。これらを組み合わせることで、細かい制御が可能になります。
5. Actionで操作内容を絞り込む
Actionでは、どの操作を許可または拒否するかを指定します。たとえばS3なら、一覧表示、アップロード、削除など操作ごとに分かれています。
"Action": [
"s3:GetObject",
"s3:PutObject"
]
このように配列で書くことで、複数の操作をまとめて指定できます。必要最小限の操作だけを許可することが、安全なAWS運用につながります。
6. Resourceで対象を限定する
Resourceでは、どのリソースに対する操作なのかを指定します。S3バケットやEC2インスタンスなど、ARNという識別子を使います。
"Resource": "arn:aws:s3:::example-bucket/*"
Resourceを絞ることで、「特定のバケットだけ操作できる」といった制御が可能になります。すべてを許可する「*」は便利ですが、使いすぎには注意が必要です。
7. Conditionでさらに細かく制御する
Conditionを使うと、「特定の条件を満たしたときだけ許可する」といった制御ができます。たとえば、特定のIPアドレスからのアクセスだけを許可する設定などです。
"Condition": {
"IpAddress": {
"aws:SourceIp": "203.0.113.0/24"
}
}
Conditionは少し難しく感じますが、セキュリティを高めるために非常に重要な要素です。
8. よくある失敗と注意点
初心者がやりがちな失敗として、「とりあえず全部許可する」設定があります。一時的には動いて便利ですが、セキュリティリスクが高くなります。
IAMポリシーは最小権限の考え方が基本です。必要な操作だけを許可し、不要な権限は与えないようにしましょう。
9. 実務での活用イメージ
実際の現場では、IAMポリシーはユーザー単位だけでなく、ロールと組み合わせて使われることが多いです。EC2やLambdaにロールを付与することで、安全にAWSリソースへアクセスできます。
IAMポリシーのJSONを理解すると、AWSのセキュリティ設計が一気に見えるようになります。