Parameter Store を設定する
Parameter Store でパラメータを設定する前に、指定したアクションを実行するためのアクセス許可をアカウントのプリンシパルに付与する AWS Identity and Access Management (IAM) ポリシーを設定します。
このセクションでは、IAM コンソールを使用してこれらのポリシーを手動で設定する方法と、それらポリシーをユーザーとユーザーグループに割り当てる方法について説明します。マネージドノード上で実行できるパラメータアクションを制御するためのポリシーを作成して割り当てることもできます。
また、このセクションでは、Systems Manager パラメータの変更に関する通知を受信するために Amazon EventBridge ルールを作成する方法についても説明します。EventBridge ルールを使用すれば、Parameter Store の変更に基づき、AWS で他のアクションを呼び出すことができます。
内容
IAM ポリシーを使用した Parameter Store パラメータアクセスの管理
AWS Systems Manager パラメータにアクセスする IAM プリンシパルには、必要な SSM アクションを実行するアクセス許可が必要です。プリンシパルは、IAM ユーザー、IAM ロール、Amazon EC2 インスタンスプロファイル、Lambda 実行ロール、Amazon ECS タスクロール、CodeBuild サービスロール、または別の AWS サービスロールになります。
次の表で、さまざまな Parameter Store アクションに必要な IAM アクセス許可について説明します。
| アクション | 必須の IAM 権限 | リファレンス情報。 |
|---|---|---|
| パラメータを作成または更新する | ssm:PutParameter |
PutParameter |
| 1 つのパラメータを取得する | ssm:GetParameter |
GetParameter |
| 複数の名前付きパラメータを取得する | ssm:GetParameters |
GetParameters |
| パスの下のパラメータを取得する | ssm:GetParametersByPath |
GetParametersByPath |
| パラメータメタデータを表示する | ssm:DescribeParameters |
DescribeParameters |
| パラメータのバージョン履歴を表示する | ssm:GetParameterHistory |
GetParameterHistory |
| 1 つのパラメータを削除する | ssm:DeleteParameter |
DeleteParameter |
| 複数のパラメータを削除する | ssm:DeleteParameters |
DeleteParameters |
IAM ポリシーを使用して Systems Manager パラメータへのアクセス権を付与する場合は、制限付き IAM ポリシーを作成して使用することをお勧めします。たとえば、以下のポリシーでは、プリンシパルは限られた一連のリソースに対して DescribeParameters および GetParameters API オペレーションを呼び出すことができます。プリンシパルは prod-* で始まるすべてのパラメータに関する情報を取得し、使用することができます。
注記
前述のポリシーでは、ssm:GetParameters は許可されますが、その他の取得アクションは許可されません。Parameter Store は、独自の IAM アクションに対して各取得オペレーションを承認するため、1 つのアクションを許可または拒否しても、他のアクションには影響しません。ポリシーを使用してプリンシパルが読み取ることができるパラメータを制限する前に、「Parameter Store がパラメータの取得を許可する仕組み」と「特定のパラメータとパスへのアクセスの制限」を参照してください。
重要
Parameter Store は、GetParametersByPath オペレーションが返す各パラメータではなく、リクエストで指定したパスに対してオペレーションを承認します。パス /a に対して GetParametersByPath の呼び出しが許可されているプリンシパルは、/a/b を含む、そのパスのすべてのパラメータを受け取ります。同じポリシーが他のアクションの /a/b へのアクセスを明示的に拒否した場合でも同様です。
GetParametersByPath がパラメータを返さないようにするには、結果にそのパラメータを含める可能性のあるすべての祖先パスで ssm:GetParametersByPath アクションを拒否してください。例えば、/a/b が返されないようにするには、/a と / の両方で ssm:GetParametersByPath を拒否します。
信頼されている管理者には、以下の例のようなポリシーを使用することで、すべての Systems Manager パラメータ API オペレーションへのアクセスを許可できます。このポリシーにより、ユーザーは、dbserver-prod-* で始まるすべての本稼働パラメータにフルアクセスできます。
アクセス許可を拒否する
各 API は一意であり、個別に許可または拒否できる個別の操作とアクセス許可があります。ポリシー内の明示的な拒否は、許可に優先します。
重要
各オペレーションは独自の IAM アクションに対して承認されるため、1 つのアクションを拒否しても、プリンシパルが別のオペレーションを通じて同じパラメータを取得できなくなるわけではありません。例えば、ssm:GetParameter のみを拒否しても、ssm:GetParameters、ssm:GetParameterHistory、または ssm:GetParametersByPath には影響しません。値を返すことができるすべてのアクションを常に拒否してください。この動作の詳細については、「Parameter Store がパラメータの取得を許可する仕組み」を参照してください。
注記
デフォルトの AWS Key Management Service (AWS KMS) キーには、AWS アカウント 内のすべての IAM プリンシパルに対する Decrypt アクセス許可があります。アカウントの SecureString パラメータに対してさまざまなアクセスレベルが欲しい場合は、デフォルトのキーを使用しない方がよいでしょう。カスタマーマネージドキーの kms:Decrypt を制限すると、取得オペレーションによる SecureString 値の復号化を防ぐことができます。詳細については、「SecureString パラメータ値の復号化の制限」を参照してください。
4 つの取り出しアクション名はすべて GetParameter で始まるため、1 つのエントリ ssm:GetParameter* が ssm:GetParameter、ssm:GetParameters、ssm:GetParameterHistory、ssm:GetParametersByPath をカバーします。次の例では、このパターンを使用して、prod-* で始まるすべてのパラメータに対して 4 つのアクションをすべて拒否します。
注記
前の例では、ssm:GetParametersByPath の拒否は、prod-* に一致するパスをリクエストする呼び出しにのみ適用されます。祖先パスをリクエストする呼び出しによって prod-* パラメータが返されることは妨げません。このギャップを埋めるには、祖先パスの ssm:GetParametersByPath も拒否します。詳細については、「特定のパラメータとパスへのアクセスの制限」を参照してください。
次に、prod-* で始まるすべてのパラメータに対してユーザーが他のコマンドを実行できるようにしながら、一部のコマンドを拒否する例を示します。
注記
パラメータ履歴には、現在のパラメータを含むすべてのパラメータバージョンが含まれます。したがって、GetParameter、GetParameters、および GetParametersByPath に対するアクセス許可が拒否され、GetParameterHistory に対するアクセス許可が認められている場合、SecureString を使用して、GetParameterHistory パラメータを含む現在のパラメータを表示できます。
削除にも同じ動作が適用されます。ssm:DeleteParameters は ssm:DeleteParameter とは無関係に承認されるため、ssm:DeleteParameter のみを拒否しても、プリンシパルが DeleteParameters オペレーションでパラメータを削除することは防げません。両方のアクションを拒否するか、パターン ssm:DeleteParameter* を使用してください。
AWS KMS キーを使用したパラメータの暗号化と復号
Parameter Store SecureString パラメータは暗号化に AWS KMS キーを使用します。AWS KMS は、AWS マネージドキー またはカスタマーマネージドキーを使用して値を暗号化します。AWS KMS と AWS KMS key の詳細については、AWS Key Management Service デベロッパーガイドを参照してください。
カスタマーアカウント内のすべてのユーザーは、デフォルトの AWS マネージドキーにアクセスできます。デフォルトのキーの Amazon リソースネーム (ARN) は、AWS KMS コンソールの [AWS マネージドキー]aws/ssm で識別されます。デフォルトキーを使用して SecureString パラメータを暗号化すると同時に、ユーザーが SecureString パラメータを操作できないようにしたい場合を考えてみましょう。この場合、次のポリシー例に示すように、IAM ポリシーはデフォルトキーへのアクセスを明示的に拒否する必要があります。
カスタマーマネージドキーを使用する場合、パラメータまたはパラメータパスへのプリンシパルアクセスを許可する IAM ポリシーによって、キーに対する明示的な kms:Encrypt アクセス許可を提供する必要があります。例えば、次のポリシーでは、プリンシパルは、指定した AWS リージョン と AWS アカウント において prod- で始まる SecureString パラメータを作成、更新、表示できます。
注記
指定されたカスタマーマネージドキーを使用して暗号化された詳細パラメータを作成するには、kms:GenerateDataKey アクセス許可が必要です。
アカウントの SecureString パラメータに対するきめ細かいアクセス制御が必要な場合は、カスタマーマネージドキーを使用して、これらのパラメータへのアクセスの保護と制限を行います。また、AWS CloudTrail を使用して SecureString パラメータのアクティビティを監視することをお勧めします。
詳細については、以下のトピックを参照してください。
-
IAM ユーザーガイドの「ポリシー評価ロジック」
-
AWS Key Management Service デベロッパーガイドの「AWS KMS の主要ポリシーを使用する」
-
AWS CloudTrail ユーザーガイドの「CloudTrail イベント履歴でのイベントの表示」
マネージドノードによる特定のパラメータへのアクセスの許可
マネージドノードが取得できる Parameter Store パラメータを制御するには、インスタンスロールに IAM ポリシーをアタッチします。パラメータを作成するときに SecureString パラメータ型を選択すると、Systems Manager は AWS KMS を使用してパラメータ値を暗号化します。AWS マネージドキー を表示するには、以下のコマンドを AWS CLI から実行します。
aws kms describe-key --key-id alias/aws/ssm
以下の例では、「prod-」で始まるパラメータに対してのみ、ノードがパラメータの値を取得できるようにしています。パラメータが SecureString の場合、ノードは AWS KMS を使用してその文字列を復号化します。
注記
以下の例のように、IAM でインスタンスポリシーはインスタンスロールに割り当てられます。ユーザーとインスタンスにポリシーを割り当てる方法を含め、Systems Manager の機能へのアクセスを設定する方法の詳細については、「Systems Manager を利用した EC2 インスタンスの管理」を参照してください。