Bのアカウントに存在するパラメータストアをAのアカウントから参照するための設定について確認した記事です。
構成
-
Aアカウント
- パラメータストアの値にアクセスする方のアカウント
- アカウントIDを仮に0123456789012とする
-
Bアカウント
- パラメータストアに値を保管しているアカウント
- アカウントIDを210987654321とする
アカウントBでパラメータストアに値を保管する
設定値としては画像の通り
- キー名:cross-test
- 種類:String
- 値:test
アカウントBでパラメータストアアクセスするロールを作成する(671268391729)
arn:aws:ssm:REGION:ACCOUNT-ID:parameter/ID:parameter-name
作成したパラメータを取得できるPolicyを作成します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:DescribeParameters"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ssm:GetParameters",
"ssm:GetParameter"
],
"Resource": "arn:aws:ssm:ap-northeast-1:210987654321:parameter/cross-test"
}
]
}
上記PolicyをセットしたロールtestBRole
を作成します。
信頼関係Policyは下記のようにAアカウントを指定しましょう。
アカウントAからこのロールをAssumeして使用したいからです。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::0123456789012:root"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
アカウントAでIAMのRoleを準備する
Bアカウントで用意したロールをAssumeするためのロールを作成します。ロール名はAssumeTestBRole
とします。
まずはPolicyの準備
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::210987654321:role/testBRole"
}
}
Resourceには先程作成したアカウントBのtestBrole
を指定します。
今回はテストでアカウントAのユーザーでクラウドシェルからCLIを叩きたいので、このロールの信頼関係ポリシはAアカウント全体として指定しました。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::0123456789012:root"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
テスト
アカウントAで上記ロールを用いてCLI経由でアカウントBのパラメータストアの値を取得する
AWS CloudShellを利用しました。
まず、testBroleをAssumeしたいのでAssumeTestBRoleにAssumeします。
aws sts assume-role \
--role-arn "arn:aws:iam::0123456789012:role/AssumeTestBRole" \
--role-session-name test-AssumeTestBRole-Session
出力された一時クレデンシャル情報を環境変数に指定してtestBroleにAssumeできるようにします。
続いて、testBroleにAssumeします。
aws sts assume-role \
--role-arn "arn:aws:iam::210987654321:role/testBRole" \
--role-session-name testBRole-Session
この状態でAssumeした主体が保持している権限は一番最初に作成したBアカウントのパラメータを参照するための権限になります。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:DescribeParameters"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ssm:GetParameters",
"ssm:GetParameter"
],
"Resource": "arn:aws:ssm:ap-northeast-1:210987654321:parameter/cross-test"
}
]
}
一番最初のコレですね。
したがって、parametersやparameterが使えます。
aws ssm get-parameters \
--names cross-test \
--query "Parameters[*].{Name:Name,Value:Value}"
[
{
"Name": "cross-test",
"Value": "test"
}
]