認証ポリシーを使用してサービスへのアクセスを制御する - Amazon 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)を使用して計算された有効なリクエストの署名が含まれている必要があります。詳細については、「署名バージョン 4 で認証されたリクエストの例」を参照してください。

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

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

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

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

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

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

  • アクション – VPC Lattice は 1 つのアクション vpc-lattice-svcs:Invoke をサポートします。このアクセス許可により、指定されたプリンシパルは Resources 要素で指定されたリソースに対してリクエストを実行できます。

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

  • 条件 – 条件はオプションです。これを使用してポリシーを有効にするタイミングをコントロールします。

認証ポリシーを作成し管理するときは、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) または匿名のどちらで署名されているかによって、評価の対象となります。詳細については、「サービス認可リファレンス」の「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 はい はい

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

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

匿名プリンシパルは Signature Version 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 の場合、エンフォースメントコードにより許可の最終決定が返されます。

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

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


                認証の流れ