i俺のあれこれ

身の回りを考える

複数AWSアカウントの運用の仕方<CLI> switch role/assumed role

ルール

まず、集権的アクセス権を有するAWSアカウントをaggregatorアカウントとします。 次に、操作されるAWSアカウントをbranchアカウントとします。

ローカルマシンから、aggregator AWSアカウントにあるhogeユーザが、switch roleでbranch AWSアカウントにあるbranchroleを使ってbranchroleの操作をする事を目的とします。

ただのswitch roleです。ご存知の方は他所にどうぞ。

ながれ

  1. branchアカウントで、Roleを作成します 名付けてbranch-role
  2. aggregatorアカウントのUsersPolicyにAction: sts:AssumeRole,Effect: Allow,Resource: branch-roleを割り当てます
  3. ローカルマシンの~/.aws/credentialにaggregatorアカウントのUserで発行したaws_access_key_id,aws_secret_access_key等を設定します
  4. ローカルマシンの~/.aws/configにbranch-roleのprofile,role_arn,source_profile,regionを設定します
  5. ターミナルから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の操作をする事ができるようになります。

今日のお酒はこの辺(ピスコ)にしたい

ピスコ ワカー [ ブランデー 700ml ] カペル アルト・デル・カルメン ピスコ トランスパレント 40度 750mlピスコ タカマ ケブランタ 700ml (1本) ピスコ タカマ アチョラード 700ml カペル ピスコ モアイボトル 40度 1000ml