

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

# Amazon S3 URIs を使用したデータアクセスのアクセス許可
<a name="s3-sharing"></a>

HealthOmics API オペレーションまたは Amazon S3 API オペレーションを使用して、シーケンスストアデータにアクセスできます。

HealthOmics API アクセスの場合、HealthOmics のアクセス許可は IAM ポリシーを通じて管理されます。ただし、S3 Access には、ストアの S3 アクセスポリシーでの明示的な許可と IAM ポリシーの 2 つのレベルの設定が必要です。HealthOmics での IAM ポリシーの使用の詳細については、[HealthOmics のサービスロール](permissions-service.md)」を参照してください。

Amazon S3 API を使用してオブジェクトを読み取る機能を共有するには、次の 3 つの方法があります。 APIs

1. ポリシーベースの共有 – この共有では、S3 アクセスポリシーで IAM プリンシパルを有効にし、IAM ポリシーを記述して IAM プリンシパルにアタッチする必要があります。詳細については、次のトピックを参照してください。

1.  署名付き URLs – シーケンスストア内のファイルの共有可能な署名付き URL を生成することもできます。Amazon S3 を使用した署名付き URLs の作成の詳細については、Amazon S3 [S3 ドキュメントの「署名付き URLs](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-presigned-url.html)」を参照してください。シーケンスストア S3 アクセスポリシーは、[署名付き URL 機能を制限](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-presigned-url.html#PresignedUrlUploadObject-LimitCapabilities)するためのステートメントをサポートしています。

1. 引き受けたロール – データ所有者のアカウント内に、ユーザーがそのロールを引き受けることを許可するアクセスポリシーを持つロールを作成します。

**Topics**
+ [ポリシーベースの共有](#policy-based-sharing)
+ [制限の例](#example-restriction)

## ポリシーベースの共有
<a name="policy-based-sharing"></a>

直接 S3 URI を使用してシーケンスストアデータにアクセスする場合、HealthOmics は関連する S3 バケットアクセスポリシーのセキュリティ対策を強化します。

新しい S3 アクセスポリシーには、次のルールが適用されます。既存のポリシーの場合、ポリシーを次に更新するときにルールが適用されます。
+ S3 アクセスポリシーは、次の[ポリシー要素](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)をサポートします。
  + バージョン、ID、ステートメント、Sid、効果、プリンシパル、アクション、リソース、条件
+ S3 アクセスポリシーは、次の[条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html#amazons3-policy-keys)をサポートしています。
  + s3:ExistingObjectTag/<key>、s3:prefix、s3:signatureversion、s3:TlsVersion
  + ポリシーは、次の条件演算子を持つ aws:PrincipalArn もサポートしています: ArnEquals と ArnLike 

サポートされていない要素または条件を含めるようにポリシーを追加または更新しようとすると、システムはリクエストを拒否します。

**Topics**
+ [デフォルトの S3 アクセスポリシー](#default-access-policy)
+ [アクセスポリシーのカスタマイズ](#customize-access-policy)
+ [IAM ポリシー](#iam-policy)
+ [タグベースのアクセス制御](#tag-based-access)

### デフォルトの S3 アクセスポリシー
<a name="default-access-policy"></a>

シーケンスストアを作成すると、HealthOmics はデフォルトの S3 アクセスポリシーを作成し、データストア所有者のルートアカウントに、シーケンスストア内のすべてのアクセス可能なオブジェクトに対して、S3:GetObject、S3GetObjectTagging、S3:ListBucket のアクセス許可を付与します。デフォルトで作成されるポリシーは次のとおりです。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":
    [
        {
            "Effect": "Allow",
            "Principal":
            {
                "AWS": "arn:aws:iam::111111111111:root"
            },
            "Action":
            [
                "s3:GetObject",
                "s3:GetObjectTagging"
            ],
            "Resource": "arn:aws:s3:us-west-2:222222222222:accesspoint/111111111111-1234567890/object/111111111111/sequenceStore/1234567890/*"
        },
        {
            "Effect": "Allow",
            "Principal":
            {
                "AWS": "arn:aws:iam::111111111111:root"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:us-west-2:222222222222:accesspoint/111111111111-1234567890/111111111111/sequenceStore/1234567890/*"
        }
    ]
}
```

------

### アクセスポリシーのカスタマイズ
<a name="customize-access-policy"></a>

S3 アクセスポリシーが空白の場合、S3 アクセスは許可されません。既存のポリシーがあり、s3 アクセスを削除する必要がある場合は、 `deleteS3AccessPolicy` を使用してすべてのアクセスを削除します。

共有の制限を追加したり、他のアカウントへのアクセスを許可したりするには、 `PutS3AccessPolicy` API を使用してポリシーを更新できます。ポリシーの更新は、シーケンスストアまたは指定されたアクションのプレフィックスを超えることはできません。

### IAM ポリシー
<a name="iam-policy"></a>

Amazon S3 APIs を使用してユーザーまたは IAM プリンシパルにアクセスを許可するには、S3 アクセスポリシーのアクセス許可に加えて、IAM ポリシーを作成してプリンシパルにアタッチし、アクセスを許可する必要があります。Amazon S3 API アクセスを許可するポリシーは、シーケンスストアレベルまたは読み取りセットレベルで適用できます。読み取りセットレベルでは、プレフィックスを使用するか、サンプル ID パターンまたはサブジェクト ID パターンのリソースタグフィルターを使用してアクセス許可を制限できます。

シーケンスストアがカスタマーマネージドキー (CMK) を使用している場合、プリンシパルには復号化に KMS キーを使用する権限も必要です。詳細については、「 AWS Key Management Service デベロッパーガイド」の[「クロスアカウント KMS アクセス](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html)」を参照してください。

次の例では、シーケンスストアへのアクセス権をユーザーに付与します。追加の条件またはリソースベースのフィルターを使用して、アクセスを微調整できます。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111111111111:root"
      },
      "Action": 
      [ 
         "s3:GetObject", 
         "s3:GetObjectTagging" 
      ],
      "Resource": "arn:aws:s3:us-west-2:222222222222:accesspoint/111111111111-1234567890/object/111111111111/sequenceStore/1234567890/*",
      "Condition": {
        "StringEquals": {
          "s3:ExistingObjectTag/omics:readSetStatus": "ACTIVE"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111111111111:root"
      },
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:us-west-2:222222222222:accesspoint/111111111111-1234567890",
      "Condition": {
        "StringLike": {
          "s3:prefix": "111111111111/sequenceStore/1234567890/*"
        }
      }
    }
  ]
}
```

------

### タグベースのアクセス制御
<a name="tag-based-access"></a>

タグベースのアクセスコントロールを使用するには、まずシーケンスストアを更新して、使用されるタグキーを伝達する必要があります。この設定は、シーケンスストアの作成時または更新時に設定されます。タグが伝播されると、タグ条件を使用して制限をさらに追加できます。制限は、S3 アクセスポリシーまたは IAM ポリシーに設定できます。以下は、設定されるタブベースの S3 アクセスポリシーの例です。

```
{
    "Sid": "tagRestrictedGets",
    "Effect": "Allow",
    "Principal":
    {
        "AWS": "arn:aws:iam::<target_restricted_account_id>:root"
    },
    "Action":
    [
        "s3:GetObject",
        "s3:GetObjectTagging"
    ],
    "Resource": "arn:aws:s3:us-west-2:222222222222:accesspoint/111111111111-1234567890/object/111111111111/sequenceStore/1234567890/*",
    "Condition":
    {
        "StringEquals":
        {
            "s3:ExistingObjectTag/tagKey1": "tagValue1",
            "s3:ExistingObjectTag/tagKey2": "tagValue2"
        }
    }
}
```

## 制限の例
<a name="example-restriction"></a>

シナリオ: データ所有者がユーザーが「取り消された」データをダウンロードする能力を制限できる共有を作成する。

このシナリオでは、データ所有者 (アカウント \$1111111111111) がデータストアを管理していました。このデータ所有者は、研究者 (アカウント \$1999999999999) を含む幅広いサードパーティーユーザーとデータを共有します。データの管理の一環として、データ所有者は定期的に参加者データの取り消しリクエストを取得します。この取り消しを管理するために、データ所有者はまずリクエストの受信時に直接ダウンロードアクセスを制限し、最終的には要件に従ってデータを削除します。

このニーズを満たすために、データ所有者はシーケンスストアを設定し、各リードセットは「ステータス」のタグを受け取ります。このタグは、取り消しリクエストが通過した場合に「取り消し」に設定されます。タグがこの値に設定されたデータの場合、このファイルでユーザーが「getObject」を実行できないようにする必要があります。この設定を行うには、データ所有者が 2 つのステップを実行する必要があります。

ステップ 1. シーケンスストアでは、ステータスタグが伝播されるように更新されていることを確認します。これを行うには、 `createSequenceStore`または を呼び出す`propogatedSetLevelTags`ときに「ステータス」キーを に追加します。 `updateSequenceStore.`

ステップ 2. ストアの s3 アクセスポリシーを更新して、ステータスタグが取り消されたオブジェクトの getObject を制限します。これは、 `PutS3AccesPolicy` API を使用してストアアクセスポリシーを更新することによって行われます。次のポリシーでは、オブジェクトを一覧表示するときに削除されたファイルを表示することはできますが、アクセスすることはできません。
+ ステートメント 1 (restrictedGetWithdrawal): アカウント 999999999999 は取り消されたオブジェクトを取得できません。
+ ステートメント 2 (ownerGetAll): データ所有者であるアカウント 111111111111 は、取り消されたオブジェクトを含むすべてのオブジェクトを取得できます。
+ ステートメント 3 (everyoneListAll): すべての共有アカウント 111111111111 および 999999999999 は、プレフィックス全体で **ListBucket**オペレーションを実行できます。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":
    [
        {
            "Sid": "restrictedGetWithdrawal",
            "Effect": "Allow",
            "Principal":
            {
                "AWS": "arn:aws:iam::999999999999:root"
            },
            "Action":
            [
                "s3:GetObject",
                "s3:GetObjectTagging"
            ],
            "Resource": "arn:aws:s3:us-west-2:222222222222:accesspoint/111111111111-1234567890/object/111111111111/sequenceStore/1234567890/*",
            "Condition":
            {
                "StringNotEquals":
                {
                    "s3:ExistingObjectTag/status": "withdrawn"
                }
            }
        },
        {
            "Sid": "ownerGetAll",
            "Effect": "Allow",
            "Principal":
            {
                "AWS": "arn:aws:iam::111111111111:root"
            },
            "Action":
            [
                "s3:GetObject",
                "s3:GetObjectTagging"
            ],
            "Resource": "arn:aws:s3:us-west-2:222222222222:accesspoint/111111111111-1234567890/object/111111111111/sequenceStore/1234567890/*",
            "Condition":
            {
                "StringEquals":
                {
                    "s3:ExistingObjectTag/omics:readSetStatus": "ACTIVE"
                }
            }
        },
        {
            "Sid": "everyoneListAll",
            "Effect": "Allow",
            "Principal":
            {
                "AWS": [
                    "arn:aws:iam::111111111111:root",
                    "arn:aws:iam::999999999999:root"
                ]
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:us-west-2:222222222222:accesspoint/111111111111-1234567890",
            "Condition":
            {
                "StringLike":
                {
                    "s3:prefix": "111111111111/sequenceStore/1234567890/*"
                }
            }
        }
    ]
}
```

------