Skip to main content

AWSでのDesigner CloudとEMR Serverless

このガイドに従って、AWSプライベートデータ処理用にDesigner Cloudモジュールをデプロイします。

必要条件

Designer Cloudモジュールを展開する前に、プライベートデータ用のAWSアカウントとVPCのセットアップページで次の手順を完了する必要があります。

  1. VPCの作成」セクションで説明されているように、Alteryx One Platform専用のVPCが設定されている。

  2. IAMの設定」セクションで説明されているように、サービスアカウントと、そのサービスアカウントに紐付けられたベースIAMポリシーがある。

  3. プライベートデータ処理のプロビジョニングをトリガーする」セクションで説明されているように、プライベートデータ処理のプロビジョニングが正常にトリガーされている。

アカウントのセットアップ

ステップ1: IAMの設定

ステップ1a: Designer Cloud IAMポリシーの作成

注記

AAC_DesignerCloud_SA_Policyは、ポリシー名の例です。ポリシーには任意の名前を指定できますが、その名前は「AAC_DesignerCloud」で始まる必要があります

カスタムIAMポリシーを作成する必要があります。名前を「AAC_DesignerCloud_SA_Policy」とし、以下のポリシードキュメントを添付します。ビジュアルエディターではなくJSONタブを使用することをお勧めします。実行するには、Alteryx Oneに一部*権限が必要です。ポリシーの作成時に、セキュリティ警告が何件か発生する場合があります。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::*:role/*",
            "Condition": {
                "StringEqualsIfExists": {
                    "iam:PassedToService": [
                        "ec2.amazonaws.com",
                        "ec2.amazonaws.com.cn"
                    ]
                }
            }
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "eks:*",
                "iam:CreateServiceLinkedRole",
                "kms:CreateGrant",
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GetKeyPolicy",
                "kms:GetKeyRotationStatus",
                "kms:ListGrants",
                "kms:ListResourceTags",
                "kms:ListRetirableGrants",
                "kms:PutKeyPolicy",
                "kms:RetireGrant",
                "kms:RevokeGrant",
                "kms:ScheduleKeyDeletion",
                "kms:TagResource",
                "kms:UntagResource"
            ],
            "Resource": [
                "arn:aws:eks:*:*:addon/*/*/*",
                "arn:aws:eks:*:*:cluster/*",
                "arn:aws:eks:*:*:nodegroup/*/*/*",
                "arn:aws:eks:*:*:identityproviderconfig/*/*/*/*",
                "arn:aws:eks:*:*:access-entry/*/*/*",
                "arn:aws:kms:*:*:key/*",
                "arn:aws:iam::*:role/*"
            ]
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": [
                "iam:AttachRolePolicy",
                "iam:CreateOpenIDConnectProvider",
                "iam:CreatePolicy",
                "iam:CreatePolicyVersion",
                "iam:CreateRole",
                "iam:DeleteOpenIDConnectProvider",
                "iam:DeletePolicy",
                "iam:DeletePolicyVersion",
                "iam:DeleteRole",
                "iam:DeleteRolePolicy",
                "iam:DetachRolePolicy",
                "iam:GetOpenIDConnectProvider",
                "iam:GetPolicy",
                "iam:GetPolicyVersion",
                "iam:GetRole",
                "iam:GetRolePolicy",
                "iam:GetUser",
                "iam:GetUserPolicy",
                "iam:ListAttachedRolePolicies",
                "iam:ListAttachedUserPolicies",
                "iam:ListGroupsForUser",
                "iam:ListInstanceProfilesForRole",
                "iam:ListPolicyTags",
                "iam:ListPolicyVersions",
                "iam:ListRolePolicies",
                "iam:PassRole",
                "iam:PutRolePolicy",
                "iam:TagOpenIDConnectProvider",
                "iam:TagPolicy",
                "iam:TagRole",
                "iam:UntagOpenIDConnectProvider",
                "iam:UntagPolicy",
                "iam:UntagRole",
                "iam:UpdateOpenIDConnectProviderThumbprint",
                "iam:UpdateRole",
                "iam:UpdateAssumeRolePolicy"
            ],
            "Resource": [
                "arn:aws:iam::*:policy/*",
                "arn:aws:iam::*:oidc-provider/*",
                "arn:aws:iam::*:user/*",
                "arn:aws:iam::*:role/*"
            ]
        },
        {
            "Sid": "VisualEditor3",
            "Effect": "Allow",
            "Action": [
                "autoscaling:*",
                "ec2:*",
                "eks:CreateCluster",
                "eks:ListClusters",
                "eks:DescribeAddonVersions",
                "elasticloadbalancing:*",
                "iam:GetAccountName",
                "iam:ListAccountAliases",
                "iam:ListRoles",
                "iam:CreateInstanceProfile",
                "iam:DeleteInstanceProfile",
                "iam:GetInstanceProfile",
                "iam:TagInstanceProfile",
                "iam:UntagInstanceProfile", 
                "iam:RemoveRoleFromInstanceProfile", 
                "iam:AddRoleToInstanceProfile", 
                "kms:CreateKey",
                "logs:CreateLogGroup",
                "logs:DeleteLogGroup",
                "logs:DescribeLogGroups",
                "logs:ListTagsLogGroup",
                "logs:PutRetentionPolicy",
                "logs:TagResource",
                "logs:UntagResource",
                "logs:TagLogGroup",
                "logs:UntagLogGroup",
                "logs:ListTagsForResource",
                "networkmanager:Describe*",
                "networkmanager:Get*",
                "networkmanager:List*",
                "s3:CreateBucket",
                "s3:DeleteBucket",
                "s3:DeleteBucketPolicy",
                "s3:DeleteBucketWebsite",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion",
                "s3:DeleteObjectVersionTagging",
                "s3:GetAccelerateConfiguration",
                "s3:GetBucketAcl",
                "s3:GetBucketCORS",
                "s3:GetBucketLocation",
                "s3:GetBucketLogging",
                "s3:GetBucketObjectLockConfiguration",
                "s3:GetBucketOwnershipControls",
                "s3:GetBucketPolicy",
                "s3:GetBucketPolicyStatus",
                "s3:GetBucketPublicAccessBlock",
                "s3:GetBucketRequestPayment",
                "s3:GetBucketTagging",
                "s3:GetBucketVersioning",
                "s3:GetBucketWebsite",
                "s3:GetEncryptionConfiguration",
                "s3:GetLifecycleConfiguration",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectVersion",
                "s3:GetObjectVersionAcl",
                "s3:GetObjectVersionAttributes",
                "s3:GetObjectVersionForReplication",
                "s3:GetObjectVersionTagging",
                "s3:GetObjectVersionTorrent",
                "s3:GetReplicationConfiguration",
                "s3:ListAllMyBuckets",
                "s3:ListBucket",
                "s3:ListBucketVersions",
                "s3:PutAccelerateConfiguration",
                "s3:PutBucketAcl",
                "s3:PutBucketCORS",
                "s3:PutBucketLogging",
                "s3:PutBucketObjectLockConfiguration",
                "s3:PutBucketOwnershipControls",
                "s3:PutBucketPolicy",
                "s3:PutBucketPublicAccessBlock",
                "s3:PutBucketRequestPayment",
                "s3:PutBucketTagging",
                "s3:PutBucketVersioning",
                "s3:PutBucketWebsite",
                "s3:PutEncryptionConfiguration",
                "s3:PutLifecycleConfiguration",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectVersionAcl",
                "s3:PutObjectVersionTagging",
                "sts:GetCallerIdentity",
                "memorydb:CreateSubnetGroup",
                "memorydb:CreateUser",
                "memorydb:CreateAcl",
                "memorydb:CreateCluster",
                "memorydb:TagResource",
                "memorydb:DescribeSubnetGroups",
                "memorydb:DescribeUsers",
                "memorydb:DescribeACLs",
                "memorydb:DescribeClusters",
                "memorydb:ListTags",
                "memorydb:DeleteUser",
                "memorydb:DeleteSubnetGroup",
                "memorydb:DeleteAcl",
                "memorydb:DeleteCluster",
                "memorydb:UpdateAcl",
                "memorydb:UpdateCluster",
                "memorydb:UpdateSubnetGroup",
                "memorydb:UpdateUser"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor4",
            "Effect": "Allow",
            "Action": "secretsmanager:*",
            "Resource": "arn:aws:secretsmanager:*:*:secret:*"
        }
    ]
}

ステップ1b: IAMポリシーのタグ付け

ステップ1aで作成したカスタムIAMポリシーにタグを付けます。

タグ名

AACResource

aac_sa_custom_policy

ステップ1c: IAMポリシーの付与

プライベートデータ用のAWSアカウントとVPCのセットアップページで作成したaac_automation_saサービスアカウントに、AAC_DesignerCloud_SA_Policy IAMポリシーを添付します。

ステップ2: サブネットの設定

注記

Designer Cloud は、Machine LearningAuto Insights、およびApp Builderとサブネットの設定を共有します。これらのアプリケーションを複数展開している場合、サブネットの設定は一度のみ必要になります。

プライベートデータ処理環境のDesigner Cloudには、最大5つのサブネットグループが必要です。各グループには3つのサブネットが含まれており、それぞれが別のアベイラビリティゾーンにあります。

  • eks_controlグループ(必須): EKSコントロールプレーンは、このサブネットを使用して入力されたジョブ実行要求を受け入れます。

  • eks_nodeグループ(必須): EKSクラスターは、このサブネットを使用してAlteryxソフトウェアのジョブ(接続、変換、処理、公開など)を実行します。

  • publicグループ(必須): このグループでサービスは実行されませんが、eks_nodeグループがクラスター外への通信にこのサブネットを使用します。

  • privateグループ(必須): このグループは、プライベートデータ処理専用にサービスを実行します。

EMRに使用
  • Optionグループ(オプション): プライベートデータ処理環境内でEMR処理を有効にする場合は、このグループを使用します。EMRサービスはクラスターでは実行されませんが、AWS ServerlessのEMRエンドポイントと通信するためにIPスペースが必要です。

ステップ2a: VPCでサブネットを作成する

aac-vpc VPCでサブネットを設定します。

サブネットを作成し、以下の例に示すようにタグ付けします。CIDRとサブネットの値は、ネットワークアーキテクチャに合わせて調整できます。

大規模なアドレス空間は、完全にスケールアウトされたクラスターに対応するように設計されています。必要に応じてアドレス空間を小さくすることもできますが、処理負荷が高くなったときにスケーリングに問題が発生する可能性があります。

重要

表に記載されているように、タグ名タグ値を使用してサブネットにタグを付ける必要があります。

CIDR

サブネット名

サブネット

AZ

タグ名

タグ値

注記

10.64.0.0/18

eks_node

10.64.0.0/21

AZa

AACSubnet

eks_node

eks_node

10.64.8.0/21

AZb

AACSubnet

eks_node

eks_node

10.64.16.0/21

AZc

AACSubnet

eks_node

10.64.24.0/21

予備

10.64.32.0/19

予備(後でブルー/グリーンのアップグレード用に設定可能)

10.10.0.0/21

eks_control

10.10.0.0/27

AZa

AACSubnet

eks_control

eks_control

10.10.0.32/27

AZb

AACSubnet

eks_control

eks_control

10.10.0.64/27

AZc

AACSubnet

eks_control

10.10.0.96/27

予備

パブリック

10.10.0.128/27

AZa

AACSubnet

パブリック

パブリック

10.10.0.160/27

AZb

AACSubnet

パブリック

パブリック

10.10.0.192/27

AZc

AACSubnet

パブリック

10.10.0.224/27

予備

プライベート

10.10.1.0/25

AZa

AACSubnet

プライベート

プライベート

10.10.1.128/25

AZb

AACSubnet

プライベート

プライベート

10.10.2.0/25

AZc

AACSubnet

プライベート

10.10.1.128/25

予備

オプション

10.10.4.0/24

AZa

AACSubnet

オプション

オプション

10.10.5.0/24

AZa

AACSubnet

オプション

オプション

10.10.6.0/24

AZa

AACSubnet

オプション

10.10.7.0/24

予備

ステップ2b: サブネットのルートテーブル

サブネット用のルートテーブルを作成します。

注記

このルートテーブルは一例です。

サブネット名

ルートの宛先

ターゲット

コメント

eks_node

/18 CIDRブロック

/21 CIDRブロック

<s3 prefix id>

0.0.0.0/0

ローカル

ローカル

<vpce endpoint id>

<gateway id>

3つのAZサブネットルーティングテーブルすべてに同じルートを設定します。

eks_control

/18 CIDRブロック

/21 CIDRブロック

<s3 prefix id>

0.0.0.0/0

ローカル

ローカル

<vpce endpoint id>

<gateway id>

3つのAZサブネットルーティングテーブルすべてに同じルートを設定します。

パブリック

/18 CIDRブロック

/21 CIDRブロック

0.0.0.0/0

ローカル

ローカル

<gateway id>

3つのAZサブネットルーティングテーブルすべてに同じルートを設定します。

プライベート

/18 CIDRブロック

/21 CIDRブロック

<s3 prefix id>

0.0.0.0/0

ローカル

ローカル

<vpce endpoint id>

<gateway id>

3つのAZサブネットルーティングテーブルすべてに同じルートを設定します。

0.0.0.0/0はパブリックネットワークに送信される必要があります。

オプション

/18 CIDRブロック

/21 CIDRブロック

<s3 prefix id>

0.0.0.0/0

ローカル

ローカル

<vpce endpoint id>

<gateway id>

3つのAZサブネットルーティングテーブルすべてに同じルートを設定します。

0.0.0.0/0はパブリックネットワークに送信される必要があります。

注記

<gateway id>は、お使いのネットワークアーキテクチャに応じて、各AZに作成されるゾーナルNATゲートウェイまたはトランジットゲートウェイのいずれかになります。NATゲートウェイの場合は、パブリックサブネットのAZごとにNATゲートウェイを作成します。

プライベートデータ処理

注意

プライベートデータ処理を設定した後に、Alteryx Oneをプロビジョニングされたパブリッククラウドリソースを変更または削除すると、不整合が生じる可能性があります。これらの不整合により、ジョブの実行中またはプライベートデータ処理設定のプロビジョニング解除時にエラーが発生する可能性があります。

ステップ1: Designer Cloudのデプロイをトリガーする

Designer Cloudのプロビジョニングは、Alteryx Oneの管理者コンソールからトリガーできます。このページを表示するには、ワークスペース内のワークスペース管理者権限が必要です。

  1. Alteryx Oneのランディングページで、ユーザーのイニシャルが入った右上の丸いアイコンを選択します。メニューから[管理者コンソール]を選択します。

  2. 左側のナビゲーションメニューから[プライベートデータ処理]を選択します。

  3. Designer Cloudチェックボックスを選択し、[更新]を選択します。

[更新]を選択すると、AWSアカウント内のクラスターとリソースのデプロイがトリガーされます。これにより、一連の検証チェックが実行され、AWSアカウントの設定が正しいことが確認されます。

注記

プロビジョニングプロセスの完了には、約35-40分かかります。

プロビジョニングが完了すると、作成したリソース(EC2インスタンスやノードグループなど)をAWSコンソールから表示できます。これらは絶対に自分で変更しないでください。手動で変更すると、プライベートデータ処理の機能に問題が発生する可能性があります。

ステップ2: カスタムロールの信頼関係を付加する

注記

このステップは、プライベートデータストレージを設定したときに権限にクロスアカウントロールを使用した場合にのみ必要です。そのステップでアクセスキーを使用した場合は、このステップをスキップできます。

重要

ステップ1が正常に完了するまで待ってから、このステップに進んでください。

プライベートデータストレージがクロスアカウントロールを使用している場合、新しいプライベートデータ処理環境でプライベートデータストレージの読み取りや書き込みをするには、そのロールを更新して新しいKubernetesクラスターロールに信頼関係を付加する必要があります。

{
    "Sid": "",
    "Effect": "Allow",
    "Principal": {
         "AWS": "arn:aws:iam::<accountid>:role/aac-<xxxx-xxxxxxxxxxxx>-cluster-role"
    },
    "Action": "sts:AssumeRole"
}

注記

AWSプリンシパルを、プライベートデータ処理のプロビジョニングプロセスで作成されたIAMロールのARNに置き換えます。

<accountid>: プライベートデータ処理環境の処理がプロビジョニングされているAWSアカウント番号。

<xxxx-xxxxxxxxxxxx>: プライベートデータ処理環境IDの最後の2つのセグメント。このIDは、プライベートデータ処理環境が正常にプロビジョニングされた後、管理者UIで確認できます。

シナリオの例:

アカウントID: 123456789012

プライベートデータ処理環境ID: b2a65fbd-95dc-490a-b69b-a1dc92df224e

ロールARN: arn:aws:iam::123456789012:role/aac-b69b-a1dc92df224e-cluster-role

詳細については、https://docs.aws.amazon.com/directoryservice/latest/admin-guide/edit_trust.htmlを参照してください。

ステップ3: KMSキーポリシーを更新する

プライベートデータ処理が正常に作成されると、credential-service-roleというカスタムロールがアカウントに追加されます。このロールにより、Kubernetes資格情報サービスアカウントが、キー保管庫のプライベートデータアクセス資格情報を取得できるようになります。

これで、プライベートデータ用のAWSアカウントとVPCのセットアップ(ステップ5: 安全に保管するための対称キーを作成する)で作成したKMSキーのポリシーが更新され、カスタム権限を持つカスタムロールcredential-service-roleが許可されるようになりました。

  1. [キー管理サービス]に移動し、プライベートデータ用のAWSアカウントとVPCのセットアップで作成されたキーを選択します。

  2. [キーポリシー]を選択し、[編集]を選択します。

  3. 既定の権限を削除し、以下のように更新します。

    {
      "Version": "2012-10-17",
      "Id": "key-consolepolicy-3",
      "Statement": [
        {
          "Sid": "Enable IAM User Permissions",
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::<account id>:root"
          },
          "Action": "kms:*",
          "Resource": "*"
        },
        {
          "Sid": "Allow use of the key",
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::<account id>:role/credential-service-role"
          },
          "Action": [
            "kms:Encrypt",
            "kms:Decrypt",
            "kms:ReEncrypt*",
            "kms:GenerateDataKey*",
            "kms:DescribeKey"
          ],
          "Resource": "*"
        }
      ]
    }

    注記

    <accountID>は、プライベートデータ処理環境の処理がプロビジョニングされているAWSアカウント番号です。

  4. [変更を保存] を選択します。

ステップ4: EMR Serverless(オプション)

Spark/EMR処理を使用している場合、EMR Serverlessを設定します。

EMRを有効にする

  1. Alteryx Oneにサインインします。

  2. [プロファイル]メニューから[管理者コンソール]を選択します。

  3. 左側のナビゲーションパネルから、[プライベートデータ処理]を選択します。

  4. [Spark処理(EMR)]を選択します。

  5. [更新]を選択します。

S3接続用に作成されたカスタムロールの更新

プライベートデータストレージとしてのAWS S3のカスタムポリシーとカスタムロールに、以下の権限と信頼関係をEMR Serverless用に付加します。

カスタムポリシードキュメントを付加

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "EMRServerlessAccess",
            "Effect": "Allow",
            "Action": [
                "emr-serverless:CreateApplication",
                "emr-serverless:UpdateApplication",
                "emr-serverless:DeleteApplication",
                "emr-serverless:ListApplications",
                "emr-serverless:GetApplication",
                "emr-serverless:StartApplication",
                "emr-serverless:StopApplication",
                "emr-serverless:StartJobRun",
                "emr-serverless:CancelJobRun",
                "emr-serverless:ListJobRuns",
                "emr-serverless:GetJobRun"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowNetworkInterfaceCreationViaEMRServerless",
            "Effect": "Allow",
            "Action": "ec2:CreateNetworkInterface",
            "Resource": [
                "arn:aws:ec2:*:*:network-interface/*",
                "arn:aws:ec2:*:*:security-group/*",
                "arn:aws:ec2:*:*:subnet/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:CalledViaLast": "ops.emr-serverless.amazonaws.com"
                }
            }
        },
        {
            "Sid":"AllowEMRServerlessServiceLinkedRoleCreation",
            "Effect":"Allow",
            "Action":"iam:CreateServiceLinkedRole",
            "Resource":"arn:aws:iam:::role/aws-service-role/ops.emr-serverless.amazonaws.com/AWSServiceRoleForAmazonEMRServerless"
        },
        {
            "Sid": "AllowPassingRuntimeRole",
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam:::role/aac--emr-serverless-spark-execution",
            "Condition": {
                "StringLike": {
                    "iam:PassedToService": "emr-serverless.amazonaws.com"
                }
            }
        },
        {
            "Sid": "S3ResourceBucketAccess",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::aac--emr-logs",
                "arn:aws:s3:::aac--emr-logs/*"
            ]
        }
    ]
}

カスタムロールの信頼関係を付加

{
    "Sid": "",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam:::role/aac--emr-serverless-spark-execution"
    },
    "Action": "sts:AssumeRole"
},
{
    "Sid": "",
    "Effect": "Allow",
    "Principal": {
        "Service": "emr-serverless.amazonaws.com"
    },
    "Action": "sts:AssumeRole"
}

注記

プライベートデータ処理を削除すると、AWSではaac-<xxxx-xxxxxxxxxxxx>-cluster-role ARNの信頼関係がアクセスキーに置き換えられます。UIから信頼関係を削除する必要もあります。

注記

AWSプリンシパルを、プライベートデータ処理のプロビジョニングプロセスで作成されたIAMロールのARNに置き換えます。

<accountid>: プライベートデータ処理環境の処理がプロビジョニングされているAWSアカウント番号。

<xxxx-xxxxxxxxxxxx>: プライベートデータ処理環境IDの最後の2つのセグメント。このIDは、プライベートデータ処理環境が正常にプロビジョニングされた後、管理者UIで確認できます。

シナリオの例:

アカウントID: 123456789012

プライベートデータ処理環境ID: b2a65fbd-95dc-490a-b69b-a1dc92df224e

ロールARN: arn:aws:iam::123456789012:role/aac-b69b-a1dc92df224e-emr-serverless-spark-execution

S3 ARN: arn:aws:s3:::aac-aac-b69b-a1dc92df224e-emr-logs