こんばんは、小寺です。
AWS Systems Manager パラメータストアがクロスアカウントをサポートしました。
https://aws.amazon.com/about-aws/whats-new/2024/02/aws-systems-manager-parameter-store-cross-account-sharing/
AWS Systems Manager パラメータストアについて振り返る
AWS Systems Manager パラメータストア利用されていますか?どのようなときに活用できるサービスなのか簡単に振り返りたいと思います。
パラメータストアはAWS Systems Managerの一機能です。設定データ管理と機密管理のための安全な階層型ストレージです。
保存できる値は以下です。
・パスワード
・データベース文字列
・AMI ID
・ライセンスコード
パラメータの違い
実は、パラメータストアにはスタンダードパラメータとアドバンストパラメータの2つが含まれています。スタンダードパラメータがデフォルトの仕様です。
スタンダード | アドバンスト | |
パラメータの合計数 | 10,000 | 100,000 |
パラメータ値の最大サイズ | 4K | 8K |
パラメータポリシー | 利用不可 | 利用可能 |
利用料 | 無料 | 追加費用あり |
アップデート内容
PutResourcePolicy APIを使って他のAWSアカウントとパラメータストアの共有を行うことが必要でした。今回のアップデートにより、アドバンストパラメータを他の AWS アカウントと共有できるようになり、設定データを一元管理できるようになります。
一元管理には、AWS Resource Access Manager(RAM)に追加して利用することができます。
確認してみる
前提条件
・パラメータを共有するには、対象パラメータがAWS アカウント内にあること。他アカウントから共有されたパラメータの共有はできない
・パラメータを共有するには、パラメータがアドバンスト パラメータ層にあること。
・SecureString パラメータを共有するには、顧客管理のキーでの暗号化が必要なので、KMSを利用すること。
・パラメータを組織または AWS Organizations の組織単位と共有するには、AWS Organizations との共有を有効にすること。
パラメータストア共有イメージ
パラメータストアをクロスアカウントで共有するイメージです。パラメータを共有するには、パラメータをRAMに追加しておきます。AWS RAM コンソールまたは AWS CLI を使用して、所有するパラメータを他アカウントへ共有できます。

やってみた
最初にKMSで カスタマー管理型のキー を作成しておきます。
パラメータストアから新規にパラメータを作成します。詳細(アドバンスト)しか共有できないため、注意します。※KMSキーは最初に作成しておいたものを選びます。
※パラメータ名の文字列では最後に「/(スラッシュ)」指定ができないため、作成時に変更しています。

パラメータの有効期限をオプションで指定することができます。コストがかかるので、ここでは、次の日を指定しています。

無事にパラメータが作成できました。

作成したキーを他アカウントに共有するために「シェアリング」タブを確認してみます。

KMSを共有する設定をしていなかったので、今回はKMS側で特定アカウントに共有ができるように設定を行いました。その上でRAMから共有を行います。

今回は組織のアカウント内共有ではなく、特定アカウント指定で共有を行いました。

共有先のアカウントで確認をしてみます。RAMを確認してみます。1リソースが自分と共有されていることが確認できます。「リソース共有を承認」をクリックして完了です。

招待を承諾後にリソースへアクセスできるようになります。

共有された側から削除しようとすると、エラーになります。

共有した元のアカウントで削除を行いました!

共有したパラメータへのアクセスにサポートされている内容です。
- CloudFormationの動的参照
- CloudFormation テンプレートパラメータ
- AWS Parameters and Secrets Lambda Extension
- EC2の起動テンプレート
- AMIからインスタンスを作成するためのEC2 RunInstancesコマンドでのImageIDの値
- Systems Manager Run Commandのコマンド内のパラメータ
- Systems Manager Automationのランブックにおけるパラメータ値の取得
共有されたアカウントにかかるコスト
アカウント | Number of calls | 費用 |
---|---|---|
Account A (共有元) | 10,000 calls | アドバンストパラメータ: USD 0.0510,000 calls to MyAdvancedParameter : USD 0.05Total: USD 0.10 |
Account B (共有先) | 20,000 calls | 20,000 calls to MyAdvancedParameter : USD 0.10 Total: USD 0.10 |
Account C (共有先) | 30,000 calls | 30,000 calls to MyAdvancedParameter : USD 0.15 Total: USD 0.15 |
今日は、RAMを使ってSSMパラメータを他アカウントへ共有する方法を試してみました。
