認証ポリシーを使用して VPC Lattice サービスへのアクセスを制御する - Amazon VPC Lattice

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

認証ポリシーを使用して VPC Lattice サービスへのアクセスを制御する

VPC Lattice 認証ポリシーは、サービスネットワークまたはサービスにアタッチして、指定されたプリンシパルがサービスのグループまたは特定のサービスにアクセスできるかどうかを制御するIAMポリシードキュメントです。アクセスを制御する各サービスネットワークまたはサービスに認証ポリシーを 1 つアタッチできます。

認証ポリシーは、IAMアイデンティティベースのポリシーとは異なります。IAM ID ベースのポリシーは、IAMユーザー、グループ、またはロールにアタッチされ、それらの ID がどのリソースに対して実行できるアクションを定義します。認証ポリシーはサービスとサービスネットワークにアタッチされます。認可が正常に完了するためには、認可ポリシーとアイデンティティベースのポリシーの両方において、明示的な許可ステートメントが必要です。詳細については、「認可の仕組み」を参照してください。

AWS CLI および コンソールを使用して、サービスおよびサービスネットワーク上の認証ポリシーを表示、追加、更新、または削除できます。を使用する場合 AWS CLI、コマンドはプロファイル用に AWS リージョン 設定された で実行されることに注意してください。別のリージョンでコマンドを実行する場合は、プロファイルのデフォルトのリージョンを変更するか、コマンドに --region パラメータを使用します。

認証ポリシーの使用を開始するには、手順に沿ってサービスネットワークに適用する認証ポリシーを作成します。制限の厳しいアクセス許可を他のサービスには適用しない場合には、オプションで個別のサービスに認証ポリシーを設定できます。

以下の AWS CLI タスクでは、認証ポリシーを使用してサービスネットワークへのアクセスを管理する方法を示します。コンソールでの手順については、「VPC Lattice のサービスネットワーク」を参照してください。

認証ポリシーをサービスネットワークに追加する

このセクションの手順に従って、 を使用して以下 AWS CLI を行います。

  • を使用して、サービスネットワークのアクセスコントロールを有効にしますIAM。

  • 認証ポリシーをサービスネットワークに追加します。認証ポリシーを追加しない場合、すべてのトラフィックでアクセス拒否エラーが発生します。

アクセスコントロールを有効にし、認証ポリシーを新しいサービスネットワークに追加する方法
  1. サービスネットワークでアクセスコントロールを有効にして認証ポリシーを使用できるようにするには、create-service-network コマンドを使用して --auth-type オプションを値 AWS_IAM と指定します。

    aws vpc-lattice create-service-network --name Name --auth-type AWS_IAM [--tags TagSpecification]

    成功すると、コマンドは以下のような出力を返します。

    { "arn": "arn", "authType": "AWS_IAM", "id": "sn-0123456789abcdef0", "name": "Name" }
  2. put-auth-policy コマンドを使用して、認証ポリシーを追加するサービスネットワークの ID と追加する認証ポリシーを指定します。

    例えば、次のコマンドを使用して、ID を使用してサービスネットワークの認証ポリシーを作成します。sn-0123456789abcdef0.

    aws vpc-lattice put-auth-policy --resource-identifier sn-0123456789abcdef0 --policy file://policy.json

    JSON を使用してポリシー定義を作成します。詳細については、「認証ポリシーの一般的な要素」を参照してください。

    成功すると、コマンドは以下のような出力を返します。

    { "policy": "policy", "state": "Active" }
アクセスコントロールを有効にし、既存のサービスネットワークに認証ポリシーを追加する方法
  1. サービスネットワークでアクセスコントロールを有効にして認証ポリシーを使用できるようにするには、update-service-network コマンドを使用して --auth-type オプションを値 AWS_IAM と指定します。

    aws vpc-lattice update-service-network --service-network-identifier sn-0123456789abcdef0 --auth-type AWS_IAM

    成功すると、コマンドは以下のような出力を返します。

    { "arn": "arn", "authType": "AWS_IAM", "id": "sn-0123456789abcdef0", "name": "Name" }
  2. put-auth-policy コマンドを使用して、認証ポリシーを追加するサービスネットワークの ID と追加する認証ポリシーを指定します。

    aws vpc-lattice put-auth-policy --resource-identifier sn-0123456789abcdef0 --policy file://policy.json

    JSON を使用してポリシー定義を作成します。詳細については、「認証ポリシーの一般的な要素」を参照してください。

    成功すると、コマンドは以下のような出力を返します。

    { "policy": "policy", "state": "Active" }

サービスネットワークの認証タイプを変更する

サービスネットワークの認証ポリシーを無効にする方法

update-service-network コマンドを使用して --auth-type オプションを値 NONE と指定します。

aws vpc-lattice update-service-network --service-network-identifier sn-0123456789abcdef0 --auth-type NONE

後ほど認証ポリシーを再度有効にする必要がある場合は、--auth-type オプションを AWS_IAM と指定してこのコマンドを実行します。

認証ポリシーをサービスネットワークから削除する

認証ポリシーをサービスネットワークから削除する方法

delete-auth-policyコマンドを実行します。

aws vpc-lattice delete-auth-policy --resource-identifier sn-0123456789abcdef0

サービスネットワークの認証タイプを NONE に変更する前に認証ポリシーを削除すると、リクエストはエラーとなります。

以下の AWS CLI タスクでは、認証ポリシーを使用してサービスへのアクセスを管理する方法を示します。コンソールでの手順については、「VPC Lattice のサービス」を参照してください。

認証ポリシーをサービスに追加する

を使用して以下のステップを実行します AWS CLI 。

  • を使用して、 サービスのアクセスコントロールを有効にしますIAM。

  • 認証ポリシーをサービスに追加します。認証ポリシーを追加しない場合、すべてのトラフィックでアクセス拒否エラーが発生します。

アクセスコントロールを有効にし、認証ポリシーを新しいサービスに追加する方法
  1. サービスでアクセスコントロールを有効にして認証ポリシーを使用できるようにするには、create-service コマンドを使用して --auth-type オプションを値 AWS_IAM と指定します。

    aws vpc-lattice create-service --name Name --auth-type AWS_IAM [--tags TagSpecification]

    成功すると、コマンドは以下のような出力を返します。

    { "arn": "arn", "authType": "AWS_IAM", "dnsEntry": { ... }, "id": "svc-0123456789abcdef0", "name": "Name", "status": "CREATE_IN_PROGRESS" }
  2. put-auth-policy コマンドを使用して、認証ポリシーを追加するサービスの ID と追加する認証ポリシーを指定します。

    例えば、次のコマンドを使用して、ID を持つサービスの認証ポリシーを作成します。svc-0123456789abcdef0.

    aws vpc-lattice put-auth-policy --resource-identifier svc-0123456789abcdef0 --policy file://policy.json

    JSON を使用してポリシー定義を作成します。詳細については、「認証ポリシーの一般的な要素」を参照してください。

    成功すると、コマンドは以下のような出力を返します。

    { "policy": "policy", "state": "Active" }
アクセスコントロールを有効にし、既存のサービスに認証ポリシーを追加する方法
  1. サービスでアクセスコントロールを有効にして認証ポリシーを使用できるようにするには、update-service コマンドを使用して --auth-type オプションを値 AWS_IAM と指定します。

    aws vpc-lattice update-service --service-identifier svc-0123456789abcdef0 --auth-type AWS_IAM

    成功すると、コマンドは以下のような出力を返します。

    { "arn": "arn", "authType": "AWS_IAM", "id": "svc-0123456789abcdef0", "name": "Name" }
  2. put-auth-policy コマンドを使用して、認証ポリシーを追加するサービスの ID と追加する認証ポリシーを指定します。

    aws vpc-lattice put-auth-policy --resource-identifier svc-0123456789abcdef0 --policy file://policy.json

    JSON を使用してポリシー定義を作成します。詳細については、「認証ポリシーの一般的な要素」を参照してください。

    成功すると、コマンドは以下のような出力を返します。

    { "policy": "policy", "state": "Active" }

サービスの認証タイプを変更する

サービスの認証ポリシーを無効にする方法

update-service コマンドを使用して --auth-type オプションを値 NONE と指定します。

aws vpc-lattice update-service --service-identifier svc-0123456789abcdef0 --auth-type NONE

後ほど認証ポリシーを再度有効にする必要がある場合は、--auth-type オプションを AWS_IAM と指定してこのコマンドを実行します。

認証ポリシーをサービスから削除する

認証ポリシーをサービスから削除する方法

delete-auth-policyコマンドを実行します。

aws vpc-lattice delete-auth-policy --resource-identifier svc-0123456789abcdef0

サービスの認証タイプを NONE に変更する前に認証ポリシーを削除すると、リクエストはエラーとなります。

サービスに認証されたリクエストを必要とする認証ポリシーを有効にする場合、そのサービスのすべてのリクエストには、Signature Version 4 (SigV4)を使用して計算された有効なリクエストの署名が含まれている必要があります。詳細については、「SIGv4 Amazon Lattice VPC の認証されたリクエスト」を参照してください。

認証ポリシーの一般的な要素

VPC Lattice 認証ポリシーは、IAMポリシーと同じ構文を使用して指定されます。詳細については、「 ユーザーガイド」の「アイデンティティベースのポリシー」と「リソースベースのポリシー」を参照してください。 IAM

認証ポリシーには、次の要素が含まれます。

  • プリンシパル – ステートメントのアクションとリソースへのアクセスが許可されているユーザーまたはアプリケーションを指します。認証ポリシーでは、プリンシパルは、このアクセス許可の受信者であるIAMエンティティです。プリンシパルは、サービスネットワーク内のサービスの場合と同様に、特定のリソース、またはリソースのグループにリクエストを行うIAMエンティティとして認証されます。

    リソースベースのポリシーで、プリンシパルを指定する必要があります。プリンシパルには、アカウント、ユーザー、ロール、フェデレーティッドユーザー、または AWS サービスを含めることができます。詳細については、「 ユーザーガイド」のAWS JSON「ポリシー要素: プリンシパル」を参照してください。 IAM

  • 効果 - 指定されたプリンシパルが特定のアクションをリクエストするときの効果を指定します。Allow または Deny のいずれかとなります。デフォルトでは、 を使用してサービスまたはサービスネットワークでアクセスコントロールを有効にするとIAM、プリンシパルにはサービスまたはサービスネットワークにリクエストを行うアクセス許可はありません。

  • アクション – アクセス許可を付与または拒否する特定のAPIアクション。VPC Lattice は、vpc-lattice-svcsプレフィックスを使用するアクションをサポートしています。詳細については、「サービス認証リファレンス」の「Amazon Lattice Services VPC で定義されるアクション」を参照してください。

  • リソース – アクションによって影響を受けるサービスです。

  • 条件 – 条件はオプションです。ポリシーの有効期間を制御するために使用できます。詳細については、「サービス認証リファレンス」の「Amazon VPC Lattice サービスの条件キー」を参照してください。

認証ポリシーを作成および管理する際は、IAMポリシージェネレーター を使用することをお勧めします。

要件

のポリシーに改行や空白行を含めるJSONことはできません。

認証ポリシーのリソース形式

特定のリソースへのアクセスを制限するには、次の例のとおり <serviceARN>/<path> パターンと一致するスキーマを使用し Resource 要素をコーディングする認証ポリシーを作成します。

[プロトコル]
HTTP
  • "Resource": "arn:aws:vpc-lattice:us-west-2:1234567890:service/svc-0123456789abcdef0/rates"

  • "Resource": "*/rates"

  • "Resource": "*/*"

gRPC
  • "Resource": "arn:aws:vpc-lattice:us-west-2:1234567890:service/svc-0123456789abcdef0/api.parking/GetRates"

  • "Resource": "arn:aws:vpc-lattice:us-west-2:1234567890:service/svc-0123456789abcdef0/api.parking/*"

  • "Resource": "arn:aws:vpc-lattice:us-west-2:1234567890:service/svc-0123456789abcdef0/*"

には、次の Amazon リソースネーム (ARN) リソース形式を使用します<serviceARN>

arn:aws:vpc-lattice:region:account-id:service/service-id

例:

"Resource": "arn:aws:vpc-lattice:us-west-2:123456789012:service/svc-0123456789abcdef0"

認証ポリシーで使用できる条件キー

アクセスは認証ポリシーの条件要素の条件キーによってさらに細かくコントロールできます。これらの条件キーはプロトコルと、リクエストが Signature Version 4 (SigV4) または匿名のどちらで署名されているかによって、評価の対象となります。条件キーは大文字と小文字が区別されます。

AWS には、 aws:PrincipalOrgIDや などのアクセスの制御に使用できるグローバル条件キーが用意されていますaws:SourceIp。 AWS グローバル条件キーのリストを確認するには、「 ユーザーガイド」のAWS 「グローバル条件コンテキストキー」を参照してください。 IAM

次のストーリーでは、Lattice VPC 条件キーを一覧表示します。詳細については、「サービス認証リファレンス」の「Amazon VPC Lattice サービスの条件キー」を参照してください。

条件キー 説明 匿名の (認証されていない) 発信者による利用可否 g で使用できますRPCか?
vpc-lattice-svcs:Port リクエストが行われたサービスポートによりアクセスをフィルタリング 80 あり 可能
vpc-lattice-svcs:RequestMethod リクエスト方法によりアクセスをフィルタリング GET 可能 常に POST
vpc-lattice-svcs:RequestHeader/header-name: value リクエストヘッダーのヘッダー名と値のペアによりアクセスをフィルタリング content-type: application/json あり 可能
vpc-lattice-svcs:RequestQueryString/key-name: value リクエスト内のクエリ文字列のキーと値のペアでアクセスをフィルタリングします URL quux: [corge, grault] 可能 不可
vpc-lattice-svcs:ServiceNetworkArn リクエストを受信しているARNサービスのサービスネットワークの によってアクセスをフィルタリングします arn:aws:vpc-lattice:us-west-2:123456789012:servicenetwork/sn-0123456789abcdef0 あり 可能
vpc-lattice-svcs:ServiceArn リクエストを受信しているサービスの によってアクセスARNをフィルタリングします arn:aws:vpc-lattice:us-west-2:123456789012:service/svc-0123456789abcdef0 あり 可能
vpc-lattice-svcs:SourceVpc リクエストの送信元によってアクセスVPCをフィルタリングします。 vpc-1a2b3c4d あり 可能
vpc-lattice-svcs:SourceVpcOwnerAccount リクエストの所有者アカウントによるアクセスVPCをフィルタリングします 123456789012 あり 可能

匿名 (認証されていない) プリンシパル

匿名プリンシパルは、署名バージョン 4 (SigV4) で AWS リクエストに署名せず、サービスネットワークに接続VPCされた 内にある発信者です。匿名プリンシパルはサービスネットワークのサービスに対して認証されていないリクエストを認証ポリシーで許可されている場合には実行できます。

認証ポリシーの例

認証されたプリンシパルによるリクエストが必要な認証ポリシーの例には次のものがあります。

すべての例では us-west-2リージョンを使用し、架空のアカウント が含まれていますIDs。

例 1: 特定の AWS 組織によるサービスへのアクセスを制限する

次の認証ポリシーの例では、ポリシーが適用されるサービスネットワーク内のサービスにアクセスする権限を、認証されたすべてのリクエストに付与します。ただし、リクエストは、 条件で指定された AWS 組織に属するプリンシパルから発信される必要があります。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "vpc-lattice-svcs:Invoke", "Resource": "*", "Condition": { "StringEquals": { "aws:PrincipalOrgID": [ "o-123456example" ] } } } ] }
例 2: 特定のIAMロールによるサービスへのアクセスの制限

次の認証ポリシーの例では、 IAM ロールを使用して Resource要素で指定されたサービスに対してリクエストを行う、認証されたHTTPGETリクエストrates-clientにアクセス許可を付与します。Resource 要素のリソースはポリシーがアタッチされているサービスと同じです。

{ "Version":"2012-10-17", "Statement":[ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::123456789012:role/rates-client" ] }, "Action": "vpc-lattice-svcs:Invoke", "Resource": [ "arn:aws:vpc-lattice:us-west-2:123456789012:service/svc-0123456789abcdef0/*" ], "Condition": { "StringEquals": { "vpc-lattice-svcs:RequestMethod": "GET" } } } ] }
例 3: 特定の の認証されたプリンシパルによるサービスへのアクセスを制限する VPC

次の認証ポリシーの例では、VPCID VPCが のプリンシパルからの認証されたリクエストのみを許可しますvpc-1a2b3c4d

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "vpc-lattice-svcs:Invoke", "Resource": "*", "Condition": { "StringNotEquals": { "aws:PrincipalType": "Anonymous" }, "StringEquals": { "vpc-lattice-svcs:SourceVpc": "vpc-1a2b3c4d" } } } ] }

認可の仕組み

VPC Lattice サービスがリクエストを受信すると、 AWS 適用コードは関連するすべてのアクセス許可ポリシーを一緒に評価して、リクエストを承認または拒否するかどうかを決定します。認証中にリクエストコンテキストに適用されるすべてのIAMアイデンティティベースのポリシーと認証ポリシーを評価します。デフォルトでは、認証タイプが AWS_IAM の場合、すべてのリクエストは暗黙的に拒否されます。関連するすべてのポリシーからの明示的な許可はデフォルトに優先します。

認可では次のことが行われます。

  • 関連するすべてのIAMアイデンティティベースのポリシーと認証ポリシーを収集します。

  • 収集したポリシーのセットを評価します。

    • リクエスタ (IAMユーザーやロールなど) に、リクエスタが属するアカウントからオペレーションを実行するアクセス許可があることを確認します。明示的な許可ステートメントがない場合、 AWS はリクエストを承認しません。

    • リクエストがサービスネットワークの認証ポリシーによって許可されていることを確認します。認証ポリシーが有効であっても明示的な許可ステートメントがない場合、 AWS はリクエストを許可しません。明示的な許可ステートメントがある場合、または認証タイプが NONE の場合、コードが継続します。

    • リクエストがサービスの認証ポリシーによって許可されていることを確認します。認証ポリシーが有効であっても明示的な許可ステートメントがない場合、 AWS はリクエストを許可しません。明示的な許可ステートメントがある場合、または認証タイプが NONE の場合、エンフォースメントコードにより許可の最終決定が返されます。

    • ポリシー内の明示的な拒否は、すべての許可に優先します。

次の図は認可の流れを示しています。リクエストが行われると、関連するポリシーによって特定のサービスへのリクエストアクセスが許可または拒否されます。

認可の流れ