AWS リソースへアクセスできないユーザーやサービスに、一時的にアクセスを委任する必要がある場面もあるかと思います。このようなシナリオでは、IAM ロールを使用することで、AWS リソースへのアクセスを委任することができます。 此度、IAMロールの機能についてCLIで軽く検証しました。AWSコンソールと違いますが、ロールを作る前に信頼される側を定義するため信頼ポリシーを用意しなければなりません。したがって、まず下記の信頼ポリシーjsonファイルを作ります。

$ vim trustPolicy.json

113001 信頼される側Principalは ○ AWSサービス ○ 他のAWSアカウント ○ 他のサービル(例:Facebook,Google,Amazonなど) を指定できる。ここに詳しく紹介されていますが、実はPrincipalをARNで指定する場合、IAMグループやwildcard(*)(?)で設定することができない。nszwさんのブログのおっしゃるとおり、S3バケットや一時的権限をグループとして統一運用管理したい人達に対して、こいう仕様は罠と言っても過ぎないだと思います。   今回は信頼される側を別のAWSアカウントのユーザーにします。信頼ポリシーを指定した後、ロールを作成する。

$ export ROLENAME=iam-role-developers
$ aws iam create-role  --role-name $ROLENAME --assume-role-policy-document file://./trustPolicy.json

113002 そして、ロールのポリシーファイルを作って権限を定義する。下記でS3を読取権限で指定する。

$ vim s3readonly.json

1117-03

$ export ROLEPOLNAME=s3ReadOnlyPolicy
$ aws iam put-role-policy --role-name $ROL1NAME --policy-name $ROLEPOLNAME --policy-document file://./s3readonly.json
$ aws iam get-role-policy --role-name $ROLENAME --policy-name $ROLEPOLNAME

1117-04 ここまで、ロールを作成しました。 ロール情報をインスタンスの開始時に Amazon EC2 インスタンスに渡すために、インスタンスプロファイルを使用する。下記コマンドでインスタンスプロファイルを作ってIAMロールに連携する。

$ aws iam create-instance-profile --instance-profile-name $ROLENAME
$ aws iam add-role-to-instance-profile --instance-profile-name $ROLENAME --role-name $ROLENAME

ロールを引き受けるには、ユーザー(またはユーザーが実行するアプリケーション)は、AWS STSのAPIを呼び出すので、STSコマンドで作成したロールを検証します。指定された別のAWSアカウントユーザの認証環境で下記STSコマンドを入力すると

$ aws sts assume-role --role-arn arn:aws:iam::ロールオーナーのAWSアカウント:role/iam-role-developers  --role-session-name role-session-name-test

一時的認証を取れます。 113003 そして、取得した認証情報を設定する。

$ export AWS_ACCESS_KEY_ID=ASIAI275FSBPWY74ZPKA
$ export AWS_SECRET_ACCESS_KEY=8h5IkBqGuN9iGBUGHr5F0mu3zf9GuXb/2DolGnUj
$ export AWS_SESSION_TOKEN=AQoDYXdzEEYakAKsWomvCt6a6l+kDOq7MXpfgfiMBfH8Jm+414sVmoVRFeX71JTPbffyZXMJwHCql4QkTT9lAHWR5y2YmDmNqKsGK3yErzMmWcT2U4xFl0A4wIcnnYsxm2wF86+vAdM+0R5dFpqqKlDXzZwxZHtwYVY+ScMCnBSv+LuEX0JrUOsmyvas2M1DdnFWAPirrPq5QG4hxf9HiTggPRIP5DqCsIM6u8kgynRJM/PUV8G6yuBmhpM6iyIF6c1jAYvg42SQH268n4dLnE7FHQ+kkgIDbdalIjj/5kIhtQ9RPYQywJRl3i1WKF110PTR77k4uJBJcWqyRgaA7XVhhqjh5YVjIEIkxBYgnBqRP77UqowKnbPAdyD+ruyjBQ==

Describeコマンドでインスタンス情報を取得してみます。

$ aws ec2 describe-instances

ロールポリシーにS3読取権限しか与えられないので、下記エアーが出てきます。 113004   S3バケット情報をlsコマンドで取得できました。       113005

TOP