メニュー
Amazon Elastic Compute Cloud
Linux インスタンス用ユーザーガイド

Systems Manager パラメータストア

パスワード、ライセンスキー、キーペア、証明書、ユーザーリストなどの設定データの保存と参照は、時間がかかり、特に大規模に行う場合、エラーが発生しやすいプロセスです。セキュアな方法でのパスワードの保存と使用も同様に、大規模に行う場合、困難なプロセスです。パラメータストアでは、スクリプト、コマンドなどの自動化および設定ワークフローで頻繁に参照する設定データを効率的かつ安全に一元管理されます。パラメータストアを使用すると、Run Command、State Manager、Automation などの Systems Manager 機能のパラメータ (Systems Manager パラメータ) を参照できます。

暗号化する必要があるパスワードやキーペアなどのパラメータの場合、パラメータストアでは、AWS Key Management Service (AWS KMS) キーを使用してデータを暗号化できます。その後、機密データを復号化して表示する必要があるユーザーに、そのためのアクセス権限を委譲できます。Amazon EC2 または AWS CloudTrail でパラメータの使用状況をモニタリングおよび監査することもできます。

注記

Systems Manager の機能と共有コンポーネントは、追加料金なしで提供されます。お客様は、使用した EC2 リソースに対してのみ料金を支払います。Systems Manager サービスの制限の詳細については、アマゾン ウェブ サービス全般のリファレンス を参照してください。

Windows ユーザー向けの情報

Windows インスタンスの Amazon EC2 ユーザーガイド』の「Systems Manager パラメータストア」を参照してください。

パラメータストアについて

パラメータは、以下の情報を指定して作成するキーと値のペアです。

  • Name: (必須) パラメータを識別するための名前を指定します。Systems Manager パラメータの名前には、以下の要件と制限があります。

    • パラメータ名は AWS アカウント内で一意であることが必要です。

    • パラメータ名では大文字と小文字が区別されます。

    • パラメータ名には、「aws」または「ssm」(大文字と小文字は区別しない) というプレフィックスを付けることはできません。たとえば、awsTestParameter または SSM-testparameter は例外により失敗となります。

    • パラメータ名には、次の記号と文字のみを使用できます。

      a-zA-Z0-9_.-

  • Data Type: (必須) データ型を指定して、システムによるパラメータの使用方法を定義します。パラメータストアでは現在、String、String List、Secure String のデータ型がサポートされています。

  • Description (オプション): パラメータとその用途を識別するための説明を入力します。

  • Value: (必須) パラメータの値。

  • Key ID (Secure String の場合): AWS アカウントに自動的に割り当てられたデフォルトの AWS KMS キー、またはカスタムキー。

注記

ピリオド「.」、または「_」を使用して、同様のパラメータをグループ化できます。たとえば、prod.db.string や prod.domain.password のようにパラメータをグループ化できます。

Systems Manager パラメータの使用

パラメータの作成後は、以下の構文 (括弧内にスペースを入れない) を使用して、SSM のドキュメント、コマンド、またはスクリプトで、そのパラメータを指定できます。

{{ssm:parameter_name}} または {{ ssm:parameter_name }}

注記

Systems Manager パラメータの name には「ssm」または「aws」というプレフィックスを付けることはできませんが、SSM ドキュメントまたはコマンドでパラメータを指定するときには、「ssm:」というプレフィックスを付ける必要があります。有効: {{ssm:addUsers}}。無効: {{ssm:ssmAddUsers}}。

以下に示しているのは、SSM パラメータを使用した AWS CLI Run Command の例です。

Copy
aws ssm send-command --instance-ids i-1a2b3c4d5e6f7g8 --document-name AWS-RunPowerShellScript --parameter '{"commands":["echo {{ssm:addUsers}}"]}'

注記

SSM ドキュメントの runtimeConfig セクションでは、ローカルパラメータにも同様の構文を使用します。「ssm:」というプレフィックスを付けないことで、ローカルパラメータを Systems Manager パラメータから区別できます。

Copy
"runtimeConfig":{ "aws:runShellScript":{ "properties":[ { "id":"0.aws:runShellScript", "runCommand":"{{ commands }}", "workingDirectory":"{{ workingDirectory }}", "timeoutSeconds":"{{ executionTimeout }}"

以下の例に示すように、SSM ドキュメントの Parameters セクションで Systems Manager パラメータを参照できます。

Copy
{ "schemaVersion":"2.0", "description":"Sample version 2.0 document v2", "parameters":{ "commands" : { "type": "StringList", "default": ["{{ssm:commands}}"] } }, "mainSteps":[ { "action":"aws:runShellScript", "name":"runShellScript", "inputs":{ "commands": "{{commands}}" } } ] }

事前定義された SSM ドキュメント (「AWS-」で始まるすべてのドキュメント) では現在、Secure String、または Secure String 型のパラメータへの参照はサポートされていません。つまり、Run Command で Secure String パラメータを使用するには、以下の例に示すように、Run Command に渡す前にパラメータ値を取得する必要があります。

Copy
$value=aws ssm get-parameters --names secureparam --with-decryption
Copy
aws ssm send-command –name AWS-JoinDomain –parameters password=$value –instance-id instance_ID

Secure String パラメータについて

Secure String は、セキュアな方法で保存および参照する必要がある機密データです。ドメイン参加パスワードやライセンスキーなど、ユーザーがクリアテキストで変更または参照しないデータがある場合は、Secure String データ型を使用してこれらのパラメータを作成します。以下の場合は Secure String を使用する必要があります。

  • コマンド、関数、エージェントログ、または AWS CloudTrail ログに値をクリアテキストとして公開せずに、すべての AWS のサービスでデータ/パラメータを使用する。

  • 機密データへのユーザーのアクセスを制御する。

  • 機密データへのアクセスを監査する (AWS CloudTrail)。

  • 機密データに AWS レベルの暗号化が、アクセスの管理に独自の暗号化キーが必要である。

パラメータを作成するときに Secure String データ型を選択すると、AWS KMS はパラメータ値を暗号化します。AWS KMS の詳細については、AWS Key Management Service Developer Guide を参照してください。

各 AWS アカウントには、デフォルトの AWS KMS キーが割り当てられます。AWS CLI から以下のコマンドを実行することで、キーを表示できます。

Copy
aws kms describe-key --key-id alias/aws/ssm

デフォルトの KMS キーを使用する Secure String パラメータの作成

デフォルトの KMS キーを使用して Secure String パラメータを作成する場合、Key ID パラメータの値を指定する必要はありません。以下の CLI の例で示しているのは、--key-id パラメータを使用しないで、パラメータストアに新しい Secure String パラメータを作成するコマンドです。

Copy
aws ssm put-parameter --name secure_string1_default_key --value "a_secure_string_value" --type SecureString

KMS カスタマーマスターキー (CMK) を使用する Secure String パラメータの作成

アカウントに割り当てられているデフォルトのキーの代わりにカスタム KMS キーを使用する場合、--key-id パラメータを使用して ARN を指定する必要があります。パラメータは、すべての AWS KMS パラメータ形式をサポートします。以下に例を示します。

  • Key ARN の例

    arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012

  • エイリアス ARN の例

    arn:aws:kms:us-east-1:123456789012:alias/MyAliasName

  • グローバルに一意のキー ID の例

    12345678-1234-1234-1234-123456789012

  • エイリアス名の例

    alias/MyAliasName

次のコマンドを使用して、AWS CLI からカスタム AWS KMS キーを作成できます。

Copy
aws kms create-key

作成したばかりのキーを使用して、Secure String パラメータを作成するには、次のコマンドを使用します。

Copy
aws ssm put-parameter --name secure_string1_custom_key --value "a_secure_string_value" --type SecureString --key-id arn:aws:kms:us-east-1:123456789012:key/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e

注記

暗号化された値でパラメータを手動で作成できます。この場合、値はすでに暗号化されているため、Secure String データ型を選択する必要はありません。[Secure String] を選択した場合、パラメータは二重に暗号化されます。

デフォルトでは、すべての Secure String 値は Amazon EC2 コンソールおよび AWS CLI で暗号テキストとして表示されます。Secure String 値を復号化するには、次のセクションで説明するように、ユーザーに KMS 復号化のためのアクセス権限が必要です。

Secure String パラメータのチュートリアル

このチュートリアルでは、Systems Manager の Secure String パラメータおよび Run Command を使用して、Windows インスタンスをドメインに参加させる方法を示します。チュートリアルでは、DNS アドレス、ドメイン名、およびドメインユーザー名など一般的なドメインパラメータを使用します。これらの値は、暗号化されていない文字列値として渡されます。ドメインパスワードは、暗号化され、Secure String として渡されます。

Secure String パラメータを作成し、ドメインをインスタンスに結合する

  1. AWS Tools for Windows PowerShell を使用してシステムにパラメータを入力します。

    Copy
    Write-SSMParameter -Name dns -Type String -Value DNS_IP_Address Write-SSMParameter -Name domainName -Type String -Value Domain_Name Write-SSMParameter -Name domainJoinUserName -Type String -Value DomainJoinUserName Write-SSMParameter -Name domainJoinPassword -Type SecureString -Value DomainJoinPassword
  2. インスタンスの IAM ロールのアクセス許可に、AmazonEC2RoleforSSM の管理ポリシーをアタッチします。詳細については、「管理ポリシーおよびインラインポリシー」を参照してください。

  3. インスタンスにアタッチされた IAM ロールを編集し、次のポリシーを追加します。このポリシーは、kms:Decrypt API を呼び出すためのアクセス許可をインスタンスに与えます。

    Copy
    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", ], "Resource": [ "arn:aws:kms:region:account_id:key/key_id" ] } ] }
  4. 次の json サンプルをシンプルなテキストエディタにコピーして貼り付け、次の場所に JoinInstanceToDomain.json としてファイルを保存します。c:\temp\JoinInstanceToDomain.json

    Copy
    { "schemaVersion":"2.0", "description":"Run a PowerShell script to securely domain-join a Windows instance", "mainSteps":[ { "action":"aws:runPowerShellScript", "name":"runPowerShellWithSecureString", "inputs":{ "runCommand":[ "$ipdns = (Get-SSMParameterValue -Name dns).Parameters[0].Value\n", "$domain = (Get-SSMParameterValue -Name domainName).Parameters[0].Value\n", "$username = (Get-SSMParameterValue -Name domainJoinUserName).Parameters[0].Value\n", "$password = (Get-SSMParameterValue -Name domainJoinPassword -WithDecryption $True).Parameters[0].Value | ConvertTo-SecureString -asPlainText -Force\n", "$credential = New-Object System.Management.Automation.PSCredential($username,$password)\n", "Set-DnsClientServerAddress \"Ethernet 2\" -ServerAddresses $ipdns\n", "Add-Computer -DomainName $domain -Credential $credential\n", "Restart-Computer -force" ] } } ] }
  5. 新しい SSM ドキュメントを作成するには、AWS Tools for Windows PowerShell で次のコマンドを実行します。

    Copy
    $json = Get-Content C:\temp\JoinInstanceToDomain | Out-String New-SSMDocument -Name JoinInstanceToDomain -Content $json
  6. インスタンスにドメインを結合させるには、AWS Tools for Windows PowerShell で次のコマンドを実行します。

    Copy
    Send-SSMCommand -InstanceId Instance-ID -DocumentName JoinInstanceToDomain