ルール
まず、集権的アクセス権を有するAWSアカウントをaggregatorアカウントとします。 次に、操作されるAWSアカウントをbranchアカウントとします。
ローカルマシンから、aggregator AWSアカウントにあるhogeユーザが、switch roleでbranch AWSアカウントにあるbranchroleを使ってbranchroleの操作をする事を目的とします。
ただのswitch roleです。ご存知の方は他所にどうぞ。
ながれ
- branchアカウントで、Roleを作成します 名付けてbranch-role
- aggregatorアカウントのUsersPolicyにAction: sts:AssumeRole,Effect: Allow,Resource: branch-roleを割り当てます
- ローカルマシンの~/.aws/credentialにaggregatorアカウントのUserで発行したaws_access_key_id,aws_secret_access_key等を設定します
- ローカルマシンの~/.aws/configにbranch-roleのprofile,role_arn,source_profile,regionを設定します
- ターミナルからawsコマンドを--profile profileをつけて実行します
もう少しこまかい設定
1. branchアカウントで、Roleを作成します 名付けてbranch-role
GUI/CLI問わず、branchアカウントのIAMからRoleを作成します。 Role作成時に、「Another AWS account」を選択して、Account IDにaggregatorアカウントのAWSアカウント番号を入力します。 付与するPolicyはaggregatorアカウントで使わせたい人に合わせてPolicyを設定します。 ここで覚えておきたいのは、branchアカウントでは、aggregatorアカウントにRoleの使用許可を出すだけで、そのRoleをどのユーザで利用可能にするかは、後述のaggregatorアカウントのUserPolicyで設定する事です。
branchRole作成後、作成したbranch Roleのサマリから「Role ARN」,「Give this link to users who can switch roles in the console」の値をコピーして手元に置いておきます。
各AWSアカウントで必要な分だけRoleを作成します。このRoleをbranchroleとしておきます。
2. aggregatorアカウントのUsersPolicyにAction: sts:AssumeRole,Effect: Allow,Resource: branch-roleを割り当てます
具体的にjsonの記述は以下のようになります。
{ "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": [ "ここに", "1で作成したbranch Roleの", "Role ARNを、ダブルクォーテーションとカンマで分けて必要なだけ書いて", "いきます", "このUsersPolicyを使うUserは、書いたRoleにswitch roleできるようになります" ] } ] }
このPolicyをaggregator AWSアカウントのUserにattachします。 aggregatorアカウントのUserと呼んでおきます。このUserをCLIから利用するために、aws_access_key_id,aws_secret_access_keyを発行しておきます。手元に置いておきます。 このUserを使ってaggregatorのAWSアカウントを操作するのであれば他にもPolicyをattachしてください。
3. ローカルマシンの~/.aws/credentialにaggregatorアカウントのUserで発行したaws_access_key_id,aws_secret_access_key等を設定します
ターミナルでホームディレクトリに隠しディレクトリ.awsを作成し、その中にcredentialsというファイルを作成、CLIでaggregatorのUsersPolicyを割り当てたUserの認証情報を保存します。
具体的には
[hoge] aws_access_key_id = xxxxxxxxxxxxxx aws_secret_access_key = xxxxxxxxxxxxxxxxxxx
このように保存します。
同じディレクトリ(~/.aws/)に、configというファイルを作成して、
[default] region = ap-northeast-1
とやっておけば、ターミナルからそのユーザに割り当てられたpolicyの操作が可能です。
$ aws ec2 describe-instances --profile hoge
で実行結果が返ってきます。
4. ローカルマシンの~/.aws/configにbranch-roleのprofile,role_arn,source_profile,regionを設定します
3.で追加したconfigファイルに、switch role用のprofileを追記します。 具体的には
[default] region = ap-northeast-1 ⏬のように追加 [profile branchrole] role_arn = arn:aws:iam::xxxxxxxxxxxxx:role/xxxxxxxxxxxxxxxxxxxxx source_profile = hoge (region = ap-northeast-1defaultにしたければ追加)
5. ターミナルからawsコマンドを--profile profileをつけて実行します
aws ec2 describe-instances --profile branchrole
これで、aggregator AWSアカウントにあるhogeユーザが、switch roleでbranch AWSアカウントにあるbranchroleを使ってbranchroleの操作をする事ができるようになります。