# AWS

Shisho Cloud と AWS を連携することで、AWS アカウントのセキュリティスキャンが実施できます。
この連携は以下の 2 ステップで行えます:

1. **対象の AWS アカウントに Shisho Cloud が利用（assume）できる IAM ロールと、関連する ID プロバイダを作成する。**
2. **作成した IAM ロールの ARN を Shisho Cloud に登録する。**

:::info
Shisho Cloud は IAM アクセスキーを必要とせず、その代わりに `sts:AssumeRoleWithWebIdentity` を用いた Web Identity Federation により、短命の認証情報を適宜発行しながら AWS にアクセスします。
これはおよそ [GitHub Action が有する OIDC ベースの AWS/Google Cloud 連携の仕組み](https://github.blog/changelog/2021-10-27-github-actions-secure-cloud-deployments-with-openid-connect/) と同等の仕組みです。
:::

## IAM ロールの作成

以下のどれかの手順に従って、IAM ロールを作成してください:

:::info
一部のリソースに対する `s3:GetObject` アクションは、ご連携いただいた AWS アカウント内の S3 オブジェクトへのアクセスを許可しないように制限されています。したがって AWS アカウントを Shisho Cloud にご連携頂いても、Shisho Cloud がお客様が管理する S3 内のデータを読み取ることはありません。

逆に、ご連携いただいた AWS アカウント**以外**の一部の S3 オブジェクト（リソースが含まれるアカウント `s3:ResourceAccount` が、Shisho Cloud が利用するロールが存在するアカウントとは異なるようなオブジェクト）に対してのみ、読み取りアクセスが許可されています。これは Elastic Beanstalk の設定検査時に必要となるためです。AWS は Elastic Beanstalk の設定情報を、AWS が管理する別アカウント内の S3 バケット（`arn:aws:s3:::elasticbeanstalk-env-resources-*/*` 等）に内部的に格納しています。その上で、Elastic Beanstalk の一部の API の利用時には、API の呼び出し元が当該バケットに対する関連権限を持たなくてはなりません。実際、AWS が管理する IAM ポリシーである [AWSElasticBeanstalkRoleCore](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSElasticBeanstalkRoleCore.html) は当該権限を含んでいることも確認できます。
:::

<Tabs>
<TabItem value="terraform" label="Terraform" default>

**変数 `shisho_cloud_org_id` の値をご自身の Shisho Cloud 組織の ID に変更した後**、以下の Terraform 実装をご自身の Terraform プロジェクトに含め、 `terraform apply` を実行してください。

<CodeBlock language="hcl">{AWSSetupTerraform}</CodeBlock>

</TabItem>
<TabItem value="awscli" label="AWS CLI">

**冒頭の `SHISHO_ORG_ID`の値（必須）、`AWS_CLI_OPTS` の値（任意）を適宜変更した後**、以下のスクリプトを実行することで、必要なリソース（ID プロバイダ・IAM ロール）が作成されます:

<CodeBlock language="shell">{AWSSetupShellScript}</CodeBlock>

</TabItem>

<TabItem value="cloudformation" label="CloudFormation">

以下の CloudFormation テンプレートを利用して IAM ロールを作成してください。
なお、テンプレートの利用時には、パラメータ `ShishoCloudOrgId` にはご自身が作成した Shisho Cloud 組織の ID を指定してください。

<CodeBlock language="yaml">{AWSSetupCloudFormation}</CodeBlock>

</TabItem>
</Tabs>

IAM ロールが作成できたら、その ARN を控えてください。ARN は上記の標準設定例の場合、`arn:aws:iam::123456789012:role/ShishoCloudSecurityAudit` のようになるはずです。

## Shisho Cloud への ARN の登録

「歯車マーク :gear: > 連携（Integrations）」画面に表示されているカード「AWS」の「設定」ボタンを押下し、画面の指示に従いながら ARN を入力してください。

入力が完了すると、設定ページに、以下のようなチェックマークと共に ARN が表示されるはずです:
![](/docs/ja/_md-assets/850bfa75ce-integrations-aws.png)

この状態になれば AWS 連携のセットアップは完了です。Shisho Cloud は AWS のアカウントにアクセスできるようになっています。

:::info

AWS 側のキャッシュ仕様の兼ね合いで、連携後数分間は Shisho Cloud が AWS にアクセスできない可能性があります。
直ちに設定が完了しない場合は、最大 5 分程度お待ちください。

:::

:::warning

もし上記の手順で AWS 連携が正常に行えない場合は、遠慮なくサービス運営元（Flatt Security）にお問い合わせください。

:::

## 参考: 連携の解除方法

連携を解除する際は、Shisho Cloud 上での作業の他、以下の AWS のリソースを削除してください。

- IAM ロール `ShishoCloudSecurityAudit`
- ID プロバイダ `https://tokens.cloud.shisho.dev`
