RDS Proxy の IAM 認証の設定 - Amazon Relational Database Service

RDS Proxy の IAM 認証の設定

Amazon RDS で RDS Proxy の AWS Identity and Access Management (IAM) 認証を設定するには、必要なアクセス許可を付与する IAM ポリシーを作成して設定します。

このトピックでは、必要な IAM ポリシーの作成や IAM ロールへのアタッチなど、RDS Proxy の IAM 認証を設定する手順について説明します。

ヒント

この手順は、独自の IAM ロールを作成する場合にのみ必要です。それ以外の場合は、プロキシの設定時に RDS が自動的に必要なロールを作成するため、これらのステップをスキップできます。

前提条件

RDS Proxy の IAM 認証を設定する前に、以下があることを確認してください。

  • AWS Secrets Manager – データベース認証情報を含む少なくとも 1 つの保存済みシークレット。シークレットの作成手順については、「RDS Proxy のデータベース認証情報の設定」を参照してください。

    これはエンドツーエンドの IAM 認証を使用している場合は必要ありません。

  • IAM アクセス許可 – AWS Secrets Manager で IAM ポリシー、ロール、シークレットを作成および管理するためのアクセス許可を持つ IAM ロールまたはユーザー。

エンドツーエンドの IAM 認証用の IAM ポリシーの作成

エンドツーエンドの IAM 認証を使用する場合、RDS Proxy は Secrets Manager から認証情報を取得するのではなく、IAM 認証を使用してデータベースに接続します。これには、プロキシで使用するデータベースアカウントの rds-db:connect アクセス許可を持つ IAM ロールを設定する必要があります。

IAM を使用して RDS Proxy をデータベースに対して認証するには、必要なデータベース接続許可を付与するポリシーを持つ IAM ロールを作成します。

プロキシを使用してエンドツーエンドの IAM 認証用のロールを作成するには
  1. AWS マネジメントコンソール にサインインして、IAM コンソール https://console.aws.amazon.com/iam/ を開きます。

  2. ロールに対するアクセス許可ポリシーを作成します。一般的な手順については、「IAM ポリシーを作成する (コンソール)」を参照してください。

    このポリシーを JSON エディタに貼り付け、以下の変更を行います。

    • 自分のアカウント ID に置き換えます。

    • us-east-2 をプロキシが存在する必要のある場所に置き換えます。

    • データベースリソース ID とユーザー名を、使用するものに置き換えます。リソース ID の形式は、RDS インスタンスと Aurora clusters で異なります。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "rds-db:connect", "Resource": [ "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_1", "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_2" ] } ] }
  3. ロールを作成し、アクセス許可ポリシーをそのロールにアタッチします。一般的な手順については、「AWS サービスにアクセス許可を委任するロールを作成する」を参照してください。

    [信頼されたエンティティタイプ] で、[AWS サービス] を選択します。[ユースケース] で、[RDS] を選択し、ユースケースの [RDS – ロールをデータベースに追加する] を選択します。

  4. [アクセス許可ポリシー] で、作成したポリシーを選択します。

  5. [信頼されたエンティティを選択] で、ロールの次の信頼ポリシーを入力します。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

AWS CLI を使用してロールを作成するには、次のリクエストを送信します。

aws iam create-role \ --role-name my_e2e_iam_role_name \ --assume-role-policy-document '{"Version":"2012-10-17", "Statement":[{"Effect":"Allow","Principal":{"Service":["rds.amazonaws.com"]},"Action":"sts:AssumeRole"}]}'

ポリシーをロールにアタッチします。

aws iam put-role-policy \ --role-name my_e2e_iam_role_name \ --policy-name e2e_iam_db_connect_policy \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "rds-db:connect", "Resource": [ "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_1", "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_2" ] } ] }'

エンドツーエンドの IAM 認証用に設定された IAM ロールとアクセス許可を使用して、DefaultAuthSchemeIAM_AUTH に設定してプロキシを作成できるようになりました。このプロキシは、Secrets Manager シークレットを必要とせずに、IAM を使用してデータベースに直接認証します。手順については、「Amazon RDS のプロキシの作成」を参照してください。

エンドツーエンドの IAM 認証を使用する場合は、「IAM 認証を使用したデータベースアカウントの作成」で説明されているように、データベースユーザーが IAM 認証用に設定されていることを確認します。

Secrets Manager アクセス用の IAM ポリシーの作成

RDS Proxy が Secrets Manager からデータベース認証情報を取得できるようにするには、必要なアクセス許可を付与するポリシーを持つ IAM ロールを作成します。

プロキシで使用するシークレットにアクセスするためのロールを作成するには
  1. AWS マネジメントコンソール にサインインして、IAM コンソール https://console.aws.amazon.com/iam/ を開きます。

  2. ロールに対するアクセス許可ポリシーを作成します。一般的な手順については、「IAM ポリシーを作成する (コンソール)」を参照してください。

    このポリシーを JSON エディタに貼り付け、以下の変更を行います。

    • 自分のアカウント ID に置き換えます。

    • us-east-2 をプロキシが存在するリージョンに置き換えます。

    • シークレット名を、作成したシークレット名に置き換えます。詳細については、「Specifying KMS keys in IAM policy statements」を参照してください。

    • Secrets Manager シークレットの暗号化に使用した KMS キー ID を、デフォルトキーまたは独自のキーに置き換えます。

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": [ "arn:aws:secretsmanager:us-east-2:111122223333:secret:secret_name_1", "arn:aws:secretsmanager:us-east-2:111122223333:secret:secret_name_2" ] }, { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:us-east-2:111122223333:key/key_id", "Condition": { "StringEquals": { "kms:ViaService": "secretsmanager.us-east-2.amazonaws.com" } } } ] }
  3. ロールを作成し、アクセス許可ポリシーをそのロールにアタッチします。一般的な手順については、「AWS サービスにアクセス許可を委任するロールを作成する」を参照してください。

    [信頼されたエンティティタイプ] で、[AWS サービス] を選択します。[ユースケース] で、[RDS] を選択し、ユースケースの [RDS – ロールをデータベースに追加する] を選択します。

  4. [アクセス許可ポリシー] で、作成したポリシーを選択します。

  5. [信頼されたエンティティを選択] で、ロールの次の信頼ポリシーを入力します。

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

AWS CLI を使用してロールを作成するには、次のリクエストを送信します。

aws iam create-role \ --role-name my_role_name \ --assume-role-policy-document '{"Version": "2012-10-17", "Statement":[{"Effect":"Allow","Principal":{"Service":["rds.amazonaws.com"]},"Action":"sts:AssumeRole"}]}'

ポリシーをロールにアタッチします。

aws iam put-role-policy \ --role-name my_role_name \ --policy-name secret_reader_policy \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": [ "arn:aws:secretsmanager:us-east-2:account_id:secret:secret_name_1", "arn:aws:secretsmanager:us-east-2:account_id:secret:secret_name_2" ] }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:us-east-2:account_id:key/key_id", "Condition": { "StringEquals": { "kms:ViaService": "secretsmanager.us-east-2.amazonaws.com" } } } ] }'

IAM ロールとアクセス許可を設定したら、プロキシを作成してこのロールに関連付けることができます。これにより、プロキシは AWS Secrets Manager からデータベース認証情報を安全に取得し、アプリケーションの IAM 認証を有効にすることができます。手順については、「Amazon RDS のプロキシの作成」を参照してください。