Amazonリソース名(ARN)を使用したAWSリソースへのアクセス

Amazonリソース名(ARN)を使用して、Autonomous DatabaseでAWSリソースにアクセスできます。

Amazonリソース名(ARN)を使用したAWSリソースへのアクセスについて

Autonomous DatabaseでARNロール・ベースの認証を使用すると、長期のAWS IAMアクセス・キーに基づいて資格証明を作成および保存することなく、AWSリソースに安全にアクセスできます。

たとえば、AWS S3バケットからAutonomous Databaseにデータをロードし、データに対してなんらかの操作を実行してから、変更したデータをS3バケットに書き戻すことができます。S3バケットにアクセスするためのAWSユーザー資格証明がある場合は、ARNなしでこれを実行できます。ただし、ロールベースのARNを使用してAutonomous DatabaseからAWSリソースにアクセスするには、次の利点があります:

  • Autonomous DatabaseインスタンスからAWSリソースにアクセスできるユーザーやスキーマごとに異なるポリシーを使用して、ロールベースのアクセスを作成できます。これにより、ポリシーを設定して、ロール別にAWSリソースへのアクセスを制限できます。たとえば、ロール別の読取り専用アクセスに制限するポリシーをS3バケットに設定します。
  • AWSリソースにアクセスするためにコードで長期のAWSユーザー資格証明を提供する必要がないため、ARNベースの資格証明によってセキュリティが向上します。Autonomous Databaseは、AWS Assume Role操作から生成された一時資格証明を管理します。

Autonomous DatabaseでのARNの使用を構成するステップ

Autonomous DatabaseでARNを使用して資格証明を作成する前に、AWSで、アカウント管理者はS3バケットなどのAWSリソースへのアクセスを許可するポリシーを定義する必要があります。デフォルトでは、ARN資格証明サービスはAutonomous Databaseで有効化されていません。ADMINユーザーは、必要なユーザーに対してARN資格証明を有効にします。これにより、ユーザーはAutonomous DatabaseインスタンスでARN資格証明を作成および使用できるようになります。

AWSでは、ロールARNは提供されているアクセスの識別子であり、AWSコンソールで表示できます。セキュリティを強化するために、AWS管理者がAWSアカウントのロール、ポリシーおよび信頼関係を構成する場合は、ロールの信頼関係で外部IDも構成する必要があります。

外部IDは、ロールを引き付けるための追加の保護を提供します。AWS管理者は、Autonomous Databaseインスタンスに基づいて、外部IDを次のいずれかとして構成します:

  • コンパートメントOCID

  • データベースOCID

  • テナンシOCID

AWSでは、ロールを引き受けることができるのは、リクエストURLに含まれる外部IDで識別される信頼できるユーザーのみです。リクエスト内で指定された外部IDは、ロールの信頼関係で構成された外部IDと一致します。

Note

Setting the External ID is required for security.

次に、構成ステップの概要を示します:

adb_arn_config_steps.epsの説明が続きます

DBMS_CLOUDでARNを使用するステップ

各AWSリソースには独自のアイデンティティがあり、リソースは、ARNを識別するパラメータで作成したDBMS_CLOUD資格証明を使用してAutonomous Databaseインスタンスを認証します。Autonomous Databaseは、AWSリソースへのアクセスに使用されるプリンシパル資格証明を作成および保護します。

ARNパラメータを使用してAWSリソースにアクセスするための資格証明を作成するには:

  1. AWSアカウントで前提条件ステップを実行します: AWSアカウントで、AWS管理コンソールまたはCLIを使用して、Autonomous Databaseで使用するARNのロールおよびポリシーを作成し、ロールの信頼関係を更新します。OracleユーザーARNは、役割の信頼関係が更新されたときに構成されます。

    詳細は、Amazonリソース名(ARN)を使用するためのAWS管理の前提条件の実行(ARN)を参照してください。

  2. Autonomous Databaseで前提条件ステップを実行します: Autonomous Databaseでは、ADMINユーザーまたは別のユーザーがARNパラメータで資格証明を使用してAWSリソースにアクセスできるようにする必要があります。

    詳細は、Amazon ARNを使用するためのAutonomous Database前提条件の実行を参照してください。

  3. DBMS_CLOUD.CREATE_CREDENTIALを使用して資格証明を作成し、AWSロールを識別するパラメータを指定します。資格証明オブジェクトを使用すると、Autonomous Databaseは、AWSアカウントのロールに定義されているポリシーで指定されたとおりにAWSリソースにアクセスできます。

    これらのステップの詳細については、Create Credentials with ARN Parameters to Access AWS Resourcesを参照してください。

  4. 前のステップで作成した資格証明オブジェクトを、資格証明パラメータを使用するDBMS_CLOUDプロシージャまたはファンクションとともに使用します(DBMS_CLOUD.COPY_DATADBMS_CLOUD.LIST_OBJECTSなど)。

Amazonリソース名(ARN)を使用するためのAWS管理前提条件の実行

AWS管理コンソールまたはAPIを使用して、AWSユーザー、ロール、ポリシーおよび信頼関係を作成します。Autonomous DatabaseでARNパラメータとともに資格証明を作成するためにDBMS_CLOUD.CREATE_CREDENTIALを使用する前に、これらのステップを実行します。

ARNを使用してAWSリソースにアクセスするために、AWS管理者は、ポリシーと、ユーザーによるAWSリソースへのアクセスを可能にするプリンシパルを定義します。たとえば、Autonomous Databaseの使用中に、S3バケットからデータにアクセスし、データに対してなんらかの操作を実行してから、変更したデータをS3バケットに書き込むことができます。

ノート

既存のAWS構成および使用する外部IDによっては、Autonomous Databaseインスタンスごとに新しいロールおよびポリシーを作成する必要はありません。リソースにアクセスするために必要なポリシー(S3クラウド・ストレージにアクセスするなど)を含むAWSロールがすでにある場合は、信頼関係を変更してステップ3で詳細を含めることができます。同様に、必要な信頼関係を持つロールがすでに存在する場合、コンパートメントOCIDまたはテナンシOCIDを指定する外部IDを使用すると、そのロールを使用してOCIコンパートメントまたはテナンシ内のすべてのデータベースにアクセスできます。

AWS管理コンソールまたはAPIを使用して、次のステップを実行します:

  1. ポリシーの作成ポリシーでは、S3バケットなどのAWSリソースにアクセスするための権限を指定します。
  2. ロールを作成し、そのロールにポリシーをアタッチします。
    1. AWS Management Consoleにアクセスし、Identity and Access Management (IAM)を選択します。
    2. 「Create role」をクリックします。
      arn_aws_create_role_button.pngの説明が続きます
    3. Select Another AWS account.
      arn_aws_create_role_aws_account.pngの説明が続きます
    4. アカウントIDを入力します。
      これは一時的な値として使用します。後で、これをAWSリソースへのアクセスに使用するアカウントIDに置き換えます。
    5. 「オプション」領域で、「外部IDが必要」を選択し、0000などの一時外部IDを入力します。後で、この外部IDを有効な値に置き換えました。
    6. 「次の権限」をクリックし、ステップ1で作成したポリシーまたは適用するその他のポリシーをロールにアタッチします。
    7. 「Next Tags」をクリックし、必要に応じてロールにタグを適用または作成します。
    8. 「Next Review」をクリックし、ロール名およびロールの説明を追加します。
    9. 「ロールの作成」をクリックします。

    DBMS_CLOUD.CREATE_CREDENTIALでロールのARNを使用して、AWSリソースにアクセスするためのARNパラメータを持つ資格証明オブジェクトを作成します。

    See Creating a role to delegate permissions to an IAM user for more information.

  3. ロールの信頼関係を指定します。
    1. 「Roles」リストの「Role name」で、作成したロールを選択します。
    2. 選択したロールの「サマリー」ページで、「関係の信頼」タブを選択します。
      arn_aws_create_role_aws_trust.pngの説明が続きます
    3. 信頼関係で、「Edit trust relationship」をクリックします。
      arn_aws_create_role_aws_trust_set.pngの説明が続きます
    4. 信頼関係を編集して、プリンシパル・パラメータAWSを指定します。

      このAWSユーザーARNは、CLOUD_INTEGRATIONSビューで使用できます。詳細は、Amazon ARNを使用するためのAutonomous Database前提条件の実行を参照してください。

    5. 信頼関係を編集して、外部IDを指定します。

      Autonomous Databaseで、DBMS_CLOUD.CREATE_CREDENTIALを使用してAWS ARN資格証明を作成する場合、またはDBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTHを使用してAWS ARNを有効にする場合、デフォルトではexternal_id_typeパラメータ値はdatabase_ocidです。オプションで、external_id_type値を、サポートされている値のいずれか(database_ocidcompartment_ocidまたはtenant_ocid)に設定できます。

      データベースOCIDを外部IDとして使用する場合、ポリシーの信頼関係は、OCIDで指定されたAutonomous Databaseインスタンスのみを信頼します。コンパートメントOCIDを使用する場合、ポリシーの信頼関係は、コンパートメント内のすべてのAutonomous Databaseインスタンスを信頼し、同じロールARNを使用して、指定したコンパートメント内の任意のAutonomous DatabaseにAWSリソースへのアクセス権を付与できます。同様に、テナンシOCIDを使用する場合、同じロールARNを使用して、指定したテナンシ内の任意のAutonomous Databaseにアクセス権を付与できます。

      前のステップ2で、信頼関係の外部IDを一時的な値0000に設定しました。

      AWSでは、次のいずれかと一致する信頼関係の外部ID値を構成します:

      • external_id_typeタイプがdatabase_ocidの場合、AWSでロールの信頼関係の外部IDをデータベースOCIDとして構成します。

        データベースOCIDを使用するには、次の問合せを実行します:

        SELECT cloud_identity FROM v$pdbs;

        詳細は、テナンシ詳細の取得を参照してください。

      • external_id_typeタイプがcompartment_ocidの場合、AWSでロールの信頼関係の外部IDをコンパートメントOCIDとして構成します。

        コンパートメントOCIDは、Oracle Cloud Infrastructureコンソールの「コンパートメントの詳細」ページで確認できます。「コンパートメントの詳細」ページを見つけるには、Oracle Cloud Infrastructureの左側のナビゲーション・メニューから「アイデンティティとセキュリティ」をクリックし、「コンパートメント」を選択します。Autonomous Databaseインスタンスを含むコンパートメントを選択すると、コンパートメントIDが表示されます。

      • external_id_typeタイプがtenant_ocidの場合、AWSでロールの信頼関係の外部IDをテナンシOCIDとして構成します。

        テナントOCIDは、Oracle Cloud Infrastructureコンソールの「テナントの詳細」ページで確認できます。「テナンシの詳細」ページを見つけるには、Oracle Cloud Infrastructureの左側のナビゲーション・メニューから「ポリシーと管理」をクリックし、「テナンシの詳細」を選択します。「テナント情報」タブに、テナントOCIDが表示されます。

      • ExternalIDの値を設定する場合、デフォルトではOCID値は大文字である必要があります。If you want to supply the OCID in lower case, set the condition "StringEqualsIgnoreCase" instead of "StringEquals" in the JSON when you edit the trust relationship.

      arn_aws_create_role_aws_trust_final.pngの説明が続きます

ARNロールの構成が終了したら、インスタンスでARNを有効にできます。詳細は、Amazon ARNを使用するためのAutonomous Database前提条件の実行を参照してください。

Amazon ARNを使用するためのAutonomous Database前提条件の実行

ARNパラメータとともにDBMS_CLOUD.CREATE_CREDENTIALでAWSリソースを使用する前に、ADMINユーザーは、Autonomous DatabaseインスタンスでARNを有効にする必要があります。

デフォルトでは、ARN資格証明サービスはAutonomous Databaseで有効化されていません。ADMINユーザーは、プロシージャDBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTHを実行して、ADMINユーザーまたはその他のユーザーがARNパラメータを使用して資格証明を作成できるようにします。

  1. Autonomous DatabaseインスタンスでARN資格証明の使用を有効にします。
    BEGIN
        DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
            username => 'adb_user',
            params => JSON_OBJECT( 
                    'aws_role_arn' value 'arn:aws:iam::123456:role/AWS_ROLE_ARN'));
    END;
    /
    

    指定したユーザーに、他のユーザーのARN資格証明を有効にする権限を付与する場合は、paramsパラメータのgrant_optionTRUEに設定します。

    たとえば:

    BEGIN
    DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
         username => 'adb_user',
         params => JSON_OBJECT(
                         'aws_role_arn' value 'arn:aws:iam::123456:role/AWS_ROLE_ARN',
                         'grant_option' value TRUE ));
    END;
    /

    このコマンドを実行すると、adb_userに、他のユーザーのARN資格証明を有効にする権限が付与されます。

    たとえば、adb_userとして接続する場合、次のコマンドを実行できます:

    BEGIN
        DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
            username => 'adb_user2'); 
    END;
    /
    

    詳細は、ENABLE_PRINCIPAL_AUTHプロシージャを参照してください。

  2. CLOUD_INTEGRATIONSビューを問い合せて、OracleのAWSユーザーARNを取得します。
    SELECT param_value FROM CLOUD_INTEGRATIONS
            WHERE param_name = 'aws_user_arn';
    
    PARAM_VALUE
    --------------------------------------------  
    arn:aws:iam::account-ID:user/username

    CLOUD_INTEGRATIONSビューは、ADMINユーザーまたはDWROLE権限を持つユーザーが使用できます。

    AWS管理者は、AWSシステムのロールおよびポリシーとAWSロールの信頼関係を構成する際にaws_user_arn値を使用します。この値を指定すると、DBMS_CLOUDがAWSリソースにアクセスするためのAWS側の権限を付与します。

DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTHを実行してAutonomous DatabaseインスタンスでARNを有効にすると、AWS$ARNという名前の資格証明を入力として取得する任意のDBMS_CLOUD APIで使用できます。AWS$ARNという名前の資格証明を除き、ARNパラメータを使用して追加の資格証明を作成してAWSリソースにアクセスすることもできます。詳細は、AWSリソースにアクセスするためのARNパラメータを使用した資格証明の作成を参照してください。

AWSリソースにアクセスするためのARNパラメータを使用した資格証明の作成

Autonomous DatabaseインスタンスでARNの使用が有効化され、ARNがAWS管理者によって構成されると、Autonomous DatabaseでARNパラメータを使用して資格証明オブジェクトを作成できます。

Autonomous Database creates and secures the principal credentials you use to access the Amazon resources when you supply the credential object with DBMS_CLOUD procedures and functions.

To use Amazon resources with Autonomous Database, do the following:

  1. プロシージャDBMS_CLOUD.CREATE_CREDENTIALparamsパラメータを使用して資格証明を作成し、ARN値を指定します。例:
    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_ARN',
        params =>
            JSON_OBJECT('aws_role_arn' value 'arn:aws:iam::123456:role/AWS_ROLE_ARN',                                            
                        'external_id_type' value 'database_ocid')
      );
    END;
    /

    この操作によって、暗号化された形式で資格証明がデータベースに作成されます。資格証明には任意の名前を使用できます。

    パラメータの詳細は、CREATE_CREDENTIALプロシージャを参照してください。

  2. DBMS_CLOUDプロシージャを使用して、ARN資格証明でAmazonリソースにアクセスします。

    たとえば、DBMS_CLOUD.LIST_OBJECTSを使用します。

    SELECT object_name FROM DBMS_CLOUD.LIST_OBJECTS(
               credential_name => 'DEF_CRED_ARN',
               location_uri    => 'https://my-bucket.s3.us-west-2.amazonaws.com/');

AWSリソースのARNパラメータを使用した資格証明の更新

Autonomous Databaseで使用するARN資格証明は、Autonomous DatabaseからAWSリソースにアクセスするために一時的なロール・ベースの資格証明を使用できるようにするAWSトークン・サービスと連携します。

AWS管理者がポリシー、ロールまたは信頼関係を取り消す場合は、AWSリソースにアクセスするために資格証明を更新するか、新しい資格証明を作成する必要があります。

資格証明を更新するには、次のステップを実行します:

  1. DBMS_CLOUD.UPDATE_CREDENTIALを使用して、ARNベースの資格証明を更新し、新しいARN値を指定します。
    BEGIN
      DBMS_CLOUD.UPDATE_CREDENTIAL(
         credential_name => 'DEF_CRED_ARN',
         attribute => 'aws_role_arn',
         value => 'new_ARN_value'); 
    END;
    /

    これにより、DEF_CRED_ARNという名前の資格証明のaws_role_arn属性が、新しい値new_ARN_valueに更新されます。

  2. DBMS_CLOUD.UPDATE_CREDENTIALを使用して、ARNベースの資格証明を更新し、属性external_id_typeの値を更新します。
    BEGIN
      DBMS_CLOUD.UPDATE_CREDENTIAL(
         credential_name => 'DEF_CRED_ARN',
         attribute => 'external_id_type',
         value => 'compartment_ocid'); 
    END;
    /

    これにより、external_id_type属性値が値compartment_ocidに更新されます。

詳細は、UPDATE_CREDENTIALプロシージャおよびCREATE_CREDENTIALプロシージャを参照してください。