ローテーションへのアクセス許可 - AWS Secrets Manager

ローテーションへのアクセス許可

Secrets Manager は、Lambda 関数を使用してシークレットをローテーションします。Lambda サービスは、IAM 実行ロールを想定し、Lambda 関数の実行時に、これらの認証情報を Lambda 関数のコードに提供します。Secrets Manager コンソールを使用してローテーションを有効にすると、Lambda 関数、リソースポリシー、実行ロール、および実行ロールのインラインポリシーが作成されます。

別の方法で Lambda 関数を作成する場合は、その関数に正しい許可があることを確認する必要があります。また、実行ロールを作成し、そのロールが正しい権限を持っていることを確認する必要があります。

自動ローテーションを有効にするには、IAM 実行ロールを作成し、そのロールにアクセス権限ポリシーをアタッチするアクセス許可が必要です。iam:CreateRole 許可と iam:AttachRolePolicy 許可の両方が必要です。

警告

iam:CreateRole 許可と iam:AttachRolePolicy 許可の両方をアイデンティティに付与すると、アイデンティティが自身に任意の許可を付与できるようになります。

Lambda 関数のリソースポリシーに、コンテキストキーを含めることをお勧めします。aws:SourceAccount防ぐのに役立つAWS Lambdaとして用いられることから混乱した代理人。ある程度の場合AWSサービスでは、混乱する副シナリオを避けるために、AWSを両方使用することをお勧めしますaws:SourceArnそしてaws:SourceAccountグローバル条件キー。ただし、コンテキストキーを含めるとaws:SourceArnLambda ローテーション関数ポリシーでは、ローテーション関数は、その ARN で指定されたシークレットをローテーションするためにのみ使用できます。コンテキストキーのみを含めることをお勧めしますaws:SourceAccount複数のシークレットに対して回転関数を使用できるようにする。

Lambda 関数のリソースポリシー

以下のポリシーでは、Secrets Manager で指定された Lambda 関数を呼び出すことができます。Resource。Lambda 関数にリソースポリシーをアタッチするには、AWS Lambdaにリソースベースのポリシーを使用するを参照してください。

{ "Version": "2012-10-17", "Id": "default", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "secretsmanager.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "LambdaRotationFunctionARN", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333" } } } ] }

あるいは、次の AWS CLI コマンドを実行すると、この許可を追加できます。

aws lambda add-permission --function-name ARN_of_lambda_function --principal secretsmanager.amazonaws.com --action lambda:InvokeFunction --statement-id SecretsManagerAccess

Lambda 関数実行ロールインラインポリシー

次の例は、Lambda 関数の実行ロールのインラインポリシーを示しています。実行ロールを作成し、アクセス権限ポリシーをアタッチするには、を参照してください。AWS Lambda実行ロール

例 シングルユーザーでのローテーション戦略用の IAM 実行ロールのインラインポリシー

DB 認証情報のローテーションの実行 の場合、Secrets Manager が IAM 実行ロールを作成した上で、このポリシーをそのロールにアタッチします。

次のポリシーの例では、関数が次の操作を許可します。

  • ローテーション関数を使用するように設定されたシークレットにおいて、 Secrets Manager のオペレーションを実行できるように許可します。

  • 新しいパスワードを作成します。

  • データベースまたはサービスが VPC で実行されている場合、必要な設定のセットアップを行います。VPC 内のリソースにアクセスするように Lambda 関数を設定する、を参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:DescribeSecret", "secretsmanager:GetSecretValue", "secretsmanager:PutSecretValue", "secretsmanager:UpdateSecretVersionStage" ], "Resource": "SecretARN" }, { "Effect": "Allow", "Action": [ "secretsmanager:GetRandomPassword" ], "Resource": "*" }, { "Action": [ "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DetachNetworkInterface" ], "Resource": "*", "Effect": "Allow" } ] }

例 交代ユーザー戦略用 IAM 実行ロールのインラインポリシーステートメント

DB 認証情報のローテーションの実行 の場合、Secrets Manager が IAM 実行ロールを作成した上で、このポリシーをそのロールにアタッチします。

次のポリシーの例では、関数が次の操作を許可します。

  • ローテーション関数を使用するように設定されたシークレットにおいて、 Secrets Manager のオペレーションを実行します。

  • 別のシークレットで認証情報を取得します。Secrets Manager は、それぞれのシークレットの認証情報を使用し、ローテーションされたシークレットの認証情報を更新します。

  • 新しいパスワードを作成します。

  • データベースまたはサービスが VPC で実行される場合、必要な設定のセットアップを行います。詳細については、「VPC 内のリソースにアクセスするように Lambda 関数を設定する」を参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:DescribeSecret", "secretsmanager:GetSecretValue", "secretsmanager:PutSecretValue", "secretsmanager:UpdateSecretVersionStage" ], "Resource": "SecretARN" }, { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": "SeparateSecretARN" }, { "Effect": "Allow", "Action": [ "secretsmanager:GetRandomPassword" ], "Resource": "*" }, { "Action": [ "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DetachNetworkInterface" ], "Resource": "*", "Effect": "Allow" } ] }

例 カスタマー管理キーでの IAM 実行ロールのインラインポリシーステートメント

AWS マネージドキー aws/secretsmanager 以外の KMS キーを使用しシークレットを暗号化する場合は、そのキーの使用に関するアクセス許可を、Lambda の実行ロールに付与する必要があります。

次に、関数による KMS キーの取得を許可するため実行ロールポリシーに追加する、ステートメントの例を示します。

{ "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "KMSKeyARN" }