

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

# Amazon ECR のアクセス許可
<a name="permissions-ecr"></a>

HealthOmics サービスがプライベート Amazon ECR リポジトリからコンテナでワークフローを実行する前に、リポジトリのリソースポリシーを作成します。このポリシーは、HealthOmics サービスがコンテナを使用するためのアクセス許可を付与します。このリソースポリシーは、ワークフローによって参照される各プライベートリポジトリに追加します。

**注記**  
プライベートリポジトリとワークフローは同じリージョンにある必要があります。

ワークフローとリポジトリを所有する AWS アカウントが異なる場合は、クロスアカウントアクセス許可を設定する必要があります。

共有ワークフローに追加のリポジトリアクセスを付与する必要はありません。ただし、コンテナイメージへの特定のワークフローアクセスを許可または拒否するポリシーを作成できます。

Amazon ECR プルスルーキャッシュ機能を使用するには、レジストリアクセス許可ポリシーを作成する必要があります。

以下のセクションでは、これらのシナリオに対して Amazon ECR リソースのアクセス許可を設定する方法について説明します。Amazon ECR のアクセス許可の詳細については、[「Amazon ECR のプライベートレジストリのアクセス許可](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry-permissions.html)」を参照してください。

**Topics**
+ [Amazon ECR リポジトリのリソースポリシーを作成する](#permissions-resource-policy)
+ [クロスアカウントコンテナを使用したワークフローの実行](#permissions-cross-account-containers)
+ [共有ワークフローの Amazon ECR ポリシー](#permissions-shared-workflows)
+ [Amazon ECR プルスルーキャッシュのポリシー](#permissions-ecr-ptc)

## Amazon ECR リポジトリのリソースポリシーを作成する
<a name="permissions-resource-policy"></a>

リソースポリシーを作成して、HealthOmics サービスがリポジトリ内のコンテナを使用してワークフローを実行できるようにします。このポリシーは、HealthOmics サービスプリンシパルが必要な Amazon ECR アクションにアクセスするためのアクセス許可を付与します。

ポリシーを作成するには、次の手順に従います。

1. Amazon ECR コンソールで[プライベートリポジトリ](https://console.aws.amazon.com/ecr/private-registry/repositories)ページを開き、アクセス権を付与するリポジトリを選択します。

1. サイドバーナビゲーションから、**アクセス許可**を選択します。

1. **[編集]** を選択します。

1. **ポリシー JSON の編集** を選択します。

1. 次のポリシーステートメントを追加し、**保存**を選択します。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "omics workflow access",
               "Effect": "Allow",
               "Principal": {
                   "Service": "omics.amazonaws.com"
               },
               "Action": [
                   "ecr:GetDownloadUrlForLayer",
                   "ecr:BatchGetImage",
                   "ecr:BatchCheckLayerAvailability"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

## クロスアカウントコンテナを使用したワークフローの実行
<a name="permissions-cross-account-containers"></a>

ワークフローとコンテナを所有する AWS アカウントが異なる場合は、次のクロスアカウントアクセス許可を設定する必要があります。

1. リポジトリの Amazon ECR ポリシーを更新して、ワークフローを所有するアカウントにアクセス許可を明示的に付与します。

1. ワークフローを所有するアカウントのサービスロールを更新して、コンテナイメージへのアクセスを許可します。

次の例は、ワークフローを所有するアカウントへのアクセスを許可する Amazon ECR リソースポリシーを示しています。

この例では、以下のようになっています：
+ ワークフローアカウント ID: 111122223333
+ コンテナリポジトリアカウント ID: 444455556666 
+ コンテナ名: samtools

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "omics.amazonaws.com"
            },
            "Action": [
                "ecr:BatchCheckLayerAvailability",
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowAccessToTheServiceRoleOfTheAccountThatOwnsTheWorkflow",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{{111122223333}}:role/DemoCustomer"
            },
            "Action": [
                "ecr:BatchCheckLayerAvailability",
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": "*"
        }
    ]
}
```

------

セットアップを完了するには、ワークフローを所有するアカウントのサービスロールに次のポリシーステートメントを追加します。このポリシーは、サービスロールが「samtools」コンテナイメージにアクセスするためのアクセス許可を付与します。アカウント番号、コンテナ名、リージョンを独自の値に置き換えてください。

```
{
    "Sid": "CrossAccountEcrRepoPolicy",
    "Effect": "Allow",
    "Action": ["ecr:BatchCheckLayerAvailability", "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer"],
    "Resource": "arn:aws:ecr:us-west-2:444455556666:repository/samtools"
}
```

## 共有ワークフローの Amazon ECR ポリシー
<a name="permissions-shared-workflows"></a>

**注記**  
HealthOmics は、ワークフローがサブスクライバーのアカウントで実行されている間、共有ワークフローがワークフロー所有者のアカウントの Amazon ECR リポジトリに自動的にアクセスできるようにします。共有ワークフローに追加のリポジトリアクセスを付与する必要はありません。詳細については、[HealthOmics ワークフローの共有](https://docs.aws.amazon.com/omics/latest/dev/sharing-workflows.html)」を参照してください。

デフォルトでは、サブスクライバーは基盤となるコンテナを使用する Amazon ECR リポジトリにアクセスできません。必要に応じて、リポジトリのリソースポリシーに条件キーを追加することで、Amazon ECR リポジトリへのアクセスをカスタマイズできます。以下のセクションでは、ポリシーの例を示します。

### 特定のワークフローへのアクセスを制限する
<a name="permissions-limit-workflows"></a>

条件ステートメントで個々のワークフローを一覧表示できるため、これらのワークフローのみがリポジトリ内のコンテナを使用できます。**SourceArn** 条件キーは、共有ワークフローの ARN を指定します。次の の例では、指定されたワークフローにこのリポジトリを使用するアクセス許可を付与します。

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

****  

```
{  
  "Version":"2012-10-17",		 	 	 
  "Statement": [
     {
       "Sid": "OmicsAccessPrincipal",
       "Effect": "Allow",
       "Principal": {
         "Service": "omics.amazonaws.com"
       },
       "Action": [
         "ecr:GetDownloadUrlForLayer",
         "ecr:BatchGetImage",
         "ecr:BatchCheckLayerAvailability"
       ],
       "Resource": "*",
       "Condition": {
          "StringEquals": {
             "aws:SourceArn": "arn:aws:omics:{{us-east-1}}:{{111122223333}}:workflow/1234567"
          }
       }
     }
  ]
}
```

------

### 特定のアカウントへのアクセスを制限する
<a name="permissions-limit-users"></a>

条件ステートメントにサブスクライバーアカウントを一覧表示して、これらのアカウントのみがリポジトリ内のコンテナを使用するアクセス許可を持つようにできます。**SourceAccount** 条件キーは、サブスクライバー AWS アカウント の を指定します。次の の例では、指定されたアカウントにこのリポジトリを使用するアクセス許可を付与します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "OmicsAccessPrincipal",
      "Effect": "Allow",
      "Principal": {
        "Service": "omics.amazonaws.com"
      },
      "Action": [
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage",
        "ecr:BatchCheckLayerAvailability"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "{{111122223333}}"
        }
      }
    }
  ]
}
```

------

次のポリシー例に示すように、特定のサブスクライバーに対する Amazon ECR アクセス許可を拒否することもできます。

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

****  

```
{
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "OmicsAccessPrincipal",
              "Effect": "Allow",
              "Principal": {
                  "Service": "omics.amazonaws.com"
              },
              "Action": [
                  "ecr:GetDownloadUrlForLayer",
                  "ecr:BatchGetImage",
                  "ecr:BatchCheckLayerAvailability"
              ],
              "Resource": "*",
              "Condition": {
                "StringNotEquals": {
                  "aws:SourceAccount": "{{111122223333}}"
                }
             }  
         }
      ]
  }
```

------

## Amazon ECR プルスルーキャッシュのポリシー
<a name="permissions-ecr-ptc"></a>

Amazon ECR プルスルーキャッシュを使用するには、レジストリアクセス許可ポリシーを作成します。また、Amazon ECR プルスルーキャッシュによって作成されたリポジトリのアクセス許可を定義するリポジトリ作成テンプレートを作成します。

以下のセクションでは、これらのポリシーの例を示します。プルスルーキャッシュの詳細については、Amazon *Elastic Container Registry* [ ユーザーガイドの「アップストリームレジストリと Amazon ECR プライベートレジストリの同期](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-private.html)」を参照してください。

### レジストリアクセス許可ポリシー
<a name="permissions-reg"></a>

Amazon ECR プルスルーキャッシュを使用するには、レジストリアクセス許可ポリシーを作成します。レジストリアクセス許可ポリシーは、レプリケーションとプルスルーキャッシュアクセス許可の制御を提供します。

クロスアカウントレプリケーションでは、リポジトリ AWS アカウント をレジストリにレプリケートできる各 を明示的に許可する必要があります。

デフォルトでは、プルスルーキャッシュルールを作成すると、プライベートレジストリからイメージをプルする権限を持つ IAM プリンシパルもプルスルーキャッシュルールを使用できます。レジストリのアクセス許可を使用して、これらのアクセス許可を特定のリポジトリに絞り込むことができます。

コンテナイメージを所有するアカウントにレジストリアクセス許可ポリシーを追加します。

次の例では、ポリシーにより、HealthOmics サービスが各アップストリームレジストリのリポジトリを作成し、作成されたリポジトリからアップストリームプルリクエストを開始することを許可します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowPTCinRegPermissions",
            "Effect": "Allow",
            "Principal": {
                "Service": "omics.amazonaws.com"
            },
            "Action": [
                "ecr:CreateRepository",
                "ecr:BatchImportUpstreamImage"
            ],
            "Resource": [
                "arn:aws:ecr:{{us-east-1}}:{{123456789012}}:repository/ecr-public/*",
                "arn:aws:ecr:{{us-east-1}}:{{123456789012}}:repository/docker-hub/*"
            ] 
        }
    ]
}
```

------

### リポジトリ作成テンプレート
<a name="permissions-reg"></a>

HealthOmics でプルスルーキャッシュを使用するには、Amazon ECR リポジトリにリポジトリ作成テンプレートが必要です。テンプレートは、アップストリームレジストリ用に作成されたプライベートリポジトリの設定を定義します。

各テンプレートには、Amazon ECR が新しいリポジトリを特定のテンプレートに一致させるために使用するリポジトリ名前空間プレフィックスが含まれています。テンプレートでは、リソースベースのアクセスポリシー、タグのイミュータビリティ、暗号化、ライフサイクルポリシーなど、すべてのリポジトリ設定の設定を指定できます。詳細については、[「Amazon Elastic Container Registry ユーザーガイド」の「リポジトリ作成テンプレート](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-creation-templates.html)」を参照してください。 **

次の例では、ポリシーは HealthOmics サービスがアップストリームリポジトリからアップストリームプルリクエストを開始することを許可します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "PTCRepoCreationTemplate",
            "Effect": "Allow",
            "Principal": {
                "Service": "omics.amazonaws.com"
            },
            "Action": [
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": "*"
        }
    ]
}
```

------

### クロスアカウント Amazon ECR アクセスのポリシー
<a name="permissions-cross-account"></a>

クロスアカウントアクセスの場合、プライベートリポジトリの所有者はレジストリアクセス許可ポリシーとリポジトリ作成テンプレートを更新して、他のアカウントとそのアカウントの実行ロールへのアクセスを許可します。

レジストリアクセス許可ポリシーで、ポリシーステートメントを追加して、他のアカウントの実行ロールが Amazon ECR アクションにアクセスできるようにします。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowCrossAccountPTCinRegPermissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{{123456789012}}:role/{{RUN_ROLE}}"},
            "Action": [
                "ecr:CreateRepository",
                "ecr:BatchGetImage",
                "ecr:BatchImportUpstreamImage"
            ],
            "Resource": "arn:aws:ecr:{{us-east-1}}:{{123456789012}}:repository/{{path}}/*" 
        }
    ]
}
```

------

リポジトリ作成テンプレートで、ポリシーステートメントを追加して、他のアカウントの実行ロールが新しいコンテナイメージにアクセスできるようにします。必要に応じて、条件ステートメントを追加して、特定のワークフローへのアクセスを制限できます。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowCrossAccountPTCinRepoCreationTemplate",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{{111122223333}}:role/{{RUN_ROLE}}"},
            "Action": [
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceArn": "arn:aws:omics:us-east-1:{{444455556666}}:workflow/{{WORKFLOW_ID}}",
                    "aws:SourceAccount": "{{111122223333}}"
                }
            }
        }
    ]
}
```

------

実行ロールに 2 つのアクション (CreateRepository と BatchImportUpstreamImage) のアクセス許可を追加し、実行ロールがアクセスできるリソースを指定します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CrossAccountPTCRunRolePolicy",
            "Effect": "Allow",
            "Action": [
                "ecr:CreateRepository",
                "ecr:BatchImportUpstreamImage",       
                "ecr:BatchCheckLayerAvailability", 
                "ecr:BatchGetImage", 
                "ecr:GetDownloadUrlForLayer",
                "ecr:BatchGetImage"
            ],
            "Resource": "arn:aws:ecr:{{us-east-1}}:{{123456789012}}::repository/{path}/*"
        }
    ]
}
```

------