LoginSignup
2
0

More than 1 year has passed since last update.

AWS Systems Manager(SSM) パラメータストアのクロスアカウント設定

Last updated at Posted at 2021-09-07

Bのアカウントに存在するパラメータストアをAのアカウントから参照するための設定について確認した記事です。

構成

  • Aアカウント

    • パラメータストアの値にアクセスする方のアカウント
    • アカウントIDを仮に0123456789012とする
  • Bアカウント

    • パラメータストアに値を保管しているアカウント
    • アカウントIDを210987654321とする

アカウントBでパラメータストアに値を保管する

スクリーンショット_2021-09-07_10_45_12.png

設定値としては画像の通り
- キー名:cross-test
- 種類:String
- 値:test

アカウントBでパラメータストアアクセスするロールを作成する(671268391729)

パラメータストアのARN形式
arn:aws:ssm:REGION:ACCOUNT-ID:parameter/ID:parameter-name

作成したパラメータを取得できるPolicyを作成します。

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して使用したいからです。

policy
{
  "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の準備

policy
{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "arn:aws:iam::210987654321:role/testBRole"
  }
}

Resourceには先程作成したアカウントBのtestBroleを指定します。

今回はテストでアカウントAのユーザーでクラウドシェルからCLIを叩きたいので、このロールの信頼関係ポリシはAアカウント全体として指定しました。

policy
{
  "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アカウントのパラメータを参照するための権限になります。

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"
        }
    ]
}

一番最初のコレですね。
したがって、parametersやparameterが使えます。

aws ssm get-parameters \
    --names cross-test \
    --query "Parameters[*].{Name:Name,Value:Value}"
[
    {
        "Name": "cross-test",
        "Value": "test"
    }
]
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0