

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

# Amazon Lex V2 内のリソースベースのポリシーの例
<a name="security_iam_resource-based-policy-examples"></a>

ある*リソースベースのポリシー*は、ボットやボットのエイリアスなどのリソースにアタッチされています。リソースベースのポリシーによって、リソースにアクセスできるユーザーと、そのユーザーが実行できるアクションを指定できます。例えば、ユーザーが特定のボットを変更できるようにするリソースベースのポリシーを追加したり、特定のボットエイリアスに対してユーザーがランタイムオペレーションを使用することができます。

リソースベースのポリシーを使用すると、他の AWS のサービスがアカウント内のリソースにアクセスすることを許可できます。例えば、Amazon Connect が Amazon Lex V2 ボットにアクセスすることを許可できます。

ボットまたはボットエイリアスを作成する方法については、「[Amazon Lex V2 ボットの使用](building-bots.md)」を参照してください。

**Topics**
+ [コンソールを使用してリソースベースのポリシーを指定します。](#security_iam_resource-based-policy-examples-console)
+ [API を使用してリソースベースのポリシーを指定する](#security_iam_resource-based-policy-examples-api)
+ [IAM ロールがボットを更新し、ボットのエイリアスを一覧表示できるようにする。](#security_iam_resource-based-policy-examples-allow-lex-models)
+ [ユーザーにボットとの会話を許可する](#security_iam_resource-based-policy-examples-allow-lex-runtime)
+ [AWS サービスに特定の Amazon Lex V2 ボットの使用を許可する](#security_iam_resource-based-policy-examples-allow-lex-connect)

## コンソールを使用してリソースベースのポリシーを指定します。
<a name="security_iam_resource-based-policy-examples-console"></a>

Amazon Lex V2 コンソールを使用して、ボットとボットエイリアスのリソースベースのポリシーを管理できます。ポリシーの JSON 構造を入力すると、コンソールがそれをリソースに関連付けます。リソースにポリシーがすでに関連付けられている場合は、コンソールを使用してポリシーを表示および変更できます。

ポリシーエディタでポリシーを保存すると、コンソールはポリシーの構文をチェックします。ポリシーに、存在しないユーザーやリソースでサポートされていないアクションなどのエラーが含まれている場合は、エラーを返し、ポリシーを保存しません。

次に、コンソール内のボットのリソースベースのポリシーエディタを示します。ボットエイリアスのポリシーエディタも同様です。

![Amazon Lex V2 コンソールのリソースベースのポリシーエディタ。](http://docs.aws.amazon.com/ja_jp/lexv2/latest/dg/images/resource-policy-editor.png)


**ボットのポリシーエディタを開くには**

1. AWS マネジメントコンソールにサインインし、[https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/) で Amazon Lex コンソールを開きます。

1. [**ボット**] リストから、ポリシーを編集するボットを選択します。

1. [**リソースベースのポリシー**] セクションで、[**編集**]を選択します。

**ボットエイリアスのポリシーエディタを開くには**

1. AWS マネジメントコンソールにサインインし、[https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/) で Amazon Lex コンソールを開きます。

1. [**ボット**] リストから、編集するエイリアスを含むボットを選択します。

1. 左側のメニューから、[**エイリアス**] を選択し、[エイリアスの作成] を選択します。

1. [**リソースベースのポリシー**] セクションで、[**編集**]を選択します。

## API を使用してリソースベースのポリシーを指定する
<a name="security_iam_resource-based-policy-examples-api"></a>

API オペレーションを使用して、ボットとボットのエイリアスのリソースベースのポリシーを管理できます。ポリシーを作成、更新、および削除するオペレーションがあります。

[CreateResourcePolicy](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateResourcePolicy.html)  
指定されたポリシーステートメントを持つ新しいリソースポリシーをボットまたはボットのエイリアスに追加します。

[CreateResourcePolicyStatement](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateResourcePolicyStatement.html)  
新しいリソースポリシーステートメントをボットまたはボットのエイリアスに追加します。

[DeleteResourcePolicy](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DeleteResourcePolicy.html)  
ボットまたはボットのエイリアスからリソースポリシーを削除します。

[DeleteResourcePolicyStatement](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DeleteResourcePolicyStatement.html)  
ボットまたはボットのエイリアスからリソースポリシーステートメントを削除します。

[DescribeResourcePolicy](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DescribeResourcePolicy.html)  
リソースポリシーとポリシーリビジョンを取得します。

[UpdateResourcePolicy](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateResourcePolicy.html)  
ボットまたはボットのエイリアスの既存のリソースポリシーを新しいリソースポリシーに置き換えます。

### 例
<a name="collapsible-api-example"></a>

------
#### [ Java ]

次の例では、リソースベースのポリシーオペレーションを使用してリソースベースのポリシーを管理する方法を示しています。

```
        /*
         * Create a new policy for the specified bot alias 
         * that allows a role to invoke lex:UpdateBotAlias on it.
         * The created policy will have revision id 1.
         */
        
        CreateResourcePolicyRequest createPolicyRequest =
                CreateResourcePolicyRequest.builder()
                        .resourceArn("arn:aws:lex:{{Region}}:{{123456789012}}:bot-alias/{{MYBOTALIAS}}/TSTALIASID")
                        .policy("{\"Version\": \"2012-10-17\",\"Statement\": [{\"Sid\": \"BotAliasEditor\",\"Effect\": \"Allow\",\"Principal\": {\"AWS\": \"arn:aws:iam::{{123456789012}}:role/{{BotAliasEditor}}\"},\"Action\": [\"lex:UpdateBotAlias\"],\"Resource\":[\"arn:aws:lex:{{Region}}:{{123456789012}}:bot-alias/{{MYBOTALIAS}}/TSTALIASID\"]]}")

        lexmodelsv2Client.createResourcePolicy(createPolicyRequest);
        
        /*
         * Overwrite the policy for the specified bot alias with a new policy.
         * Since no expectedRevisionId is provided, this request overwrites the current revision.
         * After this update, the revision id for the policy is 2.
         */
        UpdateResourcePolicyRequest updatePolicyRequest =
        UpdateResourcePolicyRequest.builder()
                        .resourceArn("arn:aws:lex:{{Region}}:{{123456789012}}:bot-alias/{{MYBOTALIAS}}/TSTALIASID")
                        .policy("{\"Version\": \"2012-10-17\",\"Statement\": [{\"Sid\": \"BotAliasEditor\",\"Effect\": \"Deny\",\"Principal\": {\"AWS\": \"arn:aws:iam::{{123456789012}}:role/{{BotAliasEditor}}\"},\"Action\": [\"lex:UpdateBotAlias\"],\"Resource\":[\"arn:aws:lex:{{Region}}:{{123456789012}}:bot-alias/{{MYBOTALIAS}}/TSTALIASID\"]]}")

        lexmodelsv2Client.updateResourcePolicy(updatePolicyRequest);
        
        /*
         * Creates a statement in an existing policy for the specified bot alias 
         * that allows a role to invoke lex:RecognizeText on it.
         * This request expects to update revision 2 of the policy. The request will fail
         * if the current revision of the policy is no longer revision 2.
         * After this request, the revision id for this policy will be 3.
         */
        
        CreateResourcePolicyStatementRequest createStatementRequest =
                CreateResourcePolicyStatementRequest.builder()
                        .resourceArn("arn:aws:lex:{{Region}}:{{123456789012}}:bot-alias/{{MYBOTALIAS}}/TSTALIASID")
                        .effect("Allow")
                        .principal(Principal.builder().arn("arn:aws:iam::{{123456789012}}:role/{{BotRunner}}").build())
                        .action("lex:RecognizeText")
                        .statementId("BotRunnerStatement")
                        .expectedRevisionId(2)
                        .build();

        lexmodelsv2Client.createResourcePolicyStatement(createStatementRequest);

        /*
         * Deletes a statement from an existing policy for the specified bot alias by statementId.
         * Since no expectedRevisionId is supplied, the request will remove the statement from
         * the current revision of the policy for the bot alias. 
         * After this request, the revision id for this policy will be 4.
         */
        DeleteResourcePolicyRequest deleteStatementRequest =
                DeleteResourcePolicyRequest.builder()
                        .resourceArn("arn:aws:lex:{{Region}}:{{123456789012}}:bot-alias/{{MYBOTALIAS}}/TSTALIASID")
                        .statementId("BotRunnerStatement")                        
                        .build();

        lexmodelsv2Client.deleteResourcePolicy(deleteStatementRequest);
        
        /*
         * Describe the current policy for the specified bot alias
         * It always returns the current revision.
         */
        DescribeResourcePolicyRequest describePolicyRequest =
                DescribeResourcePolicyRequest.builder()
                        .resourceArn("arn:aws:lex:{{Region}}:{{123456789012}}:bot-alias/{{MYBOTALIAS}}/TSTALIASID")
                        .build();

        lexmodelsv2Client.describeResourcePolicy(describePolicyRequest);
        
        
        /*
         * Delete the current policy for the specified bot alias
         * This request expects to delete revision 3 of the policy. Since the revision id for 
         * this policy is already at 4, this request will fail.
         */
        DeleteResourcePolicyRequest deletePolicyRequest =
                DeleteResourcePolicyRequest.builder()
                        .resourceArn("arn:aws:lex:{{Region}}:{{123456789012}}:bot-alias/{{MYBOTALIAS}}/TSTALIASID")
                        .expectedRevisionId(3);
                        .build();

        lexmodelsv2Client.deleteResourcePolicy(deletePolicyRequest);
```

------

## IAM ロールがボットを更新し、ボットのエイリアスを一覧表示できるようにする。
<a name="security_iam_resource-based-policy-examples-allow-lex-models"></a>

次の例では、特定の IAM ロールに対して Amazon Lex V2 モデル構築 API オペレーションを呼び出して、既存のボットを変更する権限を付与します。ユーザーはボットのエイリアスを一覧表示してボットを更新できますが、ボットまたはボットのエイリアスは削除できません。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "{{botBuilders}}",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{{123456789012}}:role/{{BotBuilder}}"
            },
            "Action": [
                "lex:ListBotAliases",
                "lex:UpdateBot"
            ],
            "Resource": [
                "arn:aws:lex:{{us-east-1}}:{{123456789012}}:bot/{{MYBOT}}"
            ]
        }
    ]
}
```

------

## ユーザーにボットとの会話を許可する
<a name="security_iam_resource-based-policy-examples-allow-lex-runtime"></a>

次の例では、ボットの単一のエイリアスで Amazon Lex V2 ランタイム API オペレーションを呼び出す権限を特定のユーザーに付与します。

ユーザーには、ボットエイリアスを更新または削除する許可が特に拒否されています。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "botRunners",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{{123456789012}}:user/{{botRunner}}"
            },
            "Action": [
                "lex:RecognizeText",
                "lex:RecognizeUtterance",
                "lex:StartConversation",
                "lex:DeleteSession",
                "lex:GetSession",
                "lex:PutSession"
            ],
            "Resource": [
                "arn:aws:lex:{{us-east-1}}:{{123456789012}}:bot-alias/{{MYBOT}}/{{MYBOTALIAS}}"
            ]
        },
        {
            "Sid": "botRunners",
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam::{{123456789012}}:user/{{botRunner}}"
            },
            "Action": [
                "lex:UpdateBotAlias",
                "lex:DeleteBotAlias"
            ],
            "Resource": [
                "arn:aws:lex:{{us-east-1}}:{{123456789012}}:bot-alias/{{MYBOT}}/{{MYBOTALIAS}}"
            ]
        }
    ]
}
```

------

## AWS サービスに特定の Amazon Lex V2 ボットの使用を許可する
<a name="security_iam_resource-based-policy-examples-allow-lex-connect"></a>

次の例では、 AWS Lambda と Amazon Connect に Amazon Lex V2 ランタイム API オペレーションを呼び出すアクセス許可を付与します。

条件ブロックはサービスプリンシパルに必要であり、グローバルコンテキストキー `AWS:SourceAccount` および `AWS:SourceArn` を使用する必要があります。

`AWS:SourceAccount` は、Amazon Lex V2 ボットを呼び出しているアカウント ID です。

`AWS:SourceArn` は、Amazon Lex V2 ボットエイリアスの呼び出し元となる Amazon Connect サービスインスタンスまたは Lambda 関数のリソース ARN です。