前提
- group has many users
- user, groupe, role has many identity-based policies
- role is assumed by user, group, service (e.g. ec2).
policyには2種類ある。
- identity-based policy
- VO
- resource-based policy
- SVOでOに貼り付けられる。
- 多分 S=principalに設定できるのはrole, user, group。EC2インスタンスのARNは設定できなさそう?
- e.g. S3 bucket policy
Roleについて
(1) roleの作成
(2) roleの貼り付け
EC2からS3のバケットのリストを取得する
以下の手順で行う。
- S3へのreadアクセス権限を持つIAM role 🟢を作成する
- そのIAM roleをEC2に貼り付ける
- そもそもroleがEC2に貼り付けられていないと、awsコマンドにcredentialが設定されなさそう?
- EC2 -> S3へのネットワーク通信を可能にする。いずれか
- EC2をpublic subnet内に置く = EC2を含むVPCにInternet Gatewayを作成し、デフォルトルートとして設定する。
- EC2からNAT経由で外部インターネットへのアクセスを可能にする。
- EC2からS3へのアクセスを Gateway VPC endpoint経由で可能にする。
⚠️ 取得したいのはS3のバケットのリストであるため、バケットポリシーの設定は不要。
EC2からS3の my_bucket
内のオブジェクトのをリストを取得する
- S3へのアクセス権限🟥を持つIAM roleを作成する
- そのIAM roleをEC2に貼り付ける
- EC2 -> S3へのネットワーク通信を可能にする。いずれか
- EC2をpublic subnet内に置く = EC2を含むVPCにInternet Gatewayを作成し、デフォルトルートとして設定する。
- EC2からNAT経由で外部インターネットへのアクセスを可能にする。
- EC2からS3へのアクセスを Gateway VPC endpoint経由で可能にする。
- S3のバケットポリシー🟦を設定し、上記のroleからのアクセスをallowする。
- S3のバケットポリシーはデフォルトでは全拒否となっている
- おそらくバケットポリシーのPrincipalとしてroleではなくEC2インスタンスのARNを指定することはできなさそう。
なお、🟥 🟦のどちらかがあればバケット内のリスト取得のアクションは可能であることを実験で確かめた。
(roleにs3 read accessが含まれる, bucket policyでroleにS3:ListBucketをallow) =
- (true, true) -> 取れる
- (true, false) -> 取れる
- (false, true) -> 取れる
- (false, false) -> 取れない
その他
- 前述のroleを貼り付けられたEC2インスタンスは、STSから6時間ごとにcredentialを取得する。このcredentialはインスタンスのメタデータとして保存される。