あなたのAWS Secrets Managerシークレット - AWS Secrets Manager

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

あなたのAWS Secrets Managerシークレット

シークレットを安全に保つために、Secrets Manager はスケジュールに従って自動的にローテーションできます。シークレットがローテーションされると、Secrets Manager はシークレットとデータベースまたはサービスの両方の資格情報を更新するので、資格情報を手動で変更する必要はありません。Secrets Manager は、Lambda ローテーション関数を使用して、Secrets Manager とデータベースまたはサービスの両方と通信します。回転関数:

  • Secrets Manager の API を呼び出し、シークレットを取得および更新します。

  • ユーザーパスワードを更新する要求をデータベースまたはサービスに送信します。

Amazon RDS、Amazon DocumentDB、および Amazon Redshift のシークレットについては、自動ローテーションを有効にできます。詳細については、「組み込みのローテーションサポートを使用したデータベースのローテーションシークレット」を参照してください。

他のタイプのシークレットについては、各サービスまたはデータベースにはシークレットを構成する独自の方法があるため、シークレットのローテーションに関するサービス固有の詳細を実装する Lambda 関数を記述します。詳細については、「別のデータベースまたはサービスのシークレットのローテーションを有効にする」を参照してください。

VPC

サービスが VPC で実行されており、パブリックにアクセス可能である場合、Lambda ローテーション関数は、パブリックにアクセス可能な接続ポイントを介して通信します。

サービスがパブリックにアクセス可能でない場合、Lambda ローテーション関数が同じ VPC で実行されるように設定できます。これにより、ローテーション関数がサービスと通信できるようになります。詳細については、「」を参照してください。VPC アクセスの設定

Lambda 関数が VPC で実行されている場合、Secrets Manager との通信を許可するには、次の 2 つのオプションがあります。

  • Lambda 関数を有効にして、パブリック Secrets Manager エンドポイントにアクセスできるようにするには、NAT ゲートウェイVPC に追加します。これにより、VPC からのトラフィックはパブリックエンドポイントに到達できるようになります。これにより、VPC は一定のリスクにさらされることになります。パブリックインターネットから攻撃可能なゲートウェイ用 IP アドレスがあるためです。

  • VPC 内で、Secrets Manager サービスのエンドポイントを設定できます。これにより、VPC は、パブリックリージョンエンドポイントにアドレス指定されたすべてのリクエストをインターセプトし、それを VPC 内で実行されているプライベートサービスエンドポイントにリダイレクトできます。詳細については、「VPC エンドポイント」を参照してください。

シークレットを自動的にローテーションするために必要なアクセス許可

AWS Secrets Manager コンソールを使用して、完全にサポートされているデータベースのいずれかのシークレットにローテーションを設定すると、コンソールによってほとんどすべてのパラメータが設定されます。しかし、関数を作成した場合、または他の理由で手動で何かを行う場合は、ローテーションのその部分のアクセス許可を手動設定する必要もあります。

ローテーションを構成するユーザーに対する権限と、ローテーションをトリガーするユーザーに対する権限の比較

Secrets Manager には、2 つの個別のアクセス許可のセットが必要です。ユーザーシークレットローテーションを使用した操作:

  • ローテーションの構成に必要な権限— Secrets Manager は、信頼されているユーザーにアクセス許可を割り当てて、シークレットのローテーションを設定します。詳細については、「」を参照してください。完全なシークレットマネージャー管理者アクセス権限をユーザーに付与する

  • シークレットのローテーションに必要な権限— IAM ユーザーが必要なのは、secretsmanager:RotateSecretを使用して、設定後にローテーションをトリガーします。ローテーションの開始後、Lambda ローテーション関数は、アタッチされた IAM ロールおよびそのアクセス許可を引き継いで使用し、必要とされるAWS KMSオペレーション.

このトピックの残りの部分では、Lambda ローテーション関数が正常にシークレットを更新するためのアクセス許可について説明します。

Lambda ローテーション関数に関連付けられたアクセス許可

AWS Secrets Managerは Lambda 関数を使用して、コードを実装し、シークレット内で認証情報を更新します。

Secrets Manager サービスは Lambda 関数を呼び出します。サービスは、Lambda 関数にアタッチされた IAM ロールを呼び出すことによってこれを実行します。Secrets Manager には、次の 2 つのアクションがあります。

  • ロールを引き受けるユーザーを指定する信頼ポリシー。サービスプリンシパルによって識別されるように、Secrets Manager にロールの引き受けを許可するにはこのポリシーを構成する必要があります。secretsmanager.amazonaws.com。 Lambda コンソールでこのポリシーを表示するには、リストからシークレットの Lambda 関数を選択し、アクセス許可] タブ。左リソースベースのポリシーセクションに、次の例に示すようなコードが表示されます。

    { "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE", "Effect": "Allow", "Principal": { "Service": "secretsmanager.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "<arn of the Lambda function that this trust policy is attached to - must match exactly>" } ] }

    セキュリティ上の理由から、Secrets Manager で作成された信頼ポリシーには、Resource要素が含まれ、Lambda 関数の Amazon リソースネーム (ARN) が含まれます。ロールを引き受けるすべてのユーザーがのみロールに関連付けられた Lambda 関数。

  • -アクセス許可ポリシー仮定者の役割を指定する役割の関数を呼び出してロールを引き受ける際に、Secrets Manager が使用できるアクセス許可を指定するには、このポリシーを構成する必要があります。Secrets Manager には、実装するローテーション戦略に応じて、2 つの異なるポリシーがあります。

    • シングルユーザーのローテーション: 次の例は、シークレットに格納されている認証情報でサインインし、パスワードを変更することでシークレットを更新する関数を示しています。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:DescribeSecret", "secretsmanager:GetSecretValue", "secretsmanager:PutSecretValue", "secretsmanager:UpdateSecretVersionStage" ], "Resource": "*", "Condition": { "StringEquals": { "secretsmanager:resource/AllowRotationLambdaArn": "<lambda_arn>" } } }, { "Effect": "Allow", "Action": [ "secretsmanager:GetRandomPassword" ], "Resource": "*" }, { "Action": [ "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeNetworkInterfaces" ], "Resource": "*", "Effect": "Allow" } ] }

      単一ユーザーの例の最初のステートメントは、関数に Secrets Manager オペレーションを実行するアクセス許可を与えます。ただし、Condition要素は、この Lambda 関数 ARN をシークレットのローテーションの Lambda 関数としてこの Lambda 関数で設定されたシークレットのみに制限します。

      2 番目のステートメントにより、条件を必要としない Secrets Manager オペレーションを 1 つ追加できます。

      3 番目のステートメントにより、Lambda は VPC でデータベースまたはサービスの実行を指定するときに必要な設定をセットアップできるようになります。詳細については、「」を参照してください。Amazon VPC 内のリソースにアクセスできるように Lambda 関数を設定する()AWS Lambda開発者ガイド

    • マスターユーザーのローテーション: 次の例は、シークレットを更新する関数を示しています。マスター・シークレットを昇格されたアクセス許可を含む資格情報に置き換えます。2 人のユーザー間でどちらかのローテーション戦略を交互に使用する場合、Secrets Manager にはこの関数が必要です。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:DescribeSecret", "secretsmanager:GetSecretValue", "secretsmanager:PutSecretValue", "secretsmanager:UpdateSecretVersionStage" ], "Resource": "*", "Condition": { "StringEquals": { "secretsmanager:resource/AllowRotationLambdaArn": "<lambda_arn>" } } }, { "Effect": "Allow", "Action": [ "secretsmanager:GetRandomPassword" ], "Resource": "*" }, { "Action": [ "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeNetworkInterfaces" ], "Resource": "*", "Effect": "Allow" }, { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": "<master_arn>" } ] }

      以前の単一ユーザーポリシーと同じ 3 つのステートメントに加えて、このポリシーは 4 番目のステートメントを追加します。4 番目のステートメントにより、関数はマスターシークレットの認証情報を取得できるようになります。Secrets Manager は、マスターシークレットの認証情報を使用して、保護されたデータベースにサインインし、ローテーションされたシークレットの認証情報を更新します。