スキップしてコンテンツを表示

Amazon Redshift Spectrum に、AWS Glue と Amazon S3 へのクロスアカウントアクセスを付与する方法を教えてください。

所要時間3分
0

Amazon Redshift Spectrum を使用して、別の AWS アカウントにある AWS Glue および Amazon Simple Storage Service (Amazon S3) にアクセスできるようにしたいです。

解決策

Amazon Redshift を信頼する IAM ロールを作成する

Amazon Redshift Spectrum を使用してクロスアカウントの AWS リソースにアクセスするには、Amazon Redshift を信頼する AWS Identity and Access Management (IAM) ロールを作成する必要があります。次に、そのロールを Amazon Redshift クラスターにアタッチします。

次の手順を実行します。

  1. IAM コンソールを開きます。
  2. ナビゲーションペインで [ロール] を選択します。
  3. [ロールの作成] を選択します。
  4. [信頼するエンティティの種類を選択][AWS サービス] を選択します。
  5. [Redshift] を選択します。
  6. [ユースケースの選択][Redshift - カスタマイズ可能] を選択します。
  7. [次へ: 許可][次へ: タグ]、それに続いて [次へ: 確認] を選択します。
    注: ポリシーやタグを追加する必要はありません。
  8. [ロール名] を入力してから、**[ロールを作成]**を選択します。次の例では、ロールは redshift_role1 です。
  9. redshift_role1 を Amazon Redshift クラスターに関連付けます。この関連付けを行うと、クラスターは新規作成したロールを引き受け、Amazon S3、Amazon Athena、AWS Glue にアクセスできます。

AWS Glue と Amazon S3 へのアクセス許可を持つ新しい IAM ロールを作成する

別のアカウントで、AWS Glue と Amazon S3 の両方にアクセスできる新しい IAM ロールを作成します。Amazon Redshift は、信頼関係を使用して AWS Glue リソースと S3 リソースにアクセスするためのロールを引き受けます。

次の手順を実行します。

  1. IAM コンソールを開きます。

  2. [ポリシー] を選択し、[ポリシーの作成] を選択します。

  3. [JSON] タブをクリックし、次の例のような IAM ポリシーを入力します。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "VisualEditor0",
          "Effect": "Allow",
          "Action": [
            "glue:BatchCreatePartition",
            "glue:UpdateDatabase",
            "glue:CreateTable",
            "glue:DeleteDatabase",
            "glue:GetTables",
            "glue:GetPartitions",
            "glue:BatchDeletePartition",
            "glue:UpdateTable",
            "glue:BatchGetPartition",
            "glue:DeleteTable",
            "glue:GetDatabases",
            "glue:GetTable",
            "glue:GetDatabase",
            "glue:GetPartition",
            "glue:CreateDatabase",
            "glue:BatchDeleteTable",
            "glue:CreatePartition",
            "glue:DeletePartition",
            "glue:UpdatePartition"
          ],
          "Resource": "*"
        },
        {
          "Sid": "VisualEditor1",
          "Effect": "Allow",
          "Action": [
            "s3:GetObject",
            "s3:ListBucketMultipartUploads",
            "s3:ListBucket",
            "s3:GetBucketLocation",
            "s3:ListMultipartUploadParts"
          ],
          "Resource": [
            "arn:aws:s3:::your_bucket",
            "arn:aws:s3:::your_bucket/*"
          ]
        },
        {
          "Sid": "VisualEditor2",
          "Effect": "Allow",
          "Action": [
            "kms:Decrypt"
          ],
          "Resource": [
            "<KMS_KEY_ARN>"
          ]
        }
      ]
    }

    注: your_bucket は、Amazon Redshift Spectrum でアクセスする S3 バケットの名前に置き換えます。KMS_KEY_ARN は、S3 バケットを暗号化する KMS キーの ARN に置き換えます。S3 バケット内のファイルが暗号化されている場合は、Amazon Redshift に適切なアクセス許可を付与します。

  4. [ポリシーの確認] を選択します。

  5. ポリシーの [名前] を入力し、[ポリシーの作成] を選択します。

  6. ナビゲーションペインで [ロール] を選択し、[ロールを作成] を選択します。

  7. [信頼するエンティティの種類を選択][別の AWS アカウント] を選択します。

  8. Amazon Redshift を使用するアカウントの [アカウント ID] を入力します。詳細については、「AWS アカウント ID でエイリアスを使用する」を参照してください。

  9. [次へ: アクセス許可] を選択します。

  10. ポリシーの一覧で、作成したポリシー名を選択します。

  11. [次へ: タグ]を選択し、[次へ: 確認] を選択します。
    注: タグを追加する必要はありません。

  12. [ロール名] を入力してから、**[ロールを作成]**を選択します。次の例では、ロールは glue_s3_role2 です。

  13. ナビゲーションペインで [ロール] を選択します。

  14. 作成したロールの名前を選択し、[信頼関係] タブをクリックします。

  15. [信頼関係の編集] を選択します。

  16. 既存のポリシーを削除し、次の例のようなポリシーに置き換えます。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::redshift_account1:role/redshift_role1"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

注: redshift_account1 を Amazon Redshift を使用するアカウントの ID に置き換えます。redshift_role1 を作成した最初のロールの名前に置き換えます。

  1. [信頼ポリシーの更新] を選択します。

Amazon Redshift IAM ロールのアクセス許可を更新する

作成した最初の IAM ロールのアクセス許可を更新します。次の手順を実行します。

  1. IAM コンソールを開きます。

  2. ナビゲーションペインから [ロール] を選択し、先ほど作成した最初のロール (redshift_role1) の名前を選択します。

  3. [アクセス許可] で [インラインポリシーの追加] を選択します。

  4. [JSON] タブを選択します。既存のポリシーを削除し、次の例のような IAM ポリシーを入力します。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "Stmt1487639602000",
          "Effect": "Allow",
          "Action": [
            "sts:AssumeRole"
          ],
          "Resource": "arn:aws:iam::glue_s3_account2:role/glue_s3_role2"
        }
      ]
    }

    注: glue_s3_account2 は、AWS Glue と Amazon S3 を使用するアカウントの ID に置き換えます。glue_s3_role2 は、作成した 2 番目のロールの名前に置き換えます。

  5. [ポリシーの確認] を選択します。

  6. ポリシーの名前を入力し、[ポリシーの作成] を選択します。

  7. Amazon Redshift クラスターに接続します

  8. 両方のアカウントで作成したロールを使用する外部スキーマを作成します。次の例を参照してください。

    create external schema spectrum_schema
    from data catalog
    database 'your_db'
    iam_role 'arn:aws:iam::redshift_account1:role/redshift_role1,arn:aws:iam::glue_s3_account2:role/glue_s3_role2'

    注: 次の値を置き換えます。

    your_db: AWS Glue のデータベース名。
    redshift_account1: Amazon Redshift アカウントの ID。
    redshift_role1: Amazon Redshift アカウントで作成したロールの名前。
    glue_s3_account2: AWS Glue と Amazon S3 アカウントの ID。
    glue_s3_role2: AWS Glue と Amazon S3 アカウントで作成したロールの名前。

    外部スキーマの作成 DDL ステートメントで、IAM ロール の ARN を次の順番で記述します: redshift_cluster_roledestination_account_roleロールとロールの間には、スペースを入れないでください。

完了すると、redshift_account1 内の Amazon Redshift クラスターで Amazon Redshift Spectrum を使用し、glue_s3_account2 内の AWS Glue テーブルをクエリできるようになります。すべてのリソースは同じ AWS リージョンにある必要があります。Amazon Redshift Spectrum は既存の AWS Glue テーブルにアクセスできるため、外部テーブルを再作成する必要はありません。

次のクエリでは、外部スキーマで作成した AWS Glue テーブルの行数が返されます。

select count(*) from spectrum_schema.glue_table;

注: spectrum\ _schemaglue\ _table を、スキーマと AWS Glue テーブルの名前に置き換えます。

関連情報

Amazon Redshift がユーザーに代わって AWS サービスにアクセスできるようにする

Amazon Redshift Spectrum 用の IAM ポリシー

AWS公式更新しました 7ヶ月前
コメントはありません

関連するコンテンツ