ゼファーネットのロゴ

Amazon EMR と AWS IAM Identity Center を使用して分析に企業 ID を使用する |アマゾン ウェブ サービス

日付:

従業員ユーザーがきめ細かいデータ アクセス制御と監査データ アクセスを使用して分析できるようにするには、複数のデータ アクセスを作成する必要がある場合があります。 AWS IDおよびアクセス管理 異なるデータ権限を持つ (IAM) ロールを作成し、従業員ユーザーをそれらのロールの 1 つにマップします。多くの場合、複数のユーザーが同じロールにマップされ、企業ユーザーまたはグループ レベルでデータ アクセス制御を有効にし、データ アクセスを監査するために同様の権限が必要になります。

AWS IAM アイデンティティ センター ローカル ID ストアを使用するか、アイデンティティ プロバイダー (IdP) を介して企業ディレクトリに接続することにより、従業員ユーザーの AWS アカウントおよびアプリケーションへのアクセスを一元管理できます。 IAM Identity Center がサポートするようになりました 信頼できるアイデンティティの伝播を使用してデータにアクセスする必要があるユーザー向けに、合理化されたエクスペリエンスを提供します。 AWS分析サービス.

アマゾンEMRスタジオ は、データ サイエンティストやデータ エンジニアがデータ エンジニアリングおよびデータ サイエンス アプリケーションを簡単に構築できるようにする統合開発環境 (IDE) です。信頼できる ID の伝播により、ユーザーの企業 ID に基づいてデータ アクセス管理を行うことができ、ユーザーがシングル サインオンでデータにアクセスして分析アプリケーションを構築するときにシームレスに伝播できます。 アマゾンEMR (EC2 上の EMR スタジオと Amazon EMR)。

AWSレイクフォーメーション データ管理者は、分析や機械学習 (ML) 用のデータを一元的に管理、保護、共有できます。信頼できる ID 伝播により、データ管理者は ID 属性を使用して企業ユーザーにきめ細かいアクセスを直接提供し、AWS サービス全体でのエンドツーエンドのデータ アクセスの追跡可能性を簡素化できます。アクセスはユーザーの企業 ID に基づいて管理されるため、データにアクセスするためにデータベースのローカル ユーザー資格情報を使用したり、IAM ロールを引き受けたりする必要はありません。

この投稿では、分析ユースケースのために Workforce Identity を EMR Studio に導入し、Lake Formation を使用して企業ユーザーとグループの詳細な権限を直接管理し、データ アクセスを監査する方法を示します。

ソリューションの概要

この使用例では、analyst1 という名前のデータ アナリスト ユーザーが、自分のエンタープライズ資格情報を使用して、アクセス許可を付与されているデータをクエリし、データ アクセスを監査できるようにしたいと考えています。このデモでは IdP として Okta を使用します。次の図は、ソリューション アーキテクチャを示しています。

このアーキテクチャは次のコンポーネントに基づいています。

  • Okta は、企業ユーザー ID、関連グループ、およびユーザー認証を維持する責任を負います。
  • IAM Identity Center は、Okta ユーザーを接続し、AWS アカウントとアプリケーション全体でのアクセスを一元管理します。
  • Lake Formation は、信頼できる ID 伝播を使用して、データに対するきめ細かいアクセス制御を企業ユーザーに直接提供します。
  • EMR Studio は、ユーザーがアプリケーションを構築および実行するための IDE です。これにより、ユーザーは、 AWSマネジメントコンソール.
  • AWSサービスカタログ は、EMR クラスターを作成するための製品テンプレートを提供します。
  • EMR クラスターは、セキュリティ構成を使用して IAM Identity Center と統合されます。
  • AWS クラウドトレイル ユーザーのデータアクセスアクティビティをキャプチャします。

ソリューションを実装するための高レベルの手順は次のとおりです。

  1. Okta を IAM Identity Center と統合します。
  2. Amazon EMR スタジオをセットアップします。
  3. EMR クラスター用の IAM Identity Center 対応セキュリティ構成を作成します。
  4. Service Catalog 製品テンプレートを作成して、EMR クラスターを作成します。
  5. Lake Formation を使用して、データにアクセスする権限をユーザーに付与します。
  6. 企業 ID を使用してデータにアクセスして、ソリューションをテストします。
  7. ユーザーのデータアクセスを監査します。

前提条件

次の前提条件が必要です。

Okta を IAM ID センターと統合する

IAM Identity Center を使用した Okta の構成の詳細については、次を参照してください。 Okta と IAM Identity Center を使用して SAML と SCIM を構成する.

このセットアップでは、2 人のユーザーを作成しました。 analyst1 および engineer1、それらを対応する Okta アプリケーションに割り当てます。に移動して、統合が機能していることを検証できます。 ユーザー 次のスクリーンショットに示すように、IAM Identity Center コンソールのページ。 Okta のエンタープライズ ユーザーはどちらも IAM Identity Center でプロビジョニングされます。

以下の正確なユーザーはアカウントにリストされません。同様のユーザーを作成することも、既存のユーザーを使用することもできます。

IAM Identity Center でプロビジョニングされた各ユーザーには、一意のユーザー ID があります。この ID は Okta からのものではありません。このユーザーを一意に識別するために IAM Identity Center で作成されます. 信頼された ID の伝播では、このユーザー ID はサービス全体に伝播され、CloudTrail でのトレーサビリティの目的にも使用されます。次のスクリーンショットは、プロビジョニングされた Okta ユーザーと一致する IAM Identity Center ユーザーを示しています。 analyst1.

以下のリンクを選択してください AWS アクセスポータル URL でログインします analyst1 このアプリケーションにすでに割り当てられている Okta ユーザー資格情報。

ログインしてランディング ページを表示できる場合は、この手順までのすべての構成が正しく設定されています。このページにはまだアプリケーションが表示されません。

EMRスタジオをセットアップする

このステップでは、信頼できる ID 伝播と IAM Identity Center 統合を有効にした EMR Studio を設定するためにデータ レイク管理者が必要なアクションを示します。これにより、ユーザーはエンタープライズ認証情報を使用して EMR Studio に直接アクセスできるようになります。

Note: すべての Amazon S3 バケット (5 年 2023 月 3 日以降に作成) にはデフォルトで暗号化が設定されており (Amazon S3 管理キー (SSE-S3))、SXNUMX バケットにアップロードされるすべての新しいオブジェクトは保存時に自動的に暗号化されます。セキュリティのニーズを満たすために別のタイプの暗号化を使用するには、バケットのデフォルトの暗号化構成を更新してください。見る サーバー側の暗号化によるデータの保護 詳細については、。

  • Amazon EMRコンソールで、 ·スタジオ 下のナビゲーションペインで EMR スタジオ.
  • 選択する スタジオを作成.

  • セットアップオプション選択する カスタム.
  • スタジオ名、名前を入力してください (この投稿の場合、 emr-studio-with-tip).
  • ワークスペースストレージの S3 の場所選択 既存の場所を選択してください 既存の S3 バケットを入力します (ある場合)。それ以外の場合は、選択してください 新しいバケットを作成する.

  • Studio が AWS リソースにアクセスできるようにするサービス ロール、選択する 権限の詳細を表示する 必要な信頼および IAM ポリシー情報を取得し、IAM でそれらの特定のポリシーを持つロールを作成します。この場合、次の名前の新しいロールを作成します。 emr_tip_role.

  • Studio が AWS リソースにアクセスできるようにするサービス ロール、作成した IAM ロールを選択します。
  • ワークスペース名、名前を入力してください (この投稿の場合、 studio-workspace-with-tip).

  • 認証選択 IAM アイデンティティ センター.
  • ユーザー役割¸ 新しいロールを作成するか、既存のロールを選択できます。この投稿では、作成したロール (emr_tip_role).
  • 同じロールを使用するには、サービス ロールの信頼ポリシーに次のステートメントを追加します。
{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "elasticmapreduce.amazonaws.com",
 "AWS": "arn:aws:iam::xxxxxx:role/emr_tip_role"
      },
      "Action": [
              "sts:AssumeRole",
              "sts:SetContext"
              ]
    }
  ]
}

  • 選択 信頼できる ID の伝播を有効にする 接続されたアプリケーション全体でユーザー アクセスを制御し、ログに記録できるようにします。

  • アプリケーションにアクセスできる人を選択する選択 すべてのユーザーとグループ.

その後、Lake Formation を使用してリソースへのアクセスを制限します。ただし、ここには、割り当てられたユーザーとグループのみにアクセスを制限するオプションがあります。

  • ネットワークとセキュリティ セクションでは、VPC、サブネット、セキュリティ グループ設定のオプションの詳細を指定できます。
  • 選択する スタジオを作成.

  • ソフトウェア設定ページで、下図のように ·スタジオ Amazon EMR コンソールのページで、IAM Identity Center が有効になっている Studio を見つけます。
  • のリンクをコピーします スタジオアクセスURL.

  • Web ブラウザに URL を入力し、Okta 認証情報を使用してログインします。

EMR Studio コンソールに正常にサインインできるはずです。

EMR クラスター用の AWS Identity Center 対応セキュリティ構成を作成する

EMR セキュリティ設定を使用すると、クラスター上の EMR ファイル システム (EMRFS) に対するデータ暗号化、Kerberos 認証、および Amazon S3 認証を設定できます。セキュリティ構成は、クラスターの作成時に使用および再利用できます。

Amazon EMR を IAM Identity Center と統合するには、まず EMR クラスターから IAM Identity Center で認証する IAM ロールを作成する必要があります。 Amazon EMR は、IAM 認証情報を使用して、IAM Identity Center ID を Lake Formation などのダウンストリーム サービスに中継します。 IAM ロールには、ダウンストリーム サービスを呼び出すためのそれぞれの権限も必要です。

  1. ロールを作成します (この投稿では、 emr-idc-application) 以下の信頼および許可ポリシーを使用します。信頼ポリシーで参照されるロールは、 InstanceProfile EMR クラスターの役割。これにより、 EC2インスタンスプロファイル この役割を引き受け、フェデレーション ユーザーに代わって ID ブローカーとして機能します。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AssumeRole",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::xxxxxxxxxxn:role/service-role/AmazonEMR-InstanceProfile-20240127T102444"
            },
            "Action": [
                "sts:AssumeRole",
                "sts:SetContext"
            ]
        }
    ]
}

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "IdCPermissions",
            "Effect": "Allow",
            "Action": [
                "sso-oauth:*"
            ],
            "Resource": "*"
        },
        {
            "Sid": "GlueandLakePermissions",
            "Effect": "Allow",
            "Action": [
                "glue:*",
                "lakeformation:GetDataAccess"
            ],
            "Resource": "*"
        },
        {
            "Sid": "S3Permissions",
            "Effect": "Allow",
            "Action": [
                "s3:GetDataAccess",
                "s3:GetAccessGrantsInstanceForPrefix"
            ],
            "Resource": "*"
        }
    ]
}

次に、Amazon EMR で転送中のデータを暗号化するための証明書を作成します。

  • この投稿では、 OpenSSLの 509 ビット RSA 秘密キーを使用して自己署名 X.2048 証明書を生成します。

このキーにより、使用されている AWS リージョン内の発行者の EMR クラスター インスタンスへのアクセスが許可されます。証明書の作成と提供に関する完全なガイドについては、次を参照してください。 Amazon EMR 暗号化を使用して転送中のデータを暗号化するための証明書の提供.

  • アップロード my-certs.zip セキュリティ構成の作成に使用される S3 の場所にコピーします。

EMR サービス ロールは、S3 の場所にアクセスできる必要があります。このキーにより、発行者の EMR クラスター インスタンスへのアクセスが許可されます。 us-west-2 によって指定された地域 *.us-west-2.compute.internal ドメイン名を一般名として使用します。これをクラスターが存在するリージョンに変更できます。

$ openssl req -x509 -newkey rsa:2048 -keyout privateKey.pem -out certificateChain.pem -days 365 -nodes -subj '/CN=*.us-west-2.compute.internal'
$ cp certificateChain.pem trustedCertificates.pem
$ zip -r -X my-certs.zip certificateChain.pem privateKey.pem trustedCertificates.pem

aws emr create-security-configuration --name "IdentityCenterConfiguration-with-lf-tip" --region "us-west-2" --endpoint-url https://elasticmapreduce.us-west-2.amazonaws.com --security-configuration '{
    "AuthenticationConfiguration":{
        "IdentityCenterConfiguration":{
            "EnableIdentityCenter":true,
            "IdentityCenterApplicationAssigmentRequired":false,
            "IdentityCenterInstanceARN": "arn:aws:sso:::instance/ssoins-7907b0d7d77e3e0d",
            "IAMRoleForEMRIdentityCenterApplicationARN": "arn:aws:iam::1xxxxxxxxx0:role/emr-idc-application"
        }
    },
    "AuthorizationConfiguration": {
        "LakeFormationConfiguration": {
            "EnableLakeFormation": true
        }
    },
    "EncryptionConfiguration": {
        "EnableInTransitEncryption": true,
        "EnableAtRestEncryption": false,
        "InTransitEncryptionConfiguration": {
            "TLSCertificateConfiguration": {
                "CertificateProviderType": "PEM",
                "S3Object": "s3://<<Bucket Name>>/emr-transit-encry-certs/my-certs.zip"
            }
        }
    }
}' 

セキュリティ設定は Amazon EMR コンソールで確認できます。

EMR クラスターを作成するための Service Catalog 製品テンプレートを作成する

信頼できる ID の伝播が有効になっている EMR Studio は、テンプレートから作成されたクラスターでのみ機能します。サービス カタログで製品テンプレートを作成するには、次の手順を実行します。

  • Service Catalog コンソールで、次を選択します。 ポートフォリオ管理部門 ナビゲーションペインに表示されます。
  • 選択する ポートフォリオを作成する.

  • ポートフォリオの名前を入力します (この投稿では、 EMR Clusters Template) とオプションの説明。
  • 選択する 創造する.

  • ソフトウェア設定ページで、下図のように ポートフォリオ ページで、作成したばかりのポートフォリオを選択して詳細を表示します。

  • ソフトウェア設定ページで、下図のように 製品 タブを選択 製品を作成する.

  • 製品タイプ選択 クラウドフォーメーション.
  • 商品名、名前を入力してください (この投稿の場合、 EMR-7.0.0).
  • セキュリティ構成を使用する IdentityCenterConfiguration-with-lf-tip 前の手順で適切なコードを使用して作成した Amazon EMR サービスのロール.
  • 選択する 製品を作成する.

以下は CloudFormation テンプレートの例です。アカウント固有の値を更新します SecurityConfiguration, JobFlowRole, ServiceRole, LogUri, Ec2KeyName, Ec2SubnetId。この投稿の最後にある付録 A には、Amazon EMR サービスロールと信頼ポリシーのサンプルが記載されています。

'Parameters':
  'ClusterName':
    'Type': 'String'
    'Default': 'EMR_TIP_Cluster'
  'EmrRelease':
    'Type': 'String'
    'Default': 'emr-7.0.0'
    'AllowedValues':
    - 'emr-7.0.0'
  'ClusterInstanceType':
    'Type': 'String'
    'Default': 'm5.xlarge'
    'AllowedValues':
    - 'm5.xlarge'
    - 'm5.2xlarge'
'Resources':
  'EmrCluster':
    'Type': 'AWS::EMR::Cluster'
    'Properties':
      'Applications':
      - 'Name': 'Spark'
      - 'Name': 'Livy'
      - 'Name': 'Hadoop'
      - 'Name': 'JupyterEnterpriseGateway'       
      'SecurityConfiguration': 'IdentityCenterConfiguration-with-lf-tip'
      'EbsRootVolumeSize': '20'
      'Name':
        'Ref': 'ClusterName'
      'JobFlowRole': <Instance Profile Role>
      'ServiceRole': <EMR Service Role>
      'ReleaseLabel':
        'Ref': 'EmrRelease'
      'VisibleToAllUsers': !!bool 'true'
      'LogUri':
        'Fn::Sub': <S3 LOG Path>
      'Instances':
        "Ec2KeyName" : <Key Pair Name>
        'TerminationProtected': !!bool 'false'
        'Ec2SubnetId': <subnet-id>
        'MasterInstanceGroup':
          'InstanceCount': !!int '1'
          'InstanceType':
            'Ref': 'ClusterInstanceType'
        'CoreInstanceGroup':
          'InstanceCount': !!int '2'
          'InstanceType':
            'Ref': 'ClusterInstanceType'
          'Market': 'ON_DEMAND'
          'Name': 'Core'
'Outputs':
  'ClusterId':
    'Value':
      'Ref': 'EmrCluster'
    'Description': 'The ID of the  EMR cluster'
'Metadata':
  'AWS::CloudFormation::Designer': {}
'Rules': {}

信頼できる ID の伝播は、Amazon EMR 6.15 以降でサポートされています。 Amazon EMR 6.15 の場合、次のブートストラップ アクションを CloudFormation スクリプトに追加します。

'BootstrapActions':
- 'Name': 'spark-config'
'ScriptBootstrapAction':
'Path': 's3://emr-data-access-control-<aws-region>/customer-bootstrap-actions/idc-fix/replace-puppet.sh'

これで、ポートフォリオに EMR クラスター作成製品が追加されるはずです。

  • EMR Studio ロールの付与 emr_tip_role ポートフォリオへのアクセス。

データにアクセスするための Lake Formation 権限をユーザーに付与する

このステップでは、Lake Formation と IAM Identity Center の統合を有効にし、Identity Center ユーザーに権限を付与します。 analyst1。 Lake Formation がまだ有効になっていない場合は、次を参照してください。 Lake Formation を始める.

Amazon EMR で Lake Formation を使用するには、S3 ロケーションを登録するカスタムロールを作成します。デフォルトのロールを使用せず、Amazon S3 アクセス権を持つ新しいカスタム ロールを作成する必要があります。 AWSServiceRoleForLakeFormationDataAccess。さらに、Lake Formation で外部データ フィルタリングを有効にします。詳細については、を参照してください。 Amazon EMR で Lake Formation を有効にする.

Lake Formation でアクセス許可を管理するには、次の手順を実行します。

  • Lake Formation コンソールで、 IAM ID センターの統合管理部門 ナビゲーションペインに表示されます。

Lake Formation は、正しい IAM Identity Center インスタンスを自動的に指定します。

  • 選択する 創造する.

IAM Identity Center 統合の詳細を表示できるようになりました。

この投稿には、 Marketing データベースと customer 企業ユーザーにアクセスを許可するテーブル analyst1。アカウント内の既存のデータベースとテーブルを使用することも、新しいデータベースとテーブルを作成することもできます。その他の例については、以下を参照してください。 チュートリアル.

次のスクリーンショットは、 customer 列で番号の横にあるXをクリックします。

付与するには次の手順を完了してください analyst1 権限。詳細については、以下を参照してください。 名前付きリソースメソッドを使用したテーブル権限の付与.

  • ソフトウェア設定ページで、下図のように 湖の形成 コンソール、選択 データレイクの許可権限 ナビゲーションペインに表示されます。
  • 選択する グラント.

  • 選択 名前付きデータカタログリソース.
  • データベース、データベースを選択してください (marketing).
  • テーブル類、テーブルを選択してください (customer).

  • テーブルのアクセス許可選択 選択 および 説明する.
  • データ権限選択 すべてのデータアクセス.
  • 選択する グラント.

次のスクリーンショットは、ユーザーanalyst1 が持つ権限の概要を示しています。彼らはテーブルに対する選択アクセス権とデータベースに対する説明アクセス権を持っています。

ソリューションをテストする

ソリューションをテストするには、エンタープライズ ユーザーとして EMR Studio にログインします。 analyst1、新しいワークスペースを作成し、テンプレートを使用して EMR クラスターを作成し、そのクラスターを使用して分析を実行します。 Studio のセットアップ中に作成されたワークスペースを使用することもできます。このデモでは、新しいワークスペースを作成します。

ワークスペースの作成と一覧表示、テンプレートの使用、EMR クラスターの作成を行うには、EMR Studio ロールに追加の権限が必要です。詳細については、を参照してください。 Amazon EC2 または Amazon EKS の EMR Studio ユーザー権限を構成する。この投稿の最後にある付録 B には、サンプル ポリシーが含まれています。

クラスターが利用可能になったら、クラスターをワークスペースに接続し、クエリを実行します。 customer ユーザーがアクセスできるテーブル。

ユーザー analyst1 は、コーポレートアイデンティティを使用してビジネスユースケースのクエリを実行できるようになりました。 PySpark ノートブックを開くには、以下を選択します パイスパーク ノート.

ノートブックが開いたら、Spark SQL クエリを実行してデータベースを一覧表示します。

%%sql 
show databases

この場合、クエリを実行します。 customer のテーブル marketing データベース。データにアクセスできるはずです。

%%sql
select * from marketing.customer

データアクセスを監査する

Lake Formation API アクションは CloudTrail によって記録されます。の GetDataAccess アクションは、プリンシパルまたは統合された AWS サービスが、Lake Formation に登録されているデータ レイクの場所にあるデータにアクセスするために一時的な認証情報をリクエストするたびに記録されます。信頼された ID の伝播により、CloudTrail は、データへのアクセスを要求したコーポレート ID の IAM Identity Center ユーザー ID も記録します。

次のスクリーンショットは、 analyst1 ユーザー。

選択する イベントを見る イベントログを表示します。

以下は、 GetDataAccess イベントログ。ユーザー アナリスト 1、アイデンティティ センター ユーザー ID を追跡できます。 c8c11390-00a1-706e-0c7a-bbcc5a1c9a7fにアクセスしました。 customer 列で番号の横にあるXをクリックします。

{
    "eventVersion": "1.09",
    
….
        "onBehalfOf": {
            "userId": "c8c11390-00a1-706e-0c7a-bbcc5a1c9a7f",
            "identityStoreArn": "arn:aws:identitystore::xxxxxxxxx:identitystore/d-XXXXXXXX"
        }
    },
    "eventTime": "2024-01-28T17:56:25Z",
    "eventSource": "lakeformation.amazonaws.com",
    "eventName": "GetDataAccess",
    "awsRegion": "us-west-2",
….
        "requestParameters": {
        "tableArn": "arn:aws:glue:us-west-2:xxxxxxxxxx:table/marketing/customer",
        "supportedPermissionTypes": [
            "TABLE_PERMISSION"
        ]
    },
    …..
    }
}

これは、Amazon EMR の分析フローへの信頼できる ID 伝播を有効にするために従う手順を示すエンドツーエンドのデモビデオです。

クリーンアップ

このソリューションの使用が完了したら、次のリソースをクリーンアップします。

まとめ

この投稿では、分析用に IAM Identity Center、EMR Studio、Lake Formation を使用して、信頼できる ID 伝播を設定および使用する方法を説明しました。信頼できる ID の伝播により、ユーザーが AWS 分析サービス全体でシングル サインオンを使用してデータにアクセスし、分析アプリケーションを構築するときに、ユーザーの企業 ID がシームレスに伝播されます。データ管理者は、企業ユーザーやグループに直接、きめ細かいデータ アクセスを提供し、使用状況を監査できます。詳細については、を参照してください。 Amazon EMR と AWS IAM ID センターを統合する.


著者について

プラディープ・ミスラ AWS のプリンシパル分析ソリューション アーキテクトです。彼は Amazon 全体で最新の分散分析と AI/ML プラットフォーム ソリューションの設計と設計に取り組んでいます。彼は、データ、分析、AI/ML を使用して顧客の課題を解決することに情熱を注いでいます。仕事以外では、プラディープは新しい場所を探索したり、新しい料理を試したり、家族と一緒にボードゲームをしたりすることが好きです。彼は娘たちと一緒に科学実験をすることも好きです。

ディープマラ・アガルワル AWS データ スペシャリスト ソリューション アーキテクトとして働いています。 彼女は、お客様が AWS でスケーラブルで分散型のデータ駆動型ソリューションを構築できるよう支援することに情熱を注いでいます。 仕事をしていないとき、Deepmala は家族と過ごすこと、散歩すること、音楽を聴くこと、映画を見ること、料理をすることが好きです。

アビラッシュナギラ アマゾン ウェブ サービス (AWS) のシニア スペシャリスト ソリューション アーキテクトで、AWS 分析サービスを中心に公共部門の顧客のクラウド移行を支援しています。仕事以外では、アビラッシュは新しいテクノロジーを学んだり、映画を見たり、新しい場所を訪れたりすることを楽しんでいます。


付録A

Amazon EMR サービスロールと信頼ポリシーのサンプル:

Note: これはサンプル サービス ロールです。きめ細かいアクセス制御は、Lake Formation を使用して行われます。企業のガイダンスに従って、セキュリティ チームに準拠するように権限を変更します。

信頼ポリシー:

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": "elasticmapreduce.amazonaws.com",
   "AWS": "arn:aws:iam::xxxxxx:role/emr_tip_role"

            },
            "Action": [
                "sts:AssumeRole",
                "sts:SetContext"
            ]
        }
    ]
}

許可ポリシー:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ResourcesToLaunchEC2",
            "Effect": "Allow",
            "Action": [
                "ec2:RunInstances",
                "ec2:CreateFleet",
                "ec2:CreateLaunchTemplate",
                "ec2:CreateLaunchTemplateVersion"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:network-interface/*",
                "arn:aws:ec2:*::image/ami-*",
                "arn:aws:ec2:*:*:key-pair/*",
                "arn:aws:ec2:*:*:capacity-reservation/*",
                "arn:aws:ec2:*:*:placement-group/pg-*",
                "arn:aws:ec2:*:*:fleet/*",
                "arn:aws:ec2:*:*:dedicated-host/*",
                "arn:aws:resource-groups:*:*:group/*"
            ]
        },
        {
            "Sid": "TagOnCreateTaggedEMRResources",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateTags"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:network-interface/*",
                "arn:aws:ec2:*:*:instance/*",
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:launch-template/*"
            ],
            "Condition": {
                "StringEquals": {
                    "ec2:CreateAction": [
                        "RunInstances",
                        "CreateFleet",
                        "CreateLaunchTemplate",
                        "CreateNetworkInterface"
                    ]
                }
            }
        },
        {
            "Sid": "ListActionsForEC2Resources",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeAccountAttributes",
                "ec2:DescribeCapacityReservations",
                "ec2:DescribeDhcpOptions",
                "ec2:DescribeImages",
                "ec2:DescribeInstances",
                "ec2:DescribeLaunchTemplates",
                "ec2:DescribeNetworkAcls",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribePlacementGroups",
                "ec2:DescribeRouteTables",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSubnets",
                "ec2:DescribeVolumes",
                "ec2:DescribeVolumeStatus",
                "ec2:DescribeVpcAttribute",
                "ec2:DescribeVpcEndpoints",
                "ec2:DescribeVpcs"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AutoScaling",
            "Effect": "Allow",
            "Action": [
                "application-autoscaling:DeleteScalingPolicy",
                "application-autoscaling:DeregisterScalableTarget",
                "application-autoscaling:DescribeScalableTargets",
                "application-autoscaling:DescribeScalingPolicies",
                "application-autoscaling:PutScalingPolicy",
                "application-autoscaling:RegisterScalableTarget"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AutoScalingCloudWatch",
            "Effect": "Allow",
            "Action": [
                "cloudwatch:PutMetricAlarm",
                "cloudwatch:DeleteAlarms",
                "cloudwatch:DescribeAlarms"
            ],
            "Resource": "arn:aws:cloudwatch:*:*:alarm:*_EMR_Auto_Scaling"
        },
        {
            "Sid": "PassRoleForAutoScaling",
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::*:role/EMR_AutoScaling_DefaultRole",
            "Condition": {
                "StringLike": {
                    "iam:PassedToService": "application-autoscaling.amazonaws.com*"
                }
            }
        },
        {
            "Sid": "PassRoleForEC2",
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::xxxxxxxxxxx:role/service-role/<Instance-Profile-Role>",
            "Condition": {
                "StringLike": {
                    "iam:PassedToService": "ec2.amazonaws.com*"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:*",
                "s3-object-lambda:*"
            ],
            "Resource": [
                "arn:aws:s3:::<bucket>/*",
                "arn:aws:s3:::*logs*/*"
            ]
        },
        {
            "Effect": "Allow",
            "Resource": "*",
            "Action": [
                "ec2:AuthorizeSecurityGroupEgress",
                "ec2:AuthorizeSecurityGroupIngress",
                "ec2:CancelSpotInstanceRequests",
                "ec2:CreateFleet",
                "ec2:CreateLaunchTemplate",
                "ec2:CreateNetworkInterface",
                "ec2:CreateSecurityGroup",
                "ec2:CreateTags",
                "ec2:DeleteLaunchTemplate",
                "ec2:DeleteNetworkInterface",
                "ec2:DeleteSecurityGroup",
                "ec2:DeleteTags",
                "ec2:DescribeAvailabilityZones",
                "ec2:DescribeAccountAttributes",
                "ec2:DescribeDhcpOptions",
                "ec2:DescribeImages",
                "ec2:DescribeInstanceStatus",
                "ec2:DescribeInstances",
                "ec2:DescribeKeyPairs",
                "ec2:DescribeLaunchTemplates",
                "ec2:DescribeNetworkAcls",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribePrefixLists",
                "ec2:DescribeRouteTables",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSpotInstanceRequests",
                "ec2:DescribeSpotPriceHistory",
                "ec2:DescribeSubnets",
                "ec2:DescribeTags",
                "ec2:DescribeVpcAttribute",
                "ec2:DescribeVpcEndpoints",
                "ec2:DescribeVpcEndpointServices",
                "ec2:DescribeVpcs",
                "ec2:DetachNetworkInterface",
                "ec2:ModifyImageAttribute",
                "ec2:ModifyInstanceAttribute",
                "ec2:RequestSpotInstances",
                "ec2:RevokeSecurityGroupEgress",
                "ec2:RunInstances",
                "ec2:TerminateInstances",
                "ec2:DeleteVolume",
                "ec2:DescribeVolumeStatus",
                "ec2:DescribeVolumes",
                "ec2:DetachVolume",
                "iam:GetRole",
                "iam:GetRolePolicy",
                "iam:ListInstanceProfiles",
                "iam:ListRolePolicies",
                "cloudwatch:PutMetricAlarm",
                "cloudwatch:DescribeAlarms",
                "cloudwatch:DeleteAlarms",
                "application-autoscaling:RegisterScalableTarget",
                "application-autoscaling:DeregisterScalableTarget",
                "application-autoscaling:PutScalingPolicy",
                "application-autoscaling:DeleteScalingPolicy",
                "application-autoscaling:Describe*"
            ]
        }
    ]
}

付録B

EMR Studio ロール ポリシーのサンプル:

Note: これはサンプル サービス ロールです。きめ細かいアクセス制御は、Lake Formation を使用して行われます。企業のガイダンスに従って、セキュリティ チームに準拠するように権限を変更します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowEMRReadOnlyActions",
            "Effect": "Allow",
            "Action": [
                "elasticmapreduce:ListInstances",
                "elasticmapreduce:DescribeCluster",
                "elasticmapreduce:ListSteps"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowEC2ENIActionsWithEMRTags",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateNetworkInterfacePermission",
                "ec2:DeleteNetworkInterface"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:network-interface/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/for-use-with-amazon-emr-managed-policies": "true"
                }
            }
        },
        {
            "Sid": "AllowEC2ENIAttributeAction",
            "Effect": "Allow",
            "Action": [
                "ec2:ModifyNetworkInterfaceAttribute"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:instance/*",
                "arn:aws:ec2:*:*:network-interface/*",
                "arn:aws:ec2:*:*:security-group/*"
            ]
        },
        {
            "Sid": "AllowEC2SecurityGroupActionsWithEMRTags",
            "Effect": "Allow",
            "Action": [
                "ec2:AuthorizeSecurityGroupEgress",
                "ec2:AuthorizeSecurityGroupIngress",
                "ec2:RevokeSecurityGroupEgress",
                "ec2:RevokeSecurityGroupIngress",
                "ec2:DeleteNetworkInterfacePermission"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/for-use-with-amazon-emr-managed-policies": "true"
                }
            }
        },
        {
            "Sid": "AllowDefaultEC2SecurityGroupsCreationWithEMRTags",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateSecurityGroup"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:security-group/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/for-use-with-amazon-emr-managed-policies": "true"
                }
            }
        },
        {
            "Sid": "AllowDefaultEC2SecurityGroupsCreationInVPCWithEMRTags",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateSecurityGroup"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:vpc/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/for-use-with-amazon-emr-managed-policies": "true"
                }
            }
        },
        {
            "Sid": "AllowAddingEMRTagsDuringDefaultSecurityGroupCreation",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateTags"
            ],
            "Resource": "arn:aws:ec2:*:*:security-group/*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/for-use-with-amazon-emr-managed-policies": "true",
                    "ec2:CreateAction": "CreateSecurityGroup"
                }
            }
        },
        {
            "Sid": "AllowEC2ENICreationWithEMRTags",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateNetworkInterface"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:network-interface/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/for-use-with-amazon-emr-managed-policies": "true"
                }
            }
        },
        {
            "Sid": "AllowEC2ENICreationInSubnetAndSecurityGroupWithEMRTags",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateNetworkInterface"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:subnet/*",
                "arn:aws:ec2:*:*:security-group/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/for-use-with-amazon-emr-managed-policies": "true"
                }
            }
        },
        {
            "Sid": "AllowAddingTagsDuringEC2ENICreation",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateTags"
            ],
            "Resource": "arn:aws:ec2:*:*:network-interface/*",
            "Condition": {
                "StringEquals": {
                    "ec2:CreateAction": "CreateNetworkInterface"
                }
            }
        },
        {
            "Sid": "AllowEC2ReadOnlyActions",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribeTags",
                "ec2:DescribeInstances",
                "ec2:DescribeSubnets",
                "ec2:DescribeVpcs"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowSecretsManagerReadOnlyActionsWithEMRTags",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Resource": "arn:aws:secretsmanager:*:*:secret:*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/for-use-with-amazon-emr-managed-policies": "true"
                }
            }
        },
        {
            "Sid": "AllowWorkspaceCollaboration",
            "Effect": "Allow",
            "Action": [
                "iam:GetUser",
                "iam:GetRole",
                "iam:ListUsers",
                "iam:ListRoles",
                "sso:GetManagedApplicationInstance",
                "sso-directory:SearchUsers"
            ],
            "Resource": "*"
        },
        {
            "Sid": "S3Access",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:GetEncryptionConfiguration",
                "s3:ListBucket",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::<bucket>",
                "arn:aws:s3:::<bucket>/*"
            ]
        },
        {
            "Sid": "EMRStudioWorkspaceAccess",
            "Effect": "Allow",
            "Action": [
                "elasticmapreduce:CreateEditor",
                "elasticmapreduce:DescribeEditor",
                "elasticmapreduce:ListEditors",
                "elasticmapreduce:DeleteEditor",
                "elasticmapreduce:UpdateEditor",
                "elasticmapreduce:PutWorkspaceAccess",
                "elasticmapreduce:DeleteWorkspaceAccess",
                "elasticmapreduce:ListWorkspaceAccessIdentities",
                "elasticmapreduce:StartEditor",
                "elasticmapreduce:StopEditor",
                "elasticmapreduce:OpenEditorInConsole",
                "elasticmapreduce:AttachEditor",
                "elasticmapreduce:DetachEditor",
                "elasticmapreduce:ListInstanceGroups",
                "elasticmapreduce:ListBootstrapActions",
                "servicecatalog:SearchProducts",
                "servicecatalog:DescribeProduct",
                "servicecatalog:DescribeProductView",
                "servicecatalog:DescribeProvisioningParameters",
                "servicecatalog:ProvisionProduct",
                "servicecatalog:UpdateProvisionedProduct",
                "servicecatalog:ListProvisioningArtifacts",
                "servicecatalog:DescribeRecord",
                "servicecatalog:ListLaunchPaths",
                "elasticmapreduce:RunJobFlow",      
                "elasticmapreduce:ListClusters",
                "elasticmapreduce:DescribeCluster",
                "codewhisperer:GenerateRecommendations",
                "athena:StartQueryExecution",
                "athena:StopQueryExecution",
                "athena:GetQueryExecution",
                "athena:GetQueryRuntimeStatistics",
                "athena:GetQueryResults",
                "athena:ListQueryExecutions",
                "athena:BatchGetQueryExecution",
                "athena:GetNamedQuery",
                "athena:ListNamedQueries",
                "athena:BatchGetNamedQuery",
                "athena:UpdateNamedQuery",
                "athena:DeleteNamedQuery",
                "athena:ListDataCatalogs",
                "athena:GetDataCatalog",
                "athena:ListDatabases",
                "athena:GetDatabase",
                "athena:ListTableMetadata",
                "athena:GetTableMetadata",
                "athena:ListWorkGroups",
                "athena:GetWorkGroup",
                "athena:CreateNamedQuery",
                "athena:GetPreparedStatement",
                "glue:CreateDatabase",
                "glue:DeleteDatabase",
                "glue:GetDatabase",
                "glue:GetDatabases",
                "glue:UpdateDatabase",
                "glue:CreateTable",
                "glue:DeleteTable",
                "glue:BatchDeleteTable",
                "glue:UpdateTable",
                "glue:GetTable",
                "glue:GetTables",
                "glue:BatchCreatePartition",
                "glue:CreatePartition",
                "glue:DeletePartition",
                "glue:BatchDeletePartition",
                "glue:UpdatePartition",
                "glue:GetPartition",
                "glue:GetPartitions",
                "glue:BatchGetPartition",
                "kms:ListAliases",
                "kms:ListKeys",
                "kms:DescribeKey",
                "lakeformation:GetDataAccess",
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads",
                "s3:ListMultipartUploadParts",
                "s3:AbortMultipartUpload",
                "s3:PutObject",
                "s3:PutBucketPublicAccessBlock",
                "s3:ListAllMyBuckets",
                "elasticmapreduce:ListStudios",
                "elasticmapreduce:DescribeStudio",
                "cloudformation:GetTemplate",
                "cloudformation:CreateStack",
                "cloudformation:CreateStackSet",
                "cloudformation:DeleteStack",
                "cloudformation:GetTemplateSummary",
                "cloudformation:ValidateTemplate",
                "cloudformation:ListStacks",
                "cloudformation:ListStackSets",
                "elasticmapreduce:AddTags",
                "ec2:CreateNetworkInterface",
                "elasticmapreduce:GetClusterSessionCredentials",
                "elasticmapreduce:GetOnClusterAppUIPresignedURL",
                "cloudformation:DescribeStackResources"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "AllowPassingServiceRoleForWorkspaceCreation",
            "Action": "iam:PassRole",
            "Resource": [
                "arn:aws:iam::*:role/<Studio Role>",
                "arn:aws:iam::*:role/<EMR Service Role>",
                "arn:aws:iam::*:role/<EMR Instance Profile Role>"
            ],
            "Effect": "Allow"
        },
{
			"Sid": "Statement1",
			"Effect": "Allow",
			"Action": [
				"iam:PassRole"
			],
			"Resource": [
				"arn:aws:iam::*:role/<EMR Instance Profile Role>"
			]
		}
    ]
}

スポット画像

最新のインテリジェンス

スポット画像