Openflowをセットアップする

このトピックでは、Openflow のセットアップ手順について説明します。

Openflow のセットアップには、以下のステップがあります。

前提条件

Snowflakeおよび AWS アカウントで完了する前提条件は以下のとおりです。

Snowflakeアカウント

  • Snowflakeアカウントでイメージリポジトリを使用したことがない場合は、デプロイメントサービスがSnowflakeからOpenflowイメージをプルできるようにするために、以下をセットする必要があります。

    USE ROLE ACCOUNTADMIN;
    
    CREATE DATABASE IF NOT EXISTS OPENFLOW;
    USE OPENFLOW;
    CREATE SCHEMA IF NOT EXISTS OPENFLOW;
    USE SCHEMA OPENFLOW;
    CREATE IMAGE REPOSITORY IF NOT EXISTS OPENFLOW;
    grant usage on database OPENFLOW to role public;
    grant usage on schema OPENFLOW to role public;
    grant read on image repository OPENFLOW.OPENFLOW.OPENFLOW to role public;
    
    Copy
  • Openflow をセットアップするには、Snowflake アカウントレベルで新しい権限を定義する必要があります。新しい権限は、既定の権限セットの一部として ACCOUNTADMIN ロールに割り当てられます。ACCOUNTADMIN は自動的に以下の2つの権限を持ち、Openflowの管理者ロール(以下のコードでは $OPENFLOW_ADMIN_ROLE と表記)に対して任意の権限を付与することができます。

    USE ROLE ACCOUNTADMIN;
    
    GRANT CREATE OPENFLOW DATA PLANE INTEGRATION ON ACCOUNT TO ROLE $OPENFLOW_ADMIN_ROLE;
    GRANT CREATE OPENFLOW RUNTIME INTEGRATION ON ACCOUNT TO ROLE $OPENFLOW_ADMIN_ROLE;
    
    Copy
  • さらに、すべての Openflow ユーザーに対して default_secondary_rolesALL にセットする必要があります。これは、Openflow アクションが、既定のロールだけでなく、認証されたユーザーのロールのいずれかを使用して許可されるためです。OPENFLOW_USER を各 Openflow ユーザーごとに置き換えてください。

    USE ROLE ACCOUNTADMIN;
    
    ALTER USER $OPENFLOW_USER SET DEFAULT_SECONDARY_ROLES = ('ALL');
    
    Copy

デプロイメント統合権限

デプロイメント統合オブジェクトは、1 つ以上の Snowflake Openflow ランタイムをデプロイするためにプロビジョニングされたリソースのセットを表します。独自のクラウドリソースを持ち込む組織の場合、デプロイメント統合オブジェクトは、管理されたKubernetesクラスタとその関連ノードを表します。

Snowflake アカウントの CREATE DATA PLANE INTEGRATION 権限を持つユーザーは、デプロイメント統合オブジェクトを作成および削除できます。

デプロイメント統合オブジェクトに直接追加の権限を定義して、アクセスの差別化をサポートすることができます。

デプロイメント統合オブジェクトには、次の権限を付与できます。

  • OWNERSHIP: デプロイメントの削除など、デプロイメントアクション オブジェクトの完全な制御が可能になります。

  • USAGE: ランタイム子オブジェクトの作成を可能にします。

ランタイム権限

ランタイムオブジェクトは、フロー定義を実行するためにプロビジョニングされた 1 つ以上の Snowflake Openflow ランタイムサーバーのクラスタを表します。Kubernetesデプロイの場合、ランタイムオブジェクトは、名前空間にデプロイされたSnowflake Openflow Runtimeコンテナのステートフルなセットを、サポートコンポーネントとともに表します。

親展開統合オブジェクトの権限(OWNERSHIP)とアカウント レベルの権限(CREATE RUNTIME INTEGRATION)を持つユーザーは、ランタイム統合オブジェクトを作成できます。ランタイム統合オブジェクトに直接追加権限を定義して、アクセスの差別化をサポートすることができます。

ランタイム統合オブジェクトには、以下の権限を付与できます。

  • OWNERSHIP: 関連するランタイムの削除やランタイムフロー定義の変更を含む、ランタイムアクションの完全な制御を可能にします。

  • USAGE: ランタイムに変更を加えることなく、健全性とステータスを観察するために、デプロイされたランタイムへの読み取りアクセスを有効にします。

ロール設定の例

以下のロールをセットアップするシナリオを考えてみましょう。

  • accountadmin:Snowflakeのすぐに使えるロールで、この2つの CREATE 権限を持ちます。

    • CREATE OPENFLOW DATA PLANE INTEGRATION

    • CREATE OPENFLOW RUNTIME INTEGRATION

  • deployment_manager: デプロイメントの作成、管理、削除を行うロール

  • deployment1_runtime_manager_1: 配置 1 内でのみランタイムを作成できるロール。deployment1_runtime_manager_2 が作成したランタイムではなく、作成した配置 1 内のランタイムを変更および削除できます。

  • deployment1_runtime_manager_2: 配置 1 内でのみランタイムを作成できるロール。deployment1_runtime_manager_1 が作成したランタイムではなく、自分が作成した配置 1 内のランタイムを変更および削除できます。

  • deployment1_runtime_viewer_1: deployment1_runtime_manager_1が作成したデプロイメント1内のランタイムキャンバスを表示できるロール。

  • deployment1_runtime_viewer_2: deployment1_runtime_manager_2 によって作成された配置 1 内のランタイム キャンバスを表示できるロール。

  • deployment2_runtime_manager: デプロイメント2内でのみランタイムを作成できるロール。

  • deployment2_runtime_viewer: デプロイメント2内のランタイムキャンバスを表示できるロール。

これらのロールで Openflow をセットアップするには、次のようにします。

  1. 新しいロールを作成し、関連する権限を割り当てます。

    use role accountadmin;
    create role if not exists deployment_manager;
    create role if not exists deployment1_runtime_manager_1;
    create role if not exists deployment1_runtime_manager_2;
    create role if not exists deployment1_runtime_viewer_1;
    create role if not exists deployment1_runtime_viewer_2;
    create role if not exists deployment2_runtime_manager;
    create role if not exists deployment2_runtime_viewer;
    
    
    -- assign create deployment privilege to roles, since this privilege cannot be granted in openflow ui
    grant create openflow data plane integration on account to role deployment_manager;
    
    
    -- assign create runtime privilege to roles, since this privilege cannot be granted in cp ui
    grant create openflow runtime integration on account to role deployment1_runtime_manager_1;
    grant create openflow runtime integration on account to role deployment1_runtime_manager_2;
    grant create openflow runtime integration on account to role deployment2_runtime_manager;
    
    
    -- grant these roles to desired users
    grant role <role name> to user <username>;
    
    ........
    
    Copy
  2. デプロイメントを作成します。

    1. deployment_managerとしてログインします。

    2. Openflow UI に配置 1 を作成します。deployment1_runtime_manager_1とdeployment1_runtime_manager_2に USAGE 権限を付与します。

    3. Openflow UI に配置 2 を作成します。deployment2_runtime_managerに USAGE 権限を付与します。

      デプロイメントでランタイムを作成するには、デプロイメントの CREATE OPENFLOW RUNTIME INTEGRATION 権限と USAGE 権限が必要です。

  3. deployment1_runtime_manager_1 としてデプロイメント 1 にランタイムを作成します。

    1. deployment1_runtime_manager_1としてログインします。

    2. deployment1_runtime_manager_1は、ランタイムを作成し、このデプロイメント内で作成したランタイムを管理できる必要があります。

    3. Openflow UI で deployment1_runtime_viewer_1 を選択し、 USAGE 権限を付与します。

AWS アカウント

AWS アカウントで以下を確認してください。

  • CloudFormation スタックの作成に必要な権限を持つ AWS アカウントを持っています。

  • あなたの組織には、 CloudFormation スクリプトを実行し、新しい VPC (CloudFormation で作成)または既存の VPC 内に EKS をセットアップする能力を持つ AWS 管理者がいます。 BYO-VPC (既存の VPC) の前提条件を参照してください。

注釈

AWS アカウントで Openflow のインストールがどのように行われるか、また、 CloudFormation テンプレートで構成されるパーミッションについては、 インストールプロセス を参照してください。

BYO-VPC (既存の VPC) の前提条件

既存の VPC と独自のプライベートサブネットを使用する場合は、以下を確認してください。

  • 1つの VPC

  • VPC に接続された1つのインターネット・ゲートウェイ。

  • 異なる可用性ゾーンにある2つのパブリックサブネット。

    • パブリック・サブネットは、少なくとも/27 CIDR の範囲で、パブリック・サブネット用に32 IPs を設定してください。

    • 両方のパブリックサブネットは、宛先0.0.0.0/0とターゲットインターネットゲートウェイへのルーティングを持っている必要があります。

    • AWS ネットワークロードバランサーは高可用性を必要とするので、パブリックサブネットは異なる可用性ゾーンになければなりません。

    • AWS ロードバランサーを作成するには、パブリックサブネットに次のようにタグを付ける必要があります。

      • キー: kubernetes.io/role/elb

      • 値: 1

  • パブリックサブネットに接続された「パブリック」接続タイプの1つの NAT ゲートウェイ。

  • 異なる可用性ゾーンにある2つのプライベートサブネット。

    • サブネットは少なくとも/24 CIDR の範囲で、256の可用性を持つ IPs を割り当てる必要があります。このため、作成できるランタイムの数と規模が制限されるため、デプロイメントにはより大きな範囲を使用する方が適切な場合があります。

    • 各プライベートサブネットには、パブリックサブネットの NAT ゲートウェイへの0.0.0.0/0のルートテーブルエントリが必要です。

    • これらのサブネットは、 EKS プロビジョニングの前提条件である、異なる可用性ゾーンにある必要があります。

以下に留意点を挙げます。

  • Openflow のデプロイメントエージェントはプライベート サブネット 1 で実行され、インターネット ゲートウェイにバインドする必要があります。そうしないと、初期化やセットアップが適切に行われず、インフラがプロビジョニングされません。

  • プライベートサブネットからルーティング可能なパブリック NAT ゲートウェイがなければ、 EKS クラスタリングなどのリソースはインターネットにアクセスできません。さらに、デプロイメント エージェントは Openflow デプロイメントをインストールできません。

Openflowの利用規約に同意します。

このステップは、あなたの組織で一度だけ必要です。

  1. ORGADMIN ロールを持つユーザーとして Snowflake にサインインします。

  2. Data » Openflow に移動します。

  3. Openflow の利用規約に同意します。

クラウドにデプロイメントを作成

重要

既定のロールが ACCOUNTADMIN, ORGADMIN, GLOBALORGADMIN, SECURITYADMIN の場合、ユーザーは Openflow にサインインできません。Openflow にログインするには、ユーザーの既定のロールを ACCOUNTADMIN、 ORGADMIN、 GLOBALORGADMIN、 SECURITYADMIN以外のロールに変更する必要があります。詳細情報については、 前提条件 をご参照ください。

  1. ACCOUNTADMIN が Openflow を使用するために割り当てたロールで Snowflake にサインインします。

  2. Data » Openflow に移動します。

  3. Launch Openflow を選択します。

  4. Openflow UI で、 Create a deployment を選択します。 Deployments タブが開きます。

  5. Create a deployment を選択します。デプロイメントウィザードが開きます。

  6. Prerequisites ステップで、すべての条件を満たしていることを確認してください。 Next を選択します。

  7. Deployment location ステップで、デプロイメントの場所として Amazon Web Services を選択します。デプロイメントの名前を入力します。 Next を選択します。

  8. Configuration ステップでは、以下の構成オプションのいずれかを選択できます。

    • Fully managed VPC: VPC を Snowflake で管理したい場合は、このオプションを選択します。

    • Bring your own VPC: 既存の VPC を使用する場合は、このオプションを選択します。

  9. Create Deployment を選択します。

  10. デプロイメントが構成されると、 CloudFormation テンプレートをダウンロードして、 AWS アカウントでセットアップ プロセスを完了できるダイアログ ボックスが表示されます。このテンプレートをダウンロードし、 AWS アカウントに移動します。

  11. AWS アカウントで、テンプレートを使用して新しい CloudFormation スタックを作成します。Openflow デプロイメント エージェントの EC2 インスタンスが作成されると、 インストール プロセス の残りの部分を、infrastructure as code スクリプトを使用して完了します。 インストールの進行状況を追跡する で説明されているように、インストー ルの進行状況を追跡することができます。

    既存の VPC を使用している場合は、 CloudFormation テンプレートをアップロードする際に、2つのプライベートサブネットと VPC のドロップダウンリストでそれぞれの値を選択します。

  12. Snowflakeアカウントに移動します。

  13. [オプション] このステップは、ネットワークポリシーを使ってSnowflakeへのアクセスを制御する場合にのみ必要です。Openflow用のネットワークルールを作成し、Snowflakeアカウントの既存のネットワークポリシーに追加します。ネットワークポリシーとは、Snowflakeアカウントにアクセスできる IP アドレスを制御するルールのセットです。以下のコード・スニペットの {$NAT_GATEWAY_PUBLIC_IP} を、 CloudFormation スタックの一部として作成された NAT ゲートウェイ・パブリック IP アドレスに置き換えてください(AWS コンソールで NAT ゲートウェイを検索するか、 CFN スタックの出力を確認してください)。NAT ゲートウェイは DPA と EKS の両方で Openflow のイグレスを担当します。DPA と EKS の両方が、インストールのプライベートサブネット 1 で実行されます。

    USE ROLE ACCOUNTADMIN;
    USE DATABASE {REPLACE_WITH_YOUR_DB_NAME};
    
    CREATE NETWORK RULE allow_openflow_deployment
    MODE = INGRESS
    TYPE = IPV4
    VALUE_LIST = ('{$NAT_GATEWAY_PUBLIC_IP}/32');
    
    -- Run this command to find your currently active network policy and copy the value column
    SHOW PARAMETERS LIKE 'NETWORK_POLICY' IN ACCOUNT;
    -- Now add the new network rule to this policy
    ALTER NETWORK POLICY {ENTER_YOUR_ACTIVE_NETWORK_POLICY_NAME} ADD ALLOWED_NETWORK_RULE_LIST = (allow_openflow_deployment);
    
    Copy
  1. イベントテーブルを作成します。イベントテーブルは、ユーザーアクション、システムログ、トランザクションなどのイベントデータを保存・管理するために設計されています。Openflow 固有のイベントテーブルを使用するか、アカウント固有のイベントテーブルを使用するかを選択できます。

    • Openflow固有のイベントテーブルを作成します。

      USE ROLE accountadmin;
      GRANT create event table on schema OPENFLOW.OPENFLOW to role $ROLE_OF_DEPLOYMENT_OWNER;
      
      USE ROLE $ROLE_OF_DEPLOYMENT_OWNER;
      CREATE event table if not exists openflow.openflow.openflow_events;
      
      -- Find the Data Plane Integrations
      SHOW openflow data plane integrations;
      
      ALTER openflow data plane integration
      $OPENFLOW_deployment_UUID
      SET event_table = 'openflow.openflow.openflow_events';
      
      Copy
    • アカウント別イベントテーブルの作成

      USE database openflow;
      CREATE schema if not exists openflow.telemetry;
      CREATE event table if not exists openflow.telemetry.events;
      ALTER ACCOUNT SET EVENT_TABLE = openflow.telemetry.events;
      
      Copy
  2. Openflow UI に移動します。デプロイメントの作成には AWS で約 45 分かかります。デプロイメントが作成されると、Openflow UI のデプロイメント タブで、デプロイメントの状態が Active と表示されます。

クラウドにランタイム環境を構築

  1. Openflow Control Plane で、 Create a runtime を選択します。 Create Runtime ダイアログボックスが表示されます。

  2. Deployment ドロップダウンリストから、ランタイムを作成するデプロイメントを選択します。

  3. ランタイムの名前を入力します。

  4. Node type ドロップダウンリストからノードタイプを選択します。ノードのサイズを指定します。

  5. Min/Max node 範囲セレクターで、範囲を選択します。最小値はランタイム開始時に作成されるノード数を指定し、最大値はデータ量が多いイベントや CPU の読み込み中にランタイムがスケールアップできるノード数を指定します。

  6. Create を選択します。ランタイムの作成には数分かかります。

作成したランタイムは、Openflow のコントロール・プレーンの Runtimes タブを開いて表示することができます。ランタイムをクリックして、Openflow キャンバスを開きます。

次のステップ

ランタイムにコネクタをデプロイします。Openflow で利用可能なコネクタのリストについては、 Openflowコネクタ をご参照ください。

ネットワークの考察:ソースシステムへのOpenflow EKS

Openflow CloudFormation スタックが作成します。

  • 2つのパブリックサブネットと2つのプライベートサブネットがある1つの VPC

  • パブリックサブネットは、 AWS Network Load Balancer をホストします。これは後で作成します。プライベートサブネットは、 EKS Cluster と、ノードグループをバックアップするすべての EC2 インスタンスをホストします。Openflow ランタイムはプライベートサブネット 1 内で実行されます。

  • NAT ゲートウェイは現在、 DPA と EKS の両方に対応しています。DPA と EKS の両方が、インストールのプライベートサブネット 1 で実行されます。

例: 同じアカウントの別の VPC の RDS と通信するための新しい VPC の BYOC デプロイメント。

Openflow EKS クラスタと RDS インスタンス間の通信を有効にするには、 EKS クラスタのセキュリティグループを RDS 接続のインバウンドルールのソースとして新しいセキュリティグループを作成し、 RDS にグループをアタッチする必要があります。

  1. EKS クラスタリングセキュリティグループを見つけ、 EKS に移動し、デプロイメントキーを見つけます。また、Openflow UI では、次のようなパフォーマンスで見つけることができます。

    1. Openflow にサインインします。

    2. Deployments タブを開きます。

    3. デプロイメントの横にある[その他のオプション]アイコンを選択します。

    4. View details を選択します。フィールド Key の値がデプロイメントキーです。

  2. デプロイメント キーを見つけたら、そのキーを使用して、 AWS リソースをキー値でフィルターできます。

  3. Openflow EKS クラスタへの関連データベースポート(デフォルトでは PostgreSQL の場合は 5432)でのアクセスを許可する新しいセキュリティグループを作成します。

  4. RDS で、新しいセキュリティグループとしてアタッチします。

トラブルシューティングが必要な場合は、 Reachability Analyzer が便利です。AWS プラットフォーム内のトレース機能を使用することで、接続をブロックしている可能性のある詳細情報を提供します。

VPC ピアリングを使用した DB インスタンスへのアクセスおよび関連するセキュリティグループの構成については、以下の AWS のドキュメントを参照してください。

設置プロセス

CloudFormation スタックと Openflow Agent の間には、 BYOC のデプロイメント インストール プロセスが管理するいくつかの調整ステップがあります。目標は、 BYOC のデプロイメントに入力を提供する簡単な方法を提供するコールドスタート(CloudFormation を介して解決)と、デプロイメントの構成と、時間の経過とともに変更する必要があるコアソフトウェアコンポーネント(Openflow Agentによって解決)の間の責任を分離することです。

デプロイメント エージェントは、Openflow デプロイメント インフラストラクチャの作成と、デプロイメント サービスを含むデプロイメント ソフトウェア コンポーネントのインストールを容易にします。デプロイメントエージェントは、Snowflake システムイメージレジストリで認証を使用して Openflow コンテナーイメージを取得します。

手順は以下の通り。

注釈

BYO-VPC を使用する場合、 VPC ID と2つのプライベートサブネット IDs を Template から選択します。 CloudFormation スタックでは、ステップ 1a, 1b, 1c で述べたリソースを作成するのではなく、選択したものを使用します。

  1. CloudFormation テンプレートは以下を作成し、 AWS パーミッションの構成 で述べた AWS パーミッションで構成します。

    1. 2つのパブリックサブネットと2つのプライベートサブネットがある1つの VPCパブリックサブネットは AWS ネットワークロードバランサー(後で作成)をホストします。プライベート サブネットは EKS クラスタと、 NodeGroups をバックする EC2 インスタンスをすべてホストします。Openflow ランタイムはプライベートサブネット内で実行されます。

    2. VPC からのイグレスのためのインターネットゲートウェイ。

    3. NAT プライベートサブネットからのイグレスのためのゲートウェイ

    4. ユーザーが入力した OIDC 構成の AWS Secrets Managerエントリ

    5. IAM ロールおよびインスタンスプロファイルは、Openflow Agent が EC2 インスタンスから使用します。

    6. EC2 UserData スクリプトで初期化プロセスを自動的に実行します。このスクリプトは、入力 CloudFormation パラメーターから、Openflow デプロイメント エージェントが使用する環境変数をセットします。

    7. EC2 必要に応じてデプロイメントをアップグレードするための Openflow デプロイメント エージェントのインスタンス接続エンドポイントです。

      • BYO-VPC を使用する場合、デフォルトでは CloudFormation スタックが EC2 Instance Connect エンドポイントを作成します。しかし、このデフォルトの動作は変更することができます。管理 VPC オプションを使用する場合、 CloudFormation スタックは常に EC2 Instance Connect エンドポイントを作成します。

      • Instance Connect エンドポイントは、多数の VPCs で共有できます。

      • 配置が削除されると、 CloudFormation スタックが削除される と共に、エンドポイントも削除されます。エンドポイントが共有されている場合、他の BYO-VPC エージェントへのアクセスをブロックします。

      • EC2 Instance Connect エンドポイントを追加するには、 AWS アカウントで以下の手順を実行します。

        1. 左のナビゲーションで、 VPC » Endpoints に移動します。

        2. Create Endpoint を選択します。

        3. エンドポイントタイプを EC2 Instance Connect Endpoint に選択します。

        4. VPC を選択します。デフォルトのセキュリティグループ(VPC)を使用するには、すべてのセキュリティグループをクリア(選択しない)のままにします。

        5. サブネットを選択する場合は、 CloudFormation パラメーターでプライベートサブネット1と同じ値を使用します。

        6. Create を選択します。エンドポイントの作成には約5分かかります。

    8. Openflow AgentのTerraformの状態、ログ、出力を保存するS3バケット

  2. Openflow デプロイメント エージェントは以下を作成します。

    1. EKS クラスタリング灰かを含みます。

    • ノードグループ

    • オートスケーリンググループ

    • VPC CNI アドオン

    • EBS CSI アドオン

    1. PostgreSQL、 OAuth 認証などのシークレットマネージャの記録。

    2. IAM 様々なK8sサービスアカウントのポリシーとロールを AWS Secrets Managerからシークレットを取得します。

    3. K8sコンポーネント

    • 名前空間

    • クラスタオートスケーラー

    • EBS CSI 拡張可能ストレージ

    • AWS ロードバランサーコントローラーは、一般にアクセス可能なネットワークロードバランサーを作成します。

    • Let's Encrypt認証発行者

    • Let's Encrypt用に構成されたNginx Ingress

    • メトリクスサーバー

    • Jetstack からの認証管理

    • 外部シークレット演算子

    • Temporal、deployment service、および OIDC

    • Temporal、デプロイメント・サービス、および OIDC

    • Temporalとdeploymentサービスの外部シークレット。OIDC の外部シークレットはランタイム・オペレーターによって作成・管理されます。

    • PostgreSQL

    • ランタイムノード間の通信のための自己署名証明書発行者とイングレスの構成

    • Openflow ランタイム演算子

    • Openflowデプロイメントサービス

デフォルトでは、すべての AWS アカウントには、リージョンごとに 5 つの Elastic IP アドレスの割り当てがあります。これは、パブリック (IPv4) インターネットアドレスが希少なパブリックリソースであるためです。Snowflakeでは、主にインスタンス障害時にアドレスを別のインスタンスにリマップできるElastic IP アドレスを使用し、その他のノード間通信には DNS ホスト名を使用することを強く推奨しています。

インストールの進捗を追跡

CloudFormation スタックが CREATE_COMPLETE の状態に移行すると、Openflow Agent が残りのインフラを自動的に作成します。

次のような、1つにつき10~15分かかるステップがいくつかあります。

  1. EKS クラスタの作成

  2. EKS クラスタリングへの EBS CSI アドオンのインストール

  3. RDS PostgreSQL データベースの作成

Openflow エージェントのステータスレポートはまだ可用性はありません。その間、Openflow エージェントのログを表示し、 BYOC のデプロイがランタイムの準備ができているかどうかを確認できます。そのためには、以下のステップを実行してください。

  1. EC2 インスタンスリストで、以下の2つのインスタンスを探します。

    • openflow-agent-{data-plane-key}:ランタイムの管理に使用する Openflow Agent です。

    • {data-plane-key}-mgmt-group:これは、 BYOC 配置の EKS クラスタ内のノードで、演算子およびその他のコア ソフトウェアを実行します。

  2. openflow-agent-{data-plane-key} インスタンスを右クリックし、 Connect を選択します。

  3. EC2 Instance Connect から Connect using EC2 Instance Connect Endpoint に切り替えます。デフォルトの EC2 インスタンス接続エンドポイントはそのままにしておきます。

  4. Connect をクリックします。新しいブラウザのタブまたはウィンドウにコマンドラインインターフェイスが表示されます。

  5. 以下のコマンドを実行して、デプロイを構成しているdockerイメージのインストールログを尾行します。

    journalctl -xe -f -n 100 -u docker
    
    Copy
  6. インストールが完了すると、次のような出力が表示されます。

    {timestamp} - app stack applied successfully
    {timestamp} - All resources applied successfully
    

AWS パーミッションの構成

このセクションでは、ロールに基づいて Openflow BYOC スタックで構成される AWS 権限のリストを示します。

注釈

{key} は、特定のデプロイメントに対して Openflow が作成および管理するクラウド リソースを一意に識別するデプロイメント キーを表します。

管理者ユーザー

cloudformation および以下のすべての権限。

IAM ロール: openflow-agent-role-{key}

{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "autoscaling:DescribeTags",
               "ec2:DescribeImages",
               "ec2:DescribeInstances",
               "ec2:DescribeLaunchTemplates",
               "ec2:DescribeLaunchTemplateVersions",
               "ec2:DescribeNetworkInterfaces",
               "ec2:DescribeSecurityGroups",
               "ec2:DescribeSubnets",
               "ec2:DescribeTags",
               "ec2:DescribeVolumes",
               "ec2:DescribeVpcs",
               "ec2:DescribeVpcAttribute",
               "iam:GetRole",
               "iam:GetOpenIDConnectProvider",
               "ecr:GetAuthorizationToken",
               "ec2:RunInstances",
               "ec2:CreateLaunchTemplate",
               "ec2:CreateSecurityGroup",
               "ec2:CreateTags",
               "ec2:DeleteTags"
            ],
            "Resource": "*",
            "Effect": "Allow"
      },
      {
            "Condition": {
               "StringLike": {
                  "aws:ResourceTag/Name": [
                        "{key}-oidc-provider"
                  ]
               }
            },
            "Action": [
               "iam:CreateOpenIDConnectProvider",
               "iam:DeleteOpenIDConnectProvider",
               "iam:TagOpenIDConnectProvider"
            ],
            "Resource": "arn:aws:iam::{Account_ID}:oidc-provider/oidc.eks.{Region}.amazonaws.com/id/*",
            "Effect": "Allow"
      },
      {
            "Action": [
               "iam:DeletePolicy",
               "iam:CreatePolicy",
               "iam:GetPolicy",
               "iam:GetPolicyVersion",
               "iam:ListPolicyVersions"
            ],
            "Resource": [
               "arn:aws:iam::{Account_ID}:policy/dp-service-role-policy-{key}",
               "arn:aws:iam::{Account_ID}:policy/oauth2-role-policy-{key}",
               "arn:aws:iam::{Account_ID}:policy/temporal-service-role-policy-{key}",
               "arn:aws:iam::{Account_ID}:policy/oidc-service-role-policy-{key}",
               "arn:aws:iam::{Account_ID}:policy/dps-temporal-role-policy-{key}"
               "arn:aws:iam::{Account_ID}:policy/dps-postgres-role-policy-{key}"
            ],
            "Effect": "Allow"
      },
      {
            "Action": [
               "iam:UpdateAssumeRolePolicy",
               "iam:PutRolePolicy",
               "iam:ListInstanceProfilesForRole",
               "iam:ListAttachedRolePolicies",
               "iam:ListRolePolicies",
               "iam:GetRolePolicy",
               "iam:CreateRole",
               "iam:AttachRolePolicy",
               "iam:DeleteRole",
               "iam:DeleteRolePolicy",
               "iam:DetachRolePolicy",
               "iam:TagRole"
            ],
            "Resource": [
               "arn:aws:iam::{Account_ID}:role/openflow-agent-role-{key}",
               "arn:aws:iam::{Account_ID}:role/{key}-*",
               "arn:aws:iam::{Account_ID}:role/dps-temporal-role-{key}",
               "arn:aws:iam::{Account_ID}:role/dps-postgres-role-{key}",
               "arn:aws:iam::{Account_ID}:role/dp-service-role-{key}",
               "arn:aws:iam::{Account_ID}:role/oauth2-role-{key}",
               "arn:aws:iam::{Account_ID}:role/oidc-service-role-{key}"
            ],
            "Effect": "Allow"
      },
      {
            "Action": [
               "autoscaling:CreateOrUpdateTags",
               "autoscaling:DeleteTags"
            ],
            "Resource": "arn:aws:autoscaling:{Region}:{Account_ID}:autoScalingGroup:*:autoScalingGroupName/eks-{key}-*",
            "Effect": "Allow"
      },
      {
            "Condition": {
               "StringLike": {
                  "aws:ResourceTag/Name": [
                        "{key}-EC2SecurityGroup-*",
                        "k8s-traffic-{key}-*",
                        "eks-cluster-sg-{key}-*",
                        "{key}-cluster-sg",
                        "postgres-{key}-sg"
                  ]
               }
            },
            "Action": [
               "ec2:AuthorizeSecurityGroupEgress",
               "ec2:AuthorizeSecurityGroupIngress",
               "ec2:RevokeSecurityGroupEgress",
               "ec2:DeleteSecurityGroup",
               "ec2:CreateTags",
               "ec2:DeleteTags",
               "ec2:CreateNetworkInterface",
               "ec2:DeleteNetworkInterface"
            ],
            "Resource": "arn:aws:ec2:{Region}:{Account_ID}:security-group/*",
            "Effect": "Allow"
      },
      {
            "Condition": {
               "StringLike": {
                  "aws:ResourceTag/elbv2.k8s.aws/cluster": "{key}"
               }
            },
            "Action": [
               "ec2:AuthorizeSecurityGroupEgress",
               "ec2:AuthorizeSecurityGroupIngress",
               "ec2:RevokeSecurityGroupEgress",
               "ec2:DeleteSecurityGroup",
               "ec2:CreateTags",
               "ec2:DeleteTags",
               "ec2:CreateNetworkInterface",
               "ec2:DeleteNetworkInterface"
            ],
            "Resource": "arn:aws:ec2:{Region}:{Account_ID}:security-group/*",
            "Effect": "Allow"
      },
      {
            "Action": [
               "ec2:CreateSecurityGroup"
            ],
            "Resource": "arn:aws:ec2:{Region}:{Account_ID}:vpc/vpc-018d2da0fde903de4",
            "Effect": "Allow"
      },
      {
            "Condition": {
               "StringLike": {
                  "ec2:ResourceTag/Name": "openflow-agent-{key}"
               }
            },
            "Action": [
               "ec2:AttachNetworkInterface"
            ],
            "Resource": "arn:aws:ec2:{Region}:{Account_ID}:instance/*",
            "Effect": "Allow"
      },
      {
            "Condition": {
               "StringLike": {
                  "aws:ResourceTag/Name": "{key}-*-group"
               }
            },
            "Action": [
               "ec2:DeleteLaunchTemplate"
            ],
            "Resource": "arn:aws:ec2:{Region}:{Account_ID}:launch-template/*",
            "Effect": "Allow"
      },
      {
            "Action": [
               "eks:CreateCluster",
               "eks:CreateAccessEntry",
               "eks:CreateAddon",
               "eks:CreateNodegroup",
               "eks:DeleteCluster",
               "eks:DescribeCluster",
               "eks:ListClusters",
               "eks:ListNodeGroups",
               "eks:DescribeUpdate",
               "eks:UpdateClusterConfig",
               "eks:TagResource"
            ],
            "Resource": "arn:aws:eks:{Region}:{Account_ID}:cluster/{key}",
            "Effect": "Allow"
      },
      {
            "Action": [
               "eks:DescribeAddon",
               "eks:DescribeAddonVersions",
               "eks:UpdateAddon",
               "eks:DeleteAddon",
               "eks:DescribeUpdate"
            ],
            "Resource": "arn:aws:eks:{Region}:{Account_ID}:addon/{key}/*",
            "Effect": "Allow"
      },
      {
            "Action": [
               "eks:DeleteNodegroup",
               "eks:DescribeNodegroup",
               "eks:ListNodegroups",
               "eks:UpdateNodegroupConfig",
               "eks:TagResource",
               "eks:DescribeUpdate"
            ],
            "Resource": "arn:aws:eks:{Region}:{Account_ID}:nodegroup/{key}/*",
            "Effect": "Allow"
      },
      {
            "Action": [
               "s3:CreateBucket",
               "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::byoc-tf-state-{key}",
            "Effect": "Allow"
      },
      {
            "Action": [
               "s3:DeleteObject",
               "s3:GetObject",
               "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::byoc-tf-state-{key}/*",
            "Effect": "Allow"
      },
      {
            "Action": [
               "secretsmanager:CreateSecret",
               "secretsmanager:DeleteSecret",
               "secretsmanager:DescribeSecret",
               "secretsmanager:GetResourcePolicy",
               "secretsmanager:GetSecretValue",
               "secretsmanager:PutSecretValue",
               "secretsmanager:UpdateSecretVersionStage"
            ],
            "Resource": "arn:aws:secretsmanager:{Region}:{Account_ID}:secret:*-{key}*",
            "Effect": "Allow"
      },
      {
            "Action": [
               "ecr:BatchCheckLayerAvailability",
               "ecr:BatchGetImage",
               "ecr:DescribeImages",
               "ecr:DescribeRepositories",
               "ecr:GetDownloadUrlForLayer",
               "ecr:ListImages"
            ],
            "Resource": "arn:aws:ecr:{Region}:{Account_ID}:*",
            "Effect": "Allow"
      },
      {
            "Action": [
               "ecr:CreateRepository",
               "ecr:CompleteLayerUpload",
               "ecr:InitiateLayerUpload",
               "ecr:PutImage",
               "ecr:UploadLayerPart"
            ],
            "Resource": "arn:aws:ecr:{Region}:{Account_ID}:repository/snowflake-openflow/*",
            "Effect": "Allow"
      },
      {
            "Condition": {
               "StringLike": {
                  "iam:AWSServiceName": "eks.amazonaws.com"
               }
            },
            "Action": [
               "iam:CreateServiceLinkedRole"
            ],
            "Resource": "arn:aws:iam::*:role/aws-service-role/eks.amazonaws.com/AWSServiceRoleForAmazonEKS",
            "Effect": "Allow"
      },
      {
            "Condition": {
               "StringLike": {
                  "iam:AWSServiceName": "eks-nodegroup.amazonaws.com"
               }
            },
            "Action": [
               "iam:CreateServiceLinkedRole"
            ],
            "Resource": "arn:aws:iam::*:role/aws-service-role/eks-nodegroup.amazonaws.com/AWSServiceRoleForAmazonEKSNodegroup",
            "Effect": "Allow"
      },
      {
            "Action": [
               "eks:AssociateAccessPolicy",
               "eks:ListAssociatedAccessPolicies",
               "eks:DisassociateAccessPolicy"
            ],
            "Resource": "arn:aws:eks:{Region}:{Account_ID}:access-entry/{key}/*",
            "Effect": "Allow"
      },
      {
            "Action": "iam:PassRole",
            "Resource": "*",
            "Effect": "Allow"
      }
   ]
}
Copy

IAM ロール: {key}-cluster-ServiceRole

AWS 管理ポリシー。

  • AmazonEKSClusterPolicy

  • AmazonEKSVPCResourceController

{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "cloudwatch:PutMetricData"
            ],
            "Effect": "Allow",
            "Resource": "*"
      }
   ]
}
{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "ec2:DescribeAccountAttributes",
               "ec2:DescribeAddresses",
               "ec2:DescribeInternetGateways"
            ],
            "Effect": "Allow",
            "Resource": "*"
      }
   ]
}
Copy

IAM ロール: {key}-addon-vpc-cni-Role

AWS 管理ポリシー。

  • Amazon EKS_CNI_P ポリシー

IAM ロール: {key}-eks-role

AWS 管理ポリシー。

  • AmazonEBSCSIDriverPolicy

  • AmazonEC2ContainerRegistryReadOnly

  • Amazon EKS_CNI_P ポリシー

  • AmazonEKSWorkerNodePolicy

  • AmazonSSMManagedInstanceCore

  • AutoScalingFullAccess

  • ElasticLoadBalancingFullAccess

{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "ec2:CreateSecurityGroup",
               "ec2:CreateTags"
            ],
            "Effect": "Allow",
            "Resource": [
               "arn:aws:ec2:{Region}:{Account_ID}:security-group/*",
               "arn:aws:ec2:{Region}:{Account_ID}:vpc/{VPC_ID}"
            ],
            "Sid": "CreateOpenflowEKSSecurityGroupAndTags"
      },
      {
            "Action": [
               "ec2:AuthorizeSecurityGroupIngress",
               "ec2:DeleteSecurityGroup"
            ],
            "Condition": {
               "StringLike": {
                  "aws:ResourceTag/Name": "eks-cluster-sg-{key}-*"
               }
            },
            "Effect": "Allow",
            "Resource": [
               "arn:aws:ec2:{Region}:{Account_ID}:security-group/*"
            ],
            "Sid": "OpenflowManageEKSSecurityGroup"
      }
   ]
}
Copy

注釈

{VPC_ID} は、 BYOC によって作成されたか、 BYO-VPC によって使用された VPC の識別子を表します。

IAM ロール: oidc-service-role-{key}

{
   "Statement": [
      {
            "Action": [
               "secretsmanager:GetSecretValue",
               "secretsmanager:DescribeSecret",
               "secretsmanager:GetResourcePolicy",
               "secretsmanager:ListSecretVersionIds"
            ],
            "Effect": "Allow",
            "Resource": [
               "arn:aws:secretsmanager:{Region}:{Account_ID}:secret:oidc-{key}*"
            ]
      }
   ],
   "Version": "2012-10-17"
}
Copy

IAM ロール: dps-postgres-role-{key}

{
   "Statement": [
      {
            "Action": [
               "secretsmanager:GetSecretValue",
               "secretsmanager:DescribeSecret",
               "secretsmanager:GetResourcePolicy",
               "secretsmanager:ListSecretVersionIds"
            ],
            "Effect": "Allow",
            "Resource": [
               "arn:aws:secretsmanager:{Region}:{Account_ID}:secret:postgres_creds-{key}*"
            ]
      }
   ],
   "Version": "2012-10-17"
}
Copy

IAM ロール: dps-temporal-role-{key}

{
   "Statement": [
      {
            "Action": [
               "secretsmanager:GetSecretValue",
               "secretsmanager:DescribeSecret",
               "secretsmanager:GetResourcePolicy",
               "secretsmanager:ListSecretVersionIds"
            ],
            "Effect": "Allow",
            "Resource": [
               "arn:aws:secretsmanager:{Region}:{Account_ID}:secret:temporal_creds-{key}*"
            ]
      }
   ],
   "Version": "2012-10-17"
}
Copy

IAM ロール: dp-service-role-{key}

{
   "Statement": [
      {
            "Action": [
               "secretsmanager:GetSecretValue",
               "secretsmanager:DescribeSecret",
               "secretsmanager:GetResourcePolicy",
               "secretsmanager:ListSecretVersionIds"
            ],
            "Effect": "Allow",
            "Resource": [
               "arn:aws:secretsmanager:{Region}:{Account_ID}:secret:dps_creds-{key}*",
               "arn:aws:secretsmanager:{Region}:{Account_ID}:secret:snowflake-oauth2-{key}*"
            ]
      }
   ],
   "Version": "2012-10-17"
}
Copy

IAM ロール: oauth2-role-{key}

{
   "Statement": [
      {
            "Action": [
               "secretsmanager:GetSecretValue",
               "secretsmanager:DescribeSecret",
               "secretsmanager:GetResourcePolicy",
               "secretsmanager:ListSecretVersionIds"
            ],
            "Effect": "Allow",
            "Resource": [
               "arn:aws:secretsmanager:{Region}:{Account_ID}:secret:snowflake-oauth2-{key}*"
            ]
      }
   ],
   "Version": "2012-10-17"
}
Copy

IAM ロール: {key}-nodegroup-NodeInstanceRole

AWS 管理ポリシー。

  • AmazonEBSCSIDriverPolicy

  • AmazonEC2ContainerRegistryReadOnly

  • Amazon EKS_CNI_P ポリシー

  • AmazonEKSWorkerNodePolicy

  • AmazonSSMManagedInstanceCore

  • AutoScalingFullAccess

  • ElasticLoadBalancingFullAccess

{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "servicediscovery:CreateService",
               "servicediscovery:DeleteService",
               "servicediscovery:GetService",
               "servicediscovery:GetInstance",
               "servicediscovery:RegisterInstance",
               "servicediscovery:DeregisterInstance",
               "servicediscovery:ListInstances",
               "servicediscovery:ListNamespaces",
               "servicediscovery:ListServices",
               "servicediscovery:GetInstancesHealthStatus",
               "servicediscovery:UpdateInstanceCustomHealthStatus",
               "servicediscovery:GetOperation",
               "route53:GetHealthCheck",
               "route53:CreateHealthCheck",
               "route53:UpdateHealthCheck",
               "route53:ChangeResourceRecordSets",
               "route53:DeleteHealthCheck",
               "appmesh:*"
            ],
            "Effect": "Allow",
            "Resource": "*"
      }
   ]
}
{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "autoscaling:DescribeAutoScalingGroups",
               "autoscaling:DescribeAutoScalingInstances",
               "autoscaling:DescribeLaunchConfigurations",
               "autoscaling:DescribeScalingActivities",
               "autoscaling:DescribeTags",
               "ec2:DescribeInstanceTypes",
               "ec2:DescribeLaunchTemplateVersions"
            ],
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "autoscaling:SetDesiredCapacity",
               "autoscaling:TerminateInstanceInAutoScalingGroup",
               "ec2:DescribeImages",
               "ec2:GetInstanceTypesFromInstanceRequirements",
               "eks:DescribeNodegroup"
            ],
            "Effect": "Allow",
            "Resource": "*"
      }
   ]
}
{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "iam:CreateServiceLinkedRole"
            ],
            "Condition": {
               "StringEquals": {
                  "iam:AWSServiceName": "elasticloadbalancing.amazonaws.com"
               }
            },
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "ec2:DescribeAccountAttributes",
               "ec2:DescribeAddresses",
               "ec2:DescribeAvailabilityZones",
               "ec2:DescribeInternetGateways",
               "ec2:DescribeVpcs",
               "ec2:DescribeVpcPeeringConnections",
               "ec2:DescribeSubnets",
               "ec2:DescribeSecurityGroups",
               "ec2:DescribeInstances",
               "ec2:DescribeNetworkInterfaces",
               "ec2:DescribeTags",
               "ec2:GetCoipPoolUsage",
               "ec2:DescribeCoipPools",
               "elasticloadbalancing:DescribeLoadBalancers",
               "elasticloadbalancing:DescribeLoadBalancerAttributes",
               "elasticloadbalancing:DescribeListeners",
               "elasticloadbalancing:DescribeListenerCertificates",
               "elasticloadbalancing:DescribeSSLPolicies",
               "elasticloadbalancing:DescribeRules",
               "elasticloadbalancing:DescribeTargetGroups",
               "elasticloadbalancing:DescribeTargetGroupAttributes",
               "elasticloadbalancing:DescribeTargetHealth",
               "elasticloadbalancing:DescribeTags"
            ],
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "cognito-idp:DescribeUserPoolClient",
               "acm:ListCertificates",
               "acm:DescribeCertificate",
               "iam:ListServerCertificates",
               "iam:GetServerCertificate",
               "waf-regional:GetWebACL",
               "waf-regional:GetWebACLForResource",
               "waf-regional:AssociateWebACL",
               "waf-regional:DisassociateWebACL",
               "wafv2:GetWebACL",
               "wafv2:GetWebACLForResource",
               "wafv2:AssociateWebACL",
               "wafv2:DisassociateWebACL",
               "shield:GetSubscriptionState",
               "shield:DescribeProtection",
               "shield:CreateProtection",
               "shield:DeleteProtection"
            ],
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "ec2:AuthorizeSecurityGroupIngress",
               "ec2:RevokeSecurityGroupIngress"
            ],
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "ec2:CreateSecurityGroup"
            ],
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "ec2:CreateTags"
            ],
            "Condition": {
               "Null": {
                  "aws:RequestTag/elbv2.k8s.aws/cluster": "false"
               },
               "StringEquals": {
                  "ec2:CreateAction": "CreateSecurityGroup"
               }
            },
            "Effect": "Allow",
            "Resource": "arn:aws:ec2:*:*:security-group/*"
      },
      {
            "Action": [
               "ec2:CreateTags",
               "ec2:DeleteTags"
            ],
            "Condition": {
               "Null": {
                  "aws:RequestTag/elbv2.k8s.aws/cluster": "true",
                  "aws:ResourceTag/elbv2.k8s.aws/cluster": "false"
               }
            },
            "Effect": "Allow",
            "Resource": "arn:aws:ec2:*:*:security-group/*"
      },
      {
            "Action": [
               "ec2:AuthorizeSecurityGroupIngress",
               "ec2:RevokeSecurityGroupIngress",
               "ec2:DeleteSecurityGroup"
            ],
            "Condition": {
               "Null": {
                  "aws:ResourceTag/elbv2.k8s.aws/cluster": "false"
               }
            },
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "elasticloadbalancing:CreateLoadBalancer",
               "elasticloadbalancing:CreateTargetGroup"
            ],
            "Condition": {
               "Null": {
                  "aws:RequestTag/elbv2.k8s.aws/cluster": "false"
               }
            },
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "elasticloadbalancing:CreateListener",
               "elasticloadbalancing:DeleteListener",
               "elasticloadbalancing:CreateRule",
               "elasticloadbalancing:DeleteRule"
            ],
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "elasticloadbalancing:AddTags",
               "elasticloadbalancing:RemoveTags"
            ],
            "Condition": {
               "Null": {
                  "aws:RequestTag/elbv2.k8s.aws/cluster": "true",
                  "aws:ResourceTag/elbv2.k8s.aws/cluster": "false"
               }
            },
            "Effect": "Allow",
            "Resource": [
               "arn:aws:elasticloadbalancing:*:*:targetgroup/*/*",
               "arn:aws:elasticloadbalancing:*:*:loadbalancer/net/*/*",
               "arn:aws:elasticloadbalancing:*:*:loadbalancer/app/*/*"
            ]
      },
      {
            "Action": [
               "elasticloadbalancing:AddTags",
               "elasticloadbalancing:RemoveTags"
            ],
            "Effect": "Allow",
            "Resource": [
               "arn:aws:elasticloadbalancing:*:*:listener/net/*/*/*",
               "arn:aws:elasticloadbalancing:*:*:listener/app/*/*/*",
               "arn:aws:elasticloadbalancing:*:*:listener-rule/net/*/*/*",
               "arn:aws:elasticloadbalancing:*:*:listener-rule/app/*/*/*"
            ]
      },
      {
            "Action": [
               "elasticloadbalancing:ModifyLoadBalancerAttributes",
               "elasticloadbalancing:SetIpAddressType",
               "elasticloadbalancing:SetSecurityGroups",
               "elasticloadbalancing:SetSubnets",
               "elasticloadbalancing:DeleteLoadBalancer",
               "elasticloadbalancing:ModifyTargetGroup",
               "elasticloadbalancing:ModifyTargetGroupAttributes",
               "elasticloadbalancing:DeleteTargetGroup"
            ],
            "Condition": {
               "Null": {
                  "aws:ResourceTag/elbv2.k8s.aws/cluster": "false"
               }
            },
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "elasticloadbalancing:AddTags"
            ],
            "Condition": {
               "Null": {
                  "aws:RequestTag/elbv2.k8s.aws/cluster": "false"
               },
               "StringEquals": {
                  "elasticloadbalancing:CreateAction": [
                        "CreateTargetGroup",
                        "CreateLoadBalancer"
                  ]
               }
            },
            "Effect": "Allow",
            "Resource": [
               "arn:aws:elasticloadbalancing:*:*:targetgroup/*/*",
               "arn:aws:elasticloadbalancing:*:*:loadbalancer/net/*/*",
               "arn:aws:elasticloadbalancing:*:*:loadbalancer/app/*/*"
            ]
      },
      {
            "Action": [
               "elasticloadbalancing:RegisterTargets",
               "elasticloadbalancing:DeregisterTargets"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:elasticloadbalancing:*:*:targetgroup/*/*"
      },
      {
            "Action": [
               "elasticloadbalancing:SetWebAcl",
               "elasticloadbalancing:ModifyListener",
               "elasticloadbalancing:AddListenerCertificates",
               "elasticloadbalancing:RemoveListenerCertificates",
               "elasticloadbalancing:ModifyRule"
            ],
            "Effect": "Allow",
            "Resource": "*"
      }
   ]
}
{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "route53:ChangeResourceRecordSets"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:route53:::hostedzone/*"
      }
   ]
}
{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "route53:GetChange"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:route53:::change/*"
      }
   ]
}
{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "route53:ListResourceRecordSets",
               "route53:ListHostedZonesByName"
            ],
            "Effect": "Allow",
            "Resource": "*"
      }
   ]
}
{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "ec2:CreateSnapshot",
               "ec2:AttachVolume",
               "ec2:DetachVolume",
               "ec2:ModifyVolume",
               "ec2:DescribeAvailabilityZones",
               "ec2:DescribeInstances",
               "ec2:DescribeSnapshots",
               "ec2:DescribeTags",
               "ec2:DescribeVolumes",
               "ec2:DescribeVolumesModifications"
            ],
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "ec2:CreateTags"
            ],
            "Condition": {
               "StringEquals": {
                  "ec2:CreateAction": [
                        "CreateVolume",
                        "CreateSnapshot"
                  ]
               }
            },
            "Effect": "Allow",
            "Resource": [
               "arn:aws:ec2:*:*:volume/*",
               "arn:aws:ec2:*:*:snapshot/*"
            ]
      },
      {
            "Action": [
               "ec2:DeleteTags"
            ],
            "Effect": "Allow",
            "Resource": [
               "arn:aws:ec2:*:*:volume/*",
               "arn:aws:ec2:*:*:snapshot/*"
            ]
      },
      {
            "Action": [
               "ec2:CreateVolume"
            ],
            "Condition": {
               "StringLike": {
                  "aws:RequestTag/ebs.csi.aws.com/cluster": "true"
               }
            },
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "ec2:CreateVolume"
            ],
            "Condition": {
               "StringLike": {
                  "aws:RequestTag/CSIVolumeName": "*"
               }
            },
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "ec2:DeleteVolume"
            ],
            "Condition": {
               "StringLike": {
                  "ec2:ResourceTag/ebs.csi.aws.com/cluster": "true"
               }
            },
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "ec2:DeleteVolume"
            ],
            "Condition": {
               "StringLike": {
                  "ec2:ResourceTag/CSIVolumeName": "*"
               }
            },
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "ec2:DeleteVolume"
            ],
            "Condition": {
               "StringLike": {
                  "ec2:ResourceTag/kubernetes.io/created-for/pvc/name": "*"
               }
            },
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "ec2:DeleteSnapshot"
            ],
            "Condition": {
               "StringLike": {
                  "ec2:ResourceTag/CSIVolumeSnapshotName": "*"
               }
            },
            "Effect": "Allow",
            "Resource": "*"
      },
      {
            "Action": [
               "ec2:DeleteSnapshot"
            ],
            "Condition": {
               "StringLike": {
                  "ec2:ResourceTag/ebs.csi.aws.com/cluster": "true"
               }
            },
            "Effect": "Allow",
            "Resource": "*"
      }
   ]
}
{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "route53:ChangeResourceRecordSets"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:route53:::hostedzone/*"
      }
   ]
}
{
   "Version": "2012-10-17",
   "Statement": [
      {
            "Action": [
               "route53:ListHostedZones",
               "route53:ListResourceRecordSets",
               "route53:ListTagsForResource"
            ],
            "Effect": "Allow",
            "Resource": "*"
      }
   ]
}
Copy