

# 転送アクセスセッション
<a name="access_forward_access_sessions"></a>

転送アクセスセッション (FAS) は、AWS サービスがユーザーに代わってリクエストを行ったときに ID、権限、セッション属性を渡すために AWS サービスが使用する IAM テクノロジーです。FAS は、AWS サービスを呼び出す ID の権限を使用し、AWS サービスの ID と組み合わせて、ダウンストリームのサービスに対してリクエストを行います。FAS リクエストは、他の AWS サービスやリソースとのやり取りを完了する必要があるリクエストをサービスが受信した後、IAM プリンシパルに代わって AWS サービスに対してのみ行われます。FAS リクエストが行われた場合:
+ IAM プリンシパルから最初のリクエストを受け取るサービスは、IAM プリンシパルの権限を確認します。
+ 後続の FAS リクエストを受信するサービスも、同じ IAM プリンシパルの権限を確認します。

例えば、[SSE-KMS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html) を使用してオブジェクトを暗号化した場合、Amazon S3 は FAS を使用してオブジェクトを復号化するための呼び出しを AWS Key Management Service に対して行います。SSE-KMS 暗号化オブジェクトをダウンロードするとき、**data-reader** という名前のロールは Amazon S3 に対してオブジェクトの GetObject を呼び出し、直接 AWS KMS は呼び出しません。GetObject リクエストを受け取り、data-reader を承認すると、Amazon S3 は Amazon S3 オブジェクトを復号化するために FAS リクエストを AWS KMS に送信します。KMS は FAS リクエストを受信すると、ロールの権限を確認し、data-reader が KMS キーに対して正しい権限を持っている場合にのみ復号化リクエストを承認します。Amazon S3 と AWS KMS の両方へのリクエストは、ロールの権限を使用して承認され、data-reader が Amazon S3 オブジェクトと AWS KMS キーの両方に対する権限を持っている場合にのみ成功します。

![\[IAM ロールがプリンシパルとして Amazon S3 に渡されてから AWS KMS に渡されるフロー図。\]](http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/images/access-fas-example.png)


**注記**  
FAS リクエストを受け取ったサービスによって、追加の FAS リクエストを行うことができます。このような場合、要求元のプリンシパルは、FAS によって呼び出されるすべてのサービスに対する権限を持っている必要があります。

## FAS リクエストと IAM ポリシー条件
<a name="access_fas_policy_conditions"></a>

FAS リクエストが行われると、[aws:CalledVia](reference_policies_condition-keys.md#condition-keys-calledvia)、[aws:CalledViaFirst](reference_policies_condition-keys.md#condition-keys-calledviafirst)、および [aws:CalledViaLast](reference_policies_condition-keys.md#condition-keys-calledvialast) 条件キーには、FAS 呼び出しを開始したサービスのサービスプリンシパルが入力されます。[aws:ViaAWSService](reference_policies_condition-keys.md#condition-keys-viaawsservice) 条件キーの値は、FAS リクエストが行われると常に `true` に設定されます。以下の図では、CloudFormation への直接のリクエストには、`aws:CalledVia` または `aws:ViaAWSService` 条件キーが設定されていません。CloudFormation と DynamoDB がロールに代わってダウンストリームの FAS リクエストを行うと、これらの条件キーの値が入力されます。

![\[IAM ロールがプリンシパルとして CloudFormation に渡され、その条件キー値が DynamoDB と AWS KMS に渡されるフロー図。\]](http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/images/access-fas-example2.png)


ソース IP アドレスまたはソース VPC をテストする条件キーを含む拒否ポリシーステートメントによって拒否される場合に FAS リクエストを行えるようにするには、条件キーを使用して拒否ポリシーで FAS リクエストの例外を設定する必要があります。これは、`aws:ViaAWSService` 条件キーを使用することですべての FAS リクエストに対して実行できます。特定の AWS サービスのみが FAS リクエストを行えるようにするには、`aws:CalledVia` を使用してください。

**重要**  
VPC エンドポイントを介して最初のリクエストが行われた後に FAS リクエストが行われた場合、最初のリクエストの `aws:SourceVpce`、`aws:SourceVpc`、および `aws:VpcSourceIp` の条件キー値は FAS リクエストでは使用されません。`aws:VPCSourceIP` または `aws:SourceVPCE` を使用してポリシーを作成し、条件付きでアクセスを許可する場合は、`aws:ViaAWSService` または `aws:CalledVia` を使用して FAS リクエストを許可する必要もあります。パブリック AWS サービスエンドポイントが最初のリクエストを受信した後に FAS リクエストが行われると、それ以降の FAS リクエストは同じ `aws:SourceIP` 条件キー値で行われます。

## 例: VPC からの、または FAS を使用した Amazon S3 アクセスの許可
<a name="access_fas_example"></a>

次の IAM ポリシーの例では、Amazon S3 GetObject リクエストと Athena リクエストは、*example\$1vpc* にアタッチされた VPC エンドポイントから送信された場合、またはリクエストが Athena によって作成された FAS リクエストである場合にのみ許可されます。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "OnlyAllowMyIPs",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject*",
        "athena:StartQueryExecution",
        "athena:GetQueryResults",
        "athena:GetWorkGroup",
        "athena:StopQueryExecution",
        "athena:GetQueryExecution"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:SourceVPC": [
          "vpc-111bbb22"
          ]
        }
      }
    },
    {
      "Sid": "OnlyAllowFAS",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject*"
      ],
      "Resource": "*",
      "Condition": {
        "ForAnyValue:StringEquals": {
          "aws:CalledVia": "athena.amazonaws.com"
        }
      }
    }
  ]
}
```

------

条件キーを使用して FAS アクセスを許可するその他の例については、「[data perimeter example policy repo](https://github.com/aws-samples/data-perimeter-policy-examples)」を参照してください。