機密データの指定
Amazon ECS を使用すると、AWS Systems Manager パラメータストア パラメータに機密データを保存してコンテナの定義でそれを参照することによって、コンテナに機密データを挿入できます。この機能は、Fargate または EC2 のどちらの起動タイプを使用するタスクでもサポートされています。
パラメータで AWS Secrets Manager シークレットを参照することもできます。詳細については、AWS Systems Manager ユーザーガイド の「パラメータストア パラメータからの AWS Secrets Manager シークレットの参照」を参照してください。
EC2 の起動タイプを使用するタスクの場合、この機能にはバージョン 1.22.0 以降のコンテナエージェントが必要です。ただし、最新のコンテナエージェントのバージョンを使用することをお勧めします。エージェントのバージョンの確認と最新バージョンへの更新については、「Amazon ECS コンテナエージェントの更新」を参照してください。
Fargate の起動タイプを使用するタスクの場合、この機能にはプラットフォームバージョン 1.3.0 以降が必要です。詳細については、AWS Fargate プラットフォームのバージョン を参照してください。
注記
この機能は GovCloud (米国東部) リージョンでは利用できません。
コンテナの定義内で、コンテナ内で設定する環境変数の名前で secrets
を指定し、コンテナに渡す機密データが入っている AWS Systems Manager パラメータストア パラメータの名前または ARN を指定します。パラメータを使用するコンテナのリージョンと異なるリージョンのパラメータを参照できますが、パラメータは同じアカウント内にある必要があります。
注記
起動しているタスクと同じリージョンに Systems Manager パラメータストア パラメータが存在する場合は、シークレットの完全な ARN または名前のどちらも使用できます。別のリージョンにパラメータが存在する場合は、完全な ARN を指定する必要があります。
必要なパラメータを示すタスク定義のスニペットを以下に示します。
"containerDefinitions": [ { "secrets": [ { "name": "
environment_variable_name
", "valueFrom": "arn:aws:ssm:region
:aws_account_id
:parameter/parameter_name
" } ] } ]
Amazon ECS シークレットで必須の IAM アクセス許可
この機能を使用するには、ユーザーが Amazon ECS タスク実行ロールを持っている必要があります。このロールにより、必要な AWS Systems Manager と Secrets Manager のリソースをコンテナエージェントがプルできます。詳細については、「Amazon ECS タスク実行 IAM ロール」を参照してください。
作成した AWS Systems Manager パラメータストア パラメータにアクセスできるように、タスク実行ロールに以下のアクセス許可をインラインポリシーとして手動で追加する必要があります。詳細については、「IAM ポリシーの追加と削除」を参照してください。
-
ssm:GetParameters
– Systems Manager パラメータストア パラメータをタスク定義で参照する場合は常に必須です。 -
secretsmanager:GetSecretValue
– パラメータで Secrets Manager シークレットを参照している場合にのみ必須です。 -
kms:Decrypt
— カスタムの KMS キーを使用するが、デフォルトのキーは使用しない場合にのみ必須。そのカスタムキーの ARN はリソースとして追加されている必要があります。
次の例のインラインポリシーでは必須アクセス許可を追加しています。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetParameters", "secretsmanager:GetSecretValue", "kms:Decrypt" ], "Resource": [ "arn:aws:ssm:
region
:aws_account_id
:parameter/parameter_name
", "arn:aws:secretsmanager:region
:aws_account_id
:secret:secret_name
", "arn:aws:kms:region
:aws_account_id
:key/key_id
" ] } ] }
AWS Systems Manager パラメータストア パラメータの作成
AWS Systems Manager コンソールを使用して、機密データ用の Systems Manager パラメータストア パラメータを作成できます。
パラメータストア パラメータを作成するには
-
AWS Systems Manager コンソール (https://console.aws.amazon.com/systems-manager/) を開きます。
-
ナビゲーションペインで [Parameter Store (パラメータストア)]、[Create parameter (パラメータの作成)] の順に選択します。
-
[Name (名前)] に、階層とパラメータ名を入力します。たとえば、
test/database_password
と入力します。注記
パラメータで AWS Secrets Manager シークレットを参照している場合、そのパラメータ名は予約パス
/aws/reference/secretsmanager/
で始まっている必要があります。詳細については、AWS Systems Manager ユーザーガイド の「パラメータストア パラメータからの AWS Secrets Manager シークレットの参照」を参照してください。 -
[Description (説明)] に説明を入力します (省略可能)。
-
[Type] として、[String]、[StringList]、[SecureString] のいずれかを選択します。
注記
-
[SecureString] を選択すると [KMS Key ID (KMS キー ID)] フィールドが表示されます。KMS CMK ID、KMS CMK ARN、エイリアス名、またはエイリアス ARN が指定されていない場合、システムでは Systems Manager のデフォルト KMS CMK である
alias/aws/ssm
が使用されます。このキーを使用しない場合は、カスタムキーを選択します。詳細については、AWS Systems Manager ユーザーガイド の「Secure String パラメータを使用する」を参照してください。 -
コンソールで
key-id
パラメータにカスタム KMS CMK エイリアス名またはエイリアス ARN のいずれかを指定して Secure String パラメータを作成する場合は、そのエイリアスの前にプレフィックスalias/
を指定する必要があります。ARN の例を次に示します。arn:aws:kms:us-east-2:123456789012:alias/
MyAliasName
エイリアス名の例を次に示します。
alias/
MyAliasName
-
-
[Value (値)] に値を入力します。たとえば、
MyFirstParameter
と指定します。[SecureString] を選択している場合、入力した値はマスクされます。 -
[Create parameter] を選択します。
AWS Systems Manager パラメータストア パラメータを参照するタスク定義の作成
Amazon ECS コンソールを使用して、Systems Manager パラメータストア パラメータを参照するタスク定義を作成できます。
パラメータストア パラメータを参照するタスク定義を作成するには
-
https://console.aws.amazon.com/ecs/ にある Amazon ECS コンソールを開きます。
-
ナビゲーションペインで [Task Definitions (タスク定義)]、[Create new Task Definition (新しいタスク定義の作成)] の順に選択します。
-
[Select launch type compatibility (起動タイプの互換性の選択)] ページで、タスクの起動タイプを選択してから [Next step (次の手順)] を選択します。
注記
このステップは、AWS Fargate を使用する Amazon ECS が現在サポートされているリージョンにのみ適用されます。詳細については、「AWS Fargate での Amazon ECS」を参照してください。
-
[Task Definition Name (タスク定義名)] に、タスク定義の名前を入力します。 最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。
-
[Task execution role (タスク実行ロール)] で、既存のタスク実行ロールを選択するか、[Create new role (新しいロールの作成)] を選択して作成します。このロールを使用して、タスクのプライベートイメージをプルする Amazon ECS を認証することができます。詳細については、「プライベートレジストリの認証では IAM アクセス許可が必須」を参照してください。
重要
[Task execution role (実行ロール)] フィールドが表示されない場合は、[Configure via JSON (JSON による設定)] を選択し、[
executionRoleArn
] フィールドを手動で追加して、タスク実行ロールを指定します。次のコードは構文を示しています。"executionRoleArn": "arn:aws:iam::
aws_account_id
:role/ecsTaskExecutionRole" -
タスク定義で作成するコンテナごとに、以下のステップを実行します。
-
[Container Definitions (コンテナの定義)] で [Add container (コンテナの追加)] を選択します。
-
[Container name (コンテナ名)] に、コンテナの名前を入力します。 最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。
-
[イメージ] に、イメージ名、またはプライベートイメージのパスを入力します。 最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。
-
[Advanced container configuration (詳細コンテナ設定)] を展開します。
-
[Environment (環境)] の下にある [Environment variables (環境変数)] で以下のフィールドに入力します。
-
[Key (キー)] に、コンテナ内で設定する環境変数の名前を入力します。これは、コンテナの定義の
secrets
セクションのname
フィールドに相当します。 -
[Value (値)] で [ValueFrom] を選択します。[Add value (値の追加)] に、コンテナに入れるデータが格納されている AWS Systems Manager パラメータストア パラメータの名前または ARN を環境変数として入力します。
注記
起動しているタスクと同じリージョンに Systems Manager パラメータストア パラメータが存在する場合は、シークレットの完全な ARN または名前のどちらも使用できます。別のリージョンにパラメータが存在する場合は、完全な ARN を指定する必要があります。
-
-
コンテナの定義で使用するために、残りの必須のフィールドとオプションのフィールドに入力します。その他のコンテナの定義パラメータは、[Advanced container configuration (詳細コンテナ設定)] メニューより設定できます。詳細については、「タスク定義パラメータ」を参照してください。
-
[Add] を選択します。
-
-
コンテナが追加されたら、[作成] を選択します。