はじめに
[AWS] IAMのロール、ポリシー、ユーザーの違いをまとめてみました。
IAM(Identity and Access Management)
IAM(Identity and Access Management)とは、「誰」が「何(AWSリソース)」に対して「どのような操作ができるか」を定義する、「認証」「認可」の仕組みを提供するサービスです。
IAMには、IAM User、IAM Policy、IAM Roleの概念があります。
それぞれの関わりを示した図が以下になります。
IAM User
「誰」が「何(AWSリソース)」に対して「どのような操作ができるか」
の「誰」に該当するのがIAM Userです。
IAM Policyを紐づけることでAWS利用者ができることを定義します。
初期状態では存在せず、root User(AWSアカウント)でログイン後に作成します。
AWSアカウントは非常に強力な権限を持っているため、必ずIAM Userを作成して利用しましょう。
IAM User自体は、プログラムからIAM UserとしてAWSを操作するためのアクセスキーやGitリポジトリサービスで使用するSSHキーなどの情報を保持しています。
IAM Policy
「誰」が「何(AWSリソース)」に対して「どのような操作ができるか」
の「どのような操作ができるか」に該当するのがIAM Policyです。
IAM Policy単体では何もできず、IAM UserやIAM Roleに紐づけて使用します。
Resource(どのAWSリソースに対して)、Action(どのAWSサービスのどの操作を)、Effect(許可または拒否)の3つの要素で定義します。
例えば「S3バケット(My-S3-Bucket)に対して特定のIPアドレス(192.168.10.1/24)からのみ書き込み・読み込みを許可する」IAM Policyを作成し、IAM Userにアタッチすることで対象のユーザーは、IPアドレス「192.168.10.1/24」からS3バケット「My-S3-Bucket」のオブジェクトを取得・削除することができます。
上記ポリシーをJSON形式で表記すると以下のようになります。
{
"Sid":"xxxxx",
"Effect":"Allow",
"Action":[
"s3.GetObject",
"s3.PutObject"
],
"Resource":"arn:aws:s3:::My-S3-Bucket/*",
"Conditon":{
"IpAddress":{
"aws:SourceIp":"192.168.10.1/24"
}
}
}
- Sid(任意):ドキュメント内で一意の識別子
- Effect:Actionに対するAllow(許可)またはDeny(拒否)
- Action:AWSリソースに対する操作
- Resource:Actionの対象とするAWSリソース
- Condition(任意):適用する条件
IAM Role
「誰」が「何(AWSリソース)」に対して「どのような操作ができるか」
の「誰」に該当するのがIAM Roleです。
IAM Userとの違いは「誰」の範囲が非常に広いことです。
IAM Userでは「誰」が必ずユーザーでしたが、IAM RoleではAWSサービスだったり、別のAWSアカウントだったりします。
IAM Policyに紐づけて使用するところは同じです。
今回はここまでです。