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

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

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

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

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

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)を使用して計算された有効なリクエストの署名が含まれている必要があります。詳細については、「Amazon VPC Lattice の SIGv4 認証リクエスト」を参照してください。

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

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

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

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

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

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

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

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

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

認証ポリシーを作成し管理するときは、IAM Policy Generator を使用することもできます。

要件

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/*"

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

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 グローバル条件キーのリストを確認するには、「IAM ユーザーガイド」のAWS 「 グローバル条件コンテキストキー」を参照してください。

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

認証ポリシーの条件キー
条件キー 説明 匿名の (認証されていない) 発信者による利用可否 gRPC での利用可否
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 リージョンと架空のアカウント ID を使用しています。

例 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 ロールによるサービスへのアクセスを制限する

次の認証ポリシーの例では、Resource 要素で指定されたサービスに対して HTTP GET リクエストを行う権限を、IAM ロール 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 の認証されたプリンシパルによるサービスへのアクセスを制限する

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

{ "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 の場合、エンフォースメントコードにより許可の最終決定が返されます。

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

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

認証の流れ